软件框架
定义
Django简介
Django,发音为[`d???ɡ??],是用python语言写的开源web开发框架,并遵循MVC设计。
MVT
Django是遵循MVC的一个Web框架,但是他有自己的一个名字,叫做MVT
和原则。Do not repeat yourself。不要自己去重复一些工作
M:Model,模型,和数据库进行交互,与MVC中的M功能相同
V:View,视图,接收请求,进行处理,与M和T交互,返回应答,与MVC中的C功能相同
T:template,模板,产生html页面,和MVC终的V功能相同
MVT的各部分功能:
- 说明其所在路径是一个python的包
- settings.py是项目的配置文件,比如项目要使用哪个数据库,就在里面配置
- urls.py url:在访问 站时,我们输入的 站就是一个url的地址。urls.py文件是进行url路由的配置(当我们输入一个地址后,他怎么给我们找到对应的处理函数是谁)
- wsgi.py Django是遵循wsgi协议的框架,wsgi.py就是web服务器和django交互的一个入口
- manage.py 是我们项目的管理文件,是一个可执行文件,通过该文件,我们可以管理整个项目
创建django应用
一个项目由很多个应用组成,每一个应用完成一个功能模块
创建应用的命令如下:python manage.py startapp 应用名
每创建一个应用,里面就会有如下文件:
运行一个web项目,就需要一个web服务器,而django本身给我们提供了一个web服务器,使用python manage.py runsevser运行该服务器,然后即可根据提示用浏览器访问
ORM
O:object,对象
R:relations,关系
M:mapping,映射
ORM的作用:建立类和表的对应关系
ORM让我们能够通过对类和对象的操作实现对表的操作,就不需要再去写sql语句。这是元类的一种最经典的应用
在创建的项目文件夹下的models.py文件中,我们设计和表对应的类,这个类被称做模型类
ORM的另一个作用:根据设计的类生成数据库中的表
模型(M)
模型类设计和表生成
模型类设计
在项目文件夹下的models.py文件中,比如我们定义一个图书类
模型类的字段属性和选项
模型类属性命名限制
- 不能是python关键字
- 不允许使用连续的下划线,不是由django的查询方式决定的
- 定义属性时需要指定字段类型,通过字段类型的参数指定选择,语法如下: 属性名 = models.字段类型(选项)
字段类型
使用时需要引入django.db.models包
-
AutoField 自动增长的IntegerField,通常不用指定,不指定时django会自动创建属性名为id的自动增长属性,在迁移文件中可以查看到
-
BooleanField 布尔字段,值为True或False
-
NullBooleanField 支持Null,True,False三种值
-
CharField(max_length=最大长度) 字符串,参数max_length指定最大字符个数,必须指定,不然 错
-
TextField 大文本字段,一般超过4k个字
-
IntegerField 整数
-
DecimalField(max_digits=None, decimal_places=None) 十进制浮点数,第一个参数表示总位,第二个参数表示小数位数
-
FloatField 浮点数,参数同上。注意:float的精确度比decimal小
-
DateField([auto_now=False, auto_now_add=False]) 日期,有两个可选参数:
- auto_now 表示每次保存对象时,自动设置该字段为当前时间,用于“最后一次修改”的时间戳,它总是使用当前日期,默认为false
- auto_now_add 表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认false
- 两个参数是相互排斥的,不能同时使用
-
TimeField 时间参数同DateField
-
DateTimeField 日期时间,参数同上
-
FileField 上传文件字段
-
ImageField 继承于FileField,对上传的内容进行校验,确保是有效的图片
选项
作为Field()中的参数
通过选项实现的字段的约束,选项如下:
- default 默认值。设置默认值
- primary_key 若为True,则该字段会成为模型的主键字段,默认值是false,一般作为AutoField的选项使用
- unique 唯一性约束,如果为True,这个字段在表中必须有唯一值,默认值是False
- db_index 若值为True,则在表中会为这个字段创建索引,默认值为False
- db_column 字段的名称,如果未指定,则使用属性的名称
- null 如果为True,表示允许为空,默认值是False
- blank 如果为True,则该字段允许为空白,默认值是False
更多的可以见官方文档
对比:null是数据库的概念,blank是后台管理页面表单验证范畴的
注意:当修改模型类之后,如果添加的选项不影响表的结构,则不需要重新做迁移,eg:blank和default
模型类生成表
一、 生成迁移文件
迁移文件是根据模型类生成的,生成的迁移文件存放在migrations文件夹下
命令:python manage.py makemigrations
二、执行迁移生成表
命令:python manage.py migrate
根据迁移文件生成表
注意:django默认使用的数据库是sqlite3,在项目文件夹下,与项目同名的文件夹下的settings.py文件中DATABASES字段处可以看到
当文件迁移后,我们就可以在项目文件夹下看到一个名为db.sqlite3的文件,即我们的数据库文件,可以直接使用相应软件打开
通过模型类操作数据表
- 使用python manage.py shell进入项目终端
- from booktest.models import BookInfo (from 应用名.models import 自己定义的类的名字)
- 创建类的对象:b = BookInfo()
- 增加实例属性(注意:这个实例属性的名字必须和类属性的名字一样):b.btitle = “天龙八部”
- from datetime import date
- b.bpub_date = date(1990,1,1)
- 然后就把这个实例属性里面保存的数据添加到数据库:b.save(),注意:这个方法是继承自models.Model
- 用 模型类名.objects查看对应表里面的数据(注意:是模型类名,而不是上面的变量名b),eg:查看id=1的记录:b2 = BookInfo.objects.get(id=1),b2是一个BookInfo类的对象。即:把查出来的数据是保存在一个对象里面,然后可以用类似:b2.btitle查看btitle对应的数据
- 更改数据:b2.bpub_date = date(1990,10,10),即:直接更改查询的对象的属性值即可,然后用b2.save()将保存同步到数据库
- 如何删除一条记录:b2.delete()
建立两张表之间的关系:外键
注意:往“多”类的属性里面赋值的时候,相关联属性其对应值必须是与其关联的类的对象,eg:
查询表中的所有内容:类名.objects.all(),返回的是一个列表,其中的元素为每一条数据的对象
后台管理
在所创建应用的对应文件夹下,有一个admin.py,(eg:本案例中为:/myProject/booktest/admin.py)通过它,我们实现后台的管理
步骤:
-
本地化
-
注册模型类
在应用下的admin.py中注册模型类,告诉django框架根据注册的模型类来生成对应表管理页面
admin文件:
- 自定义管理页面:自定义模型管理类。模型管理类就是告诉django在生成的管理页面上显示哪些内容(比如,我们让其在浏览 器中显示图书名称的同时显示出版时间)
视图(V)
在django中,通过浏览器去请求一个页面的时候,是使用视图函数来处理这个请求的,视图函数处理后,要给浏览器返回页面内容
视图函数的使用
一、定义视图函数
在应用下的views.py中,eg:定义一个名为index的视图函数(注意:视图函数必须有一个参数:request)
二、进行url的配置
首先我们要在应用对应的目录下建立urls.py文件,然后在其中创建一个列表,如下:
同时,我们也需要在项目的urls里面添加配置项
效果图如下:
模板(T)
django中的模板不仅仅是个html文件,还可以在其中定义变量,也可以写类似于编程语言的语句
模板文件的使用
-
创建模板文件夹(通常是在项目文件夹下创建templates)
-
配置模板目录(在项目的settings.py文件下),如下:
-
使用模板文件
- 加载模板文件:去模板目录下面获取html文件的内容,得到一个模板对象(通常,不同的应用会用到不同的模板文件,所以我们会再在templates下面建立与应用名同名的文件夹,用以存储该应用用到的模板文件)
- 定义模板上下文:向模板文件传递数据,即:如果模板中使用了变量,需要将变量的数据给他
- 模板渲染,读出变量后,将变量的位置替换掉,即得到一个标准的html文件
eg:
模板文件:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!