Mapz's Blog

可以递归的函数指针

Django项目开发(一)

原文地址:Mapz的blog

这是系列第二篇,第一篇请移步

Django项目的搭建

上一次我们介绍了如何搭建django项目,本次我们继续学习django项目的开发


数据库的接入

我们这里使用mySql数据库

先在虚拟环境中装 pymysql (MySQLdb在Python3中已经不能用)

1
pip install pymysql

打开settings.py

修改

1
2
3
4
5
6
7
8
9
10
11
12
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
'ENGINE': 'django.db.backends.mysql', #数据库引擎
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'NAME': 'proj_mgr_kits', #你的数据库名称
'USER':'***', #数据库用户
'PASSWORD':'***', #数据库密码
'HOST':'***', #数据库主机
'PORT':'3306', #数据库端口
}
}

详细修改方式参见 官网文档

另外针对 pymysql 还需要配置站点的_init_.py

1
2
import pymysql
pymysql.install_as_MySQLdb()

其他配置

设置时区和语言

1
2
3
LANGUAGE_CODE = 'zh-Hans'

TIME_ZONE = 'PRC'

Django结构简介

django是一个MVC框架,数据上,使用模型model做ORM映射数据库

view层使用django的模版来做渲染

控制层用灵活的url路由来实现,后面我们陆续来介绍这些内容


创建数据库表

1
python manage.py migrate

这个命令会创建所有已安装的APP所需的数据表

所有已经安装的APP被配置在 settings.py
INSTALLED_APPS 属性下


创建model

Model 是 Django做对象映射的模型,你创建的 Model 类会被diango映射到数据库中

我们创建一个自己的model

修改 models.py

1
2
3
from django.db import models
class Project(models.Model):
project_name = models.CharField(max_length=50)

Model 支持的数据类型和创建参数参见 官方文档

常用的参数比如choices,可以让参数在一个枚举中选择

例如

1
2
3
4
5
6
class DeployProfile(models.Model):
deploy_type_choice = (
('Server','服务器'), #第一个参数为数据库保存值,第二个为显示在界面的值
('CLient','客户端')
)
deploy_type = models.CharField(max_length=20, choices=deploy_type_choice, verbose_name='部署类型')

其他的类型就不再赘述


把我们自己的app加入到项目app中

编辑settings.py

1
2
3
4
5
INSTALLED_APPS = [
'xxxxx'
'qk_deploy.apps.QkDeployConfig',
'xxxxx'
]

重新创建表

1
python manage.py makemigrations qk_deploy

makemigrations 命令告诉系统,我的模型已经发生了变化,需要制作一个迁移

迁移做好之后,我们再用

1
python manage.py migrate

重新制作数据表


创建管理员

1
python manage.py createsuperuser

然后按提示输入,来创建一个管理员

启动服务器后

进入页面

http://127.0.0.1:8000/admin/

就可以用你的管理员来登陆管理界面了


把我们的app加入到管理界面中来

修改app目录下的admin.py

1
2
3
4
5
from django.contrib import admin

# Register your models here.
from .models import Project
admin.site.register(Project)

就可以了

register参数也接收一个可迭代容器

1
admin.site.register([Project,p1,p2,p3])

然后我们进入管理页面,发现上面的model已经可以管理了

但是如果我们想有一个自定义的名称,而不是类的名字,怎么办呢?

答案是在model中加上 meta

编辑Project model

1
2
3
4
5
6
class Project(models.Model):
project_name = models.CharField(max_length=50)

class Meta:
verbose_name = '项目'
verbose_name_plural = verbose_name

其中 verbose_name 是显示的名称,而 plural是复数形式,我们中文没有复数形式,所以就直接一样就ok了

双薪管理页面,我们发现管理中显示的内容已经是我们写的’项目’了

至于模型的字段要显示我们想要的名字呢,也是一样的,修改model

1
2
3
4
5
6
class Project(models.Model):
project_name = models.CharField(max_length=50, verbose_name='项目名称')

class Meta:
verbose_name = '项目'
verbose_name_plural = verbose_name

好奇的同学又要问了,APP名字在管理界面怎么改呀

我们修改apps.py

在QkDeployConfig类下面增加一个属性

1
2
3
class QkDeployConfig(AppConfig):
name = 'qk_deploy'
verbose_name = '部署管理器'

刷新管理界面再看看~~

我们用管理工具创建新项目后,新项目在列表里面显示为 project object,这显然不是我们想要的,怎么办咧

为model加上字符串返回函数就可以了

1
2
3
4
5
6
7
8
9
class Project(models.Model):
project_name = models.CharField(max_length=50, verbose_name='项目名称')

def __str__(self):
return self.project_name

class Meta:
verbose_name = '项目'
verbose_name_plural = verbose_name

刷新管理界面,显示的项目已经是我们设定的项目名称了


文本编码问题

如果遇到中文无法录入管理系统的问题,请检查数据库编码是否和程序中一致哦

不一致的话,请先修改数据库编码,然后删除数据表,重新migrate


到此,我们的数据库管理功能已经完成,也就是MVC中的M

下次我们继续说MVC中的V ,也就是 view 展示层