Django MTV模型

来自CloudWiki
跳转至: 导航搜索

MVC模式

MVC模式

MVC模式(Model–view–controller)

模型(Model)、视图(View)和控制器(Controller)


Django遵循MVC架构

M : 数据存取、处理模块,通过django orm实现。 (models.py)

V : 对数据进行查询、逻辑处理,通过template展示。(views.py | templates\my_temp.html)

C : 根据用户输入委派视图的部分,由 Django 框架根据 URLconf 设置,对给定 URL 调用适 当的 Python 函数。(urls.py)

Model模型

什么是Model

Basics:

每一个Model代表了数据库中的一张表

每一个Model都是django.db.models.Model的子类

Model的每个属性代表了数据库表的每个字段

字段类型

Bd20-4-1.png

Django提供的常见的字段类型有:

  • IntegerField 整数类型字段
  • CharField 字符类型字段
  • DateTimeField 时间类型字段

其他:BooleanField、DateField、TextField


More info: https://docs.djangoproject.com/en/2.2/ref/models/fields/#field-types

自定义

字段选项配置

null:

blank :

choices:

default: 默认值

primary_key: 是否为主键

unique: 是否值唯一

字段取名限制

字段取名时的一些限制(Field name restrictions)

字段名不能是Python保留的关键字

class Example(models.Model):
pass = models.IntegerField() # 'pass' is a reserved word!

字段名不能包含双下划线


Model的元信息(Meta Options)

可以通过在Model的内部定义class Meta来提供Model的一些元信息 比如下面的例子:

Bd20-5-1.png

ORM与数据库访问

ORM是Django用来进行数据库访问的接口

新增数据

Group.objects.create(name="group1", leader="wang") Group(name="group2", leader="li").save()

Business.objects.create(name="biz1", creator="page", members=8, group=Group.objects.get(id=1))

更新数据

Group.objects.filter(name="group1").update(leader="chen")

删除数据

Group.objects.filter(name="group2").delete()

简单查询

get

Group.objects.get(name="group1", leader="chen")

返回Model对象实例

不存在或存在多项满足查询条件的数据,都会报错

filter

Group.objects.filter(name="group1", leader="chen")

返回QuerySet对象

all

Group.objects.all()

返回QuerySet对象

QuerySet对象可以继续调用filter方法

Group.objects.filter(name="group1").filter(leader="chen")

复杂查询

在查询字段加上双下划线和关键字可以完成复杂查询,如:

contains	包含:Group.objects.filter(name 	contains="group")
 	startswith、 	endswith	以…开头、结尾
 	gt、 	lt	大于、小于
 	range	两者之间
fkey 	field	外键查询

Business.objects.filter(group name endswith="1")

Admin管理后台

创建管理员角色

登录,需先创建管理员角色

python manage.py createsuperuser

Username (leave blank to use 'root'): admin  Email address: admin@test.com
Password:
Password (again):
Superuser created successfully.

注册model

在admin.py文件中将自己的model注册到admin下,Django就会把这个展示到管理页面

from django.contrib import admin   # Register your models here.  from awardapp import models

admin.site.register(models.Organization)  admin.site.register(models.Member)  admin.site.register(models.Award)  admin.site.register(models.Application)

页面的后台渲染

Bd20-5-2.png

变量引用 {{ var }}

简单循环逻辑代码:

{% if … %} … {% endif %}

{% for … %}…{% endfor %}