首页 > 其他分享 >Django模板语法及常见ORM关键词

Django模板语法及常见ORM关键词

时间:2022-12-14 20:11:06浏览次数:52  
标签:models 视图 Django 语法 ORM 筛选 模板

昨日内容回顾

  • 路由分配

    将本来一层的路由匹配拆分成两层进行匹配,第一层由总路由进行匹配,分配给分路由匹配具体视图,这就是路由分类,通过路由分配可以更方便进行多人开发及管理。

  • 名称空间

    所有视图的名称共存于一个名称空间内,因此如果要给不同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 文件名%}。

模板的继承与导入

模板的继承与导入是为了在生成样式相似的页面时,减少相同代码的编写。

模板继承操作的具体方式为:

  1. 制作一个作为模板的HTML页面,并在需要改动的区域添加block标签

    {% block content %}  
    {% endblock %}
    
  2. 需要使用模板的HTML页面,需要在HTML文件内编写以下代码

    {% extend '模板文件名' %}
    {% block content %}  
    {% endblock %}
    

模板继承的注意事项

  1. 模板继承可以使用原内容,与子类继承父类类似

    {% extend '模板文件名' %}
    {% block content %}  
    {{ block.super }}
    {% endblock %}
    
  2. 一个完整的模板中至少应该有三个区域,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方法

  1. 自带的sqlite3数据库对时间字段不敏感,有时候会展示错乱,所以我们习惯切换成常见的数据库比如MySQL Django。ORM并不会自动帮你创建库,所以需要提前准备好。

  2. 单独测试Django某个功能层

​ 默认不允许单独测试某个py文件,如果想要测试某个py文件(主要models.py),有两种方式:

​ 测试环境1:pycharm提供的python console

​ 测试环境2:自己搭建(自带的test或者自己创建)

​ 1.拷贝manage.py前四行
​ 2.自己再加两行
​ import Django
​ Django. setup()

  1. Django的ORM底层还是SQL语句,我们是可以查看的。

​ 如果我们手上是一个QuerySet对象,那么可以直接点query查看SQL语句。

​ 如果想查看所有ORM底层的SQL语句也可以在配置文件添加日志记录。

标签:models,视图,Django,语法,ORM,筛选,模板
From: https://www.cnblogs.com/akazukis/p/16983399.html

相关文章