响应对象主要有三种形式:(1)HttpResponse()
- HttpResponse()
- render()
- redirect()
- content:返回的内容。
- status:返回的HTTP响应状态码。
- content_type:返回的数据的MIME范例,默认为 text/html 。浏览器会根据这个属性,来显示数据。假如是 text/html ,那么就会解析这个字符串,假如 text/plain ,那么就会显示一个纯文本。
- 设置响应头: response['X-Access-Token'] = 'xxxx' 。
默认情况下 JsonResponse 只能对字典进行 dump ,假如想要对非字典的数据进行 dump ,那么需要给 JsonResponse 通报一个 safe=False 参数。示例代码如下:
APPEND_SLASH的实现就是基于redirect4.4、登录验证案例
静态网页:页面上的数据都是写死的,万年稳定Django框架中内置了web开发领域非常出名的一个DjangoTemplate模板引擎(DTL)。DTL官方文档
动态网页:页面上的数据是从后端动态获取的(比如后端获取当前时间;后端获取数据库数据然后通报给前端页面)
配置模板目录:在当前项目根目录下创建了模板目录templates. 然后在settings.py, 模板相关配置,找到TEMPLATES配置项,填写DIRS设置模板目录。
- 在项目配置文件中指定保存模板文件的模板目录。一般模板目录都是设置在项目根目录或者主应用目录下。
- 在视图中基于django提供的渲染函数绑定模板文件和需要展示的数据变量
- 在模板目录下创建对应的模板文件,并根据模板引擎内置的模板语法,填写输出视图通报过来的数据。
5.3、模板语法DTL模板文件是一种带有特殊语法的HTML文件,这个HTML文件可以被Django编译,可以通报参数进去,实现数据动态化。在编译完成后,生成一个普通的HTML文件,然后发送给客户端。
- DTL模板文件与普通html文件的区别在那里?
- 开发中,我们一般把开发中的文件分2种,分别是静态文件和动态文件。
复制代码
- * 静态文件,数据保存在当前文件,不需要经过任何处理就可以展示出去。普通html文件,图片,视频,音频等这一类文件叫静态文件。
- * 动态文件,数据并不在当前文件,而是要经过服务端或其他程序进行编译转换才可以展示出去。 编译转换的过程往往就是使用正则或其他技术把文件内部具有特殊格式的变量转换成真实数据。 动态文件,一般数据会保存在第三方存储设备,如数据库中。django的模板文件,就属于动态文件。
5.3.1、变量渲染之深度查询
- 变量渲染(深度查询、过滤器)
复制代码
- {{val}}
- {{val|filter_name:参数}}
- 标签
复制代码
- {% tag_name %}
- 嵌套和继承
通过句点符号深度查询tem.urls,代码:
视图, home.views.py代码:
{%block %} 独立内容 {%endblock%}视图home.views.py, 代码:
{{block.super}}
5.4、静态文件
- 假如你在模版中利用 {% extends %} 标签,它必须是模版中的第一个标签。其他的任何情况下,模版继承都将无法工作。
- 在base模版中设置越多的 {% block %} 标签越好。请记住,子模版不必界说全部父模版中的blocks,所以,你可以在大多数blocks中添补合理的默认内容,然后,只界说你需要的那一个。多一点钩子总比少一点好。
- 为了更好的可读性,你也可以给你的 {% endblock %} 标签一个 名字 。例如:{``% block content``%``}``...``{``% endblock content``%``},在大型模版中,这个方法帮你清楚的看到哪一个 {% block %} 标签被关闭了。
- 不能在一个模版中界说多个类似名字的 block 标签。
O是object,也就类对象的意思。映射:
R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思。
M是mapping,是映射的意思。
类:sql语句table表ORM的长处
类成员变量:table表中的字段、范例和约束
类对象:sql表的表记录
ORM 也有缺点
- 数据模子类都在一个地方界说,更容易更新和维护,也利于重用代码。
- ORM 有现成的工具,很多功能都可以自动完成,比如数据消除、预处理、事务等等。
- 它迫使你利用 MVC 架构,ORM 就是天然的 Model,最终使代码更清晰。
- 基于 ORM 的业务代码比较简单,代码量少,语义性好,容易明白。
- 新手对于复杂业务容易写出性能不佳的 SQL,有了ORM不必编写复杂的SQL语句, 只需要通过操作模子对象即可同步修改数据表中的数据.
- 开发中应用ORM未来假如要切换数据库.只需要切换ORM底层对接数据库的驱动【修改配置文件的连接地址即可】
我们可以通过以下步骤来利用django的数据库操作
- ORM 库不是轻量级工具,需要花很多精力学习和设置,甚至不同的框架,会存在不同操作的ORM。
- 对于复杂的业务查询,ORM表达起来比原生的SQL要更加困难和复杂。
- ORM操作数据库的性能要比利用原生的SQL差。
- ORM 抽象掉了数据库层,开发者无法了解底层的数据库操作,也无法定制一些特殊的 SQL。【自己利用pymysql另外操作即可,用了ORM并不表示当前项目不能利用别的数据库操作工具了。】
接下来以门生管理为例进行演示。[系统大概3-4表,门生信息,课程信息,老师信息],创建子应用student,注册子应用并引入子应用路由.
- 模子类被界说在"子应用/models.py"文件中。
- 模子类必须直接或者间接继承自django.db.models.Model类。
6.3、数据迁移
- 当模子字段的on_delete=CASCADE, 删除蔬菜(id=1),则在外键cid=1的商品id1和3就被删除。
- 当模子字段的on_delete=PROTECT,删除蔬菜,mysql自动检查商品信息表,有没有cid=1的记录,有则提示必须先移除掉商品信息表中,id=1的全部记录以后才气删除蔬菜。
- 当模子字段的on_delete=SET_NULL,删除蔬菜以后,对应商品信息表,cid=1的数据的cid全部被改成cid=null
- 当模子字段的on_delete=SET_DEFAULT,删除蔬菜以后,对应商品信息表,cid=1的数据记录的cid被被设置默认值。
说明:假如要包含%无需转义,直接写即可。例:查询姓名包含'华'的门生。
以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.(3)模糊查询之isnull
模子创建如下:
- 班级模子: 班级名称、导员。
- 课程模子:课程名称、讲师等。
- 门生模子: 门生有姓名,年龄,只有一个班级,所以和班级表是一对多的关系(one-to-many);选修了多个课程,所以和课程表是多对多的关系(many-to-many)
- 门生详情:门生的家庭地址,手机号,邮箱等详细信息,和门生模子应该是一对一的关系(one-to-one)
(1)正向查询按字段6.7.2、基于双下划线查询(join查询)
(2)反向查询按表名小写或者related_name
(1)正向关联按关联字段6.7.3、关联分组查询
(2)反向按表名小写或related_name
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |