昨日内容回顾
-
路由分配
将本来一层的路由匹配拆分成两层进行匹配,第一层由总路由进行匹配,分配给分路由匹配具体视图,这就是路由分类,通过路由分配可以更方便进行多人开发及管理。
-
名称空间
所有视图的名称共存于一个名称空间内,因此如果要给不同app下的视图指定相同的名字,就会引起名称的冲突,造成部分名称的失效。最简单的解决办法是避免指定相同的名字,为视图添加当前app名称前缀即可。
-
虚拟环境
虚拟环境存在的意义是为不同程序的运行提供特定的独立环境,以节约单独程序的储存空间。
-
视图层获取文件对象
视图层获取文件对象使用request. FILES,前提是前端在发送请求时携带文件数据的form表单的请求方式(method)必须为POST,编码类型(enctype)必须为multipart/form-data。
-
视图层返回数据对象
视图层返回的数据对象必须为HttpResponse对象,无论采用哪种方式(HttpResponse/render/redirect)返回数据,其本质都是返回了一个HttpResponse对象。
-
FBV及CBV
FBV就是功能为基础的视图,CBV是类为基础的视图,CBV实质也是FBV,只是通过类的包装来实现指定请求自动执行指定操作。
CBV的执行过程实际是调用了View类中的as_view方法,生成对象并调用dispatch方法。
-
模板层语法
模板层语法包含逻辑相关语法、数据相关语法、注释语法。
模板语法传值特性:可保留数据相关特性及方法、能够加括号运行的会直接加括号运行并返回结果。
今日内容概要
- 模板层标签语法
- 自定义模板语法
- 模板的继承与导入
- 模型层ORM关键字
- 测试models方法
今日内容详细
模板层标签语法
标签相关数据使用的语法主要是if判断与for循环,是逻辑与数据语法的结合。
if判断与python普通if语句差别不大,需要注意判断结束后需要添加结束标识endif。
for循环可按照常规方式编写,也可嵌入if判断,使用模板语法关键字forloop. first及forloop. last为第一次及最后一次for循环添加特殊的操作。
自定义模板语法
自定义模板语法的操作方式:
1.在应用下创建一个名字必须叫templatetags的目录;
2.在上述目录下创建任意名称的py文件;
3.在上述py文件内先编写两行固定的代码;
from Django import template
register = template. Library()
4.在html文件上载入自定义的tag,语法为 {% load 文件名%}。
模板的继承与导入
模板的继承与导入是为了在生成样式相似的页面时,减少相同代码的编写。
模板继承操作的具体方式为:
-
制作一个作为模板的HTML页面,并在需要改动的区域添加block标签
{% block content %} {% endblock %}
-
需要使用模板的HTML页面,需要在HTML文件内编写以下代码
{% extend '模板文件名' %} {% block content %} {% endblock %}
模板继承的注意事项
-
模板继承可以使用原内容,与子类继承父类类似
{% extend '模板文件名' %} {% block content %} {{ block.super }} {% endblock %}
-
一个完整的模板中至少应该有三个区域,CSS区域、内容区域、JS区域。
模板的导入
将某个html的部分提前写好,之后很多html页面都想使用就可以导入,导入方式:
{% include 'myform.html' %}
模型层ORM关键字
添加数据并获取数据对象
create # models.类名.objects.create(关键字赋值)
筛选数据关键字
筛选数据的结果为QuerySet,形式为 [数据对象1,数据对象2…]
all # models.类名.objects.all()
get # models.类名.objects.get(筛选条件),一般不使用,因为没有查询结果时会报错
filter # models.类名.objects.filter(筛选条件),使用最多
exclude # models.类名.objects.exclude(筛选条件),筛选不满足条件的数据对象
处理筛选结果关键字
count # 对筛选结果进行计数,返回结果为数字
first/last # 取出筛选结果的第一个/最后一个对象
values # 取出筛选结果的值,结果为QuerySet,形式为[{字段名:数值,……}]
values_list # 取出筛选结果的值,结果为QuerySet,多个字段时形式为[(数据值1,数据值2),……]
distinct # 取出不重复的筛选结果
order_by # 按照指定字段名对筛选结果进行排序,可指定多个字段名
reverse # 对排序过的筛选结果进行逆序展示
update # 对筛选结果的值进行更改
delete # 删除筛选结果
测试models方法
-
自带的sqlite3数据库对时间字段不敏感,有时候会展示错乱,所以我们习惯切换成常见的数据库比如MySQL Django。ORM并不会自动帮你创建库,所以需要提前准备好。
-
单独测试Django某个功能层
默认不允许单独测试某个py文件,如果想要测试某个py文件(主要models.py),有两种方式:
测试环境1:pycharm提供的python console
测试环境2:自己搭建(自带的test或者自己创建)
1.拷贝manage.py前四行
2.自己再加两行
import Django
Django. setup()
- Django的ORM底层还是SQL语句,我们是可以查看的。
如果我们手上是一个QuerySet对象,那么可以直接点query查看SQL语句。
如果想查看所有ORM底层的SQL语句也可以在配置文件添加日志记录。
标签:models,视图,Django,语法,ORM,筛选,模板 From: https://www.cnblogs.com/akazukis/p/16983399.html