Python学习笔记(九)--Django框架2
22.Django模板介绍
作为Web框架,Django需要一种很便利的方法来动态地生成HTML。常见做法是使用模板。模板包含所需HTML输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。模板任务就是输出数据,数据方式:直接输出,过滤输出,判断输出,循环输出。
23.Django框架中如何使用模板
(1)在项目的settings.py配置文件中配置模板的目录
‘DIRS’:[os.path.join(BASE_DIR,'templates')]
(2) 在应用的视图文件加载模板,并放置要输出的数据
return render(request, "目录/模板文件.html",{放置字典数据})
(3)在模板文件中使用变量、标签和过滤器等输出信息
{{变量}} {%标签%} {{变量|过滤器}}
24.模板中变量
* 变量输出语法:{{ var }} --注意两个花括号间不要有空格
* 当模板引擎遇到一个变量,将计算这个变量,然后将结果输出;
* 变量名必须由字母、数字、下划线(不能以下划线开头)和点组成;
* 当模板引擎遇到点(“.”),会按照下列顺序查询:
。字典查询,例如:foo["bar"]
。属性或方法查询,例如:foo.bar
。数字索引查询,例如:foo[bar]
* 如果变量不存在,模板系统将插入''(空字符串);
* 在模板中调用方法时不能传递参数。
25.模板中的标签
语法:{% tag %}
作用:(1)在输出中创建文本;(2)控制循环或逻辑;(3)加载外部信息到模板中。
常用标签有:for 标签(可用于表格数据渲染)、if 标签、comment (多行注释)标签、include (加载模板并以标签内的参数渲染)、url (反向解析)、csrf_token(这个标签用于跨站请求伪造保护)。
26.模板的过滤器
* 语法
{{ 变量|过滤器}},例如 {{ name|lower}},表示将变量name的值变为小写输出
* 使用管道符号(|)来应用过滤器;
* 通过使用过滤器来改变变量的计算结果;
* 关闭HTML自动转移 {{ data|safe}}
* 可以在if标签中使用过滤器结合运算符;例如:if list1|length > 1 ;
* 过滤器能够被“串联”,构成过滤器链;例如:name|lower|upper
* 过滤器可以传递参数,参数使用引号包起来;例如 list|join:"," ----表示以“,”为分割符拼装在一起;
* default:如果一个变量没有被提供,或者值为false 或者空,则使用默认值,否则使用变量的值;value|default:"什么也没有";
* date: 根据给定格式对一个date变量格式化;例如:value|data:'Y-m-d' 。
27.模板中注释
* 单行注释 {# 注释 #}
* 多行注释
{% comment %}
多行注释
{% endcomment %}
28.模板中运算
* 加,例如+10操作
{{ value|add:10 }} ---注释:例如value=5,则结果返回15;
* 减,例如-10操作
{{ value|add:-10 }} ---注释:例如value=5,则结果返回-5,加一个负数就是减法了;
* 乘,例如
{% widthratio 5 1 100 %} ---注释:等同于(5/1)* 100 ,结果返回500。widthratio 需要三个参数,它会使用参数1/参数2 *参数3的方式进行运算,进行乘法运算时,使参数2=1.
* 除,例如
{% widthratio 5 100 1 %} ---注释:等同于(5/100)* 1 ,结果返回0.05。和乘法一样,使参数3=1就是除法了.
29.模板继承
模板继承可以减少页面内容的重复定义,实现页面内容的重用。
典型应用:网站的头部、尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义。
block标签:在父模板中预留区域,在子模板中填充;extends继承:继承,写在模板文件中的第一行。
30.Ajax
Ajax,Asynchronous JavaScript And XML(异步的JavaScript 和 XML).
Ajax不是新的编程语言,而是一种使用现有标准的新方法。
Ajax最大的优点是在不重写加载整个页面的情况下,可以与服务器交互数据并更新部分网页内容。
step 1 网页中发生一个事件(页面加载、按钮点击);
step 2 由 JavaScript 创建 XMLHttpRequest 对象;
step 3 XMLHttpRequest 对象向 web 服务器发送请求;
step 4 服务器处理该请求;
step 5 服务器将响应发送回网页;
step 6 由 JavaScript 读取响应;
step 7 由 JavaScript 执行正确的动作(比如更新页面)。
31.分页操作
Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中。
Paginator 对象,Paginator(列表,int):返回分页对象,参数为列表数据,每页数据的条数。
Paginator 属性:count---对象总数;num_pages---页面总数;page_range---页码列表,从1开始,例如【1,2,3,4】.
Paginator 方法:page(num):下标以1 开始,如果提供的页码不存在,抛出InvalidPage异常。
32.富文本编辑器--UEditor
UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。
具体介绍可参考网址---http://fex.baidu.com/ueditor/
33.状态保持
HTTP协议是无状态的:每次请求都是一次新的请求,不会记得之前的通信状态。客户端与服务器端的一次通信,就是一次会话。
实现状态保持的方式:在客户端或者服务器端存储与会话有关的数据,存储的方式包括cookie、session,会话一般指session对象。
使用cookie,所有数据存储在客户端,注意不要存储敏感信息;推荐使用session方式,所有数据存储在服务器端,在客户端cookie中存储session_id。
状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据。
注意:不同的请求者之间不会共享这个数据,与请求者一一对应。
34.使用session
启用会话后,每个HttpRequest对象将具有一个session属性,它时一个类字典对象。
* get(key,default=None):根据键获取会话的值;
* clear():清除所有会话;
* flush(): 删除当前的会话数据并清除会话的Cookie
* del request.session['key']:删除会话。
35.中间件
中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。
激活:添加到Django配置文件中的MIDDLWARE_CLASSES元组中。
使用中间件,可以干扰整个处理过程,每次请求中都会执行这个中间件的这个方法。
36.WebApp模板--AdminLTE
AdminLTE 是受欢迎的开源的管理仪表盘和控制面板的WebApp模板。它是基于Bootstrap 3的CSS框架,反应灵敏的HTML模板。利用所有Bootstrap的组件对大部分使用插件进行设计和调整风格,创建出可以用作后端应用程序的用户界面一致性设计。AdminLTE是基于模块化设计,很容易在其之上定制和重制。内置了多个页面,包括仪表盘、邮箱、日历、锁屏、登录及注册、404错误、500错误等页面。
37.django.db.models.Q ---对对象的复杂查询
Q对象是Django对model查询中所使用的关键字参数进行封装后的一个对象。
Q对象(django.db.models.Q)是Django对model查询中所使用的关键字参数进行封装后的一个对象,从而更好地应用多个查询。可以组合使用 &(and),|(or),~(not)操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象。
例如1
from django.db.models import Q # 并且条件:与条件查询 models.User.objects.filter(条件1,条件2,条件n..) models.User.objects.filter(Q(username='老王') & Q(userpass='admin')) # 或者条件:或条件 models.User.objects.fliter(Q(username='老王') | Q(username='老李')) # 取反条件 models.User.objects.filter(~Q(username='老王')) models.User.objects.exclude(username='老王')
例如2
下面的Q 对象封装一个LIKE 查询:
from django.db.models import Q Q(question__startswith='What')
下面的语句产生一个Q 对象,表示两个"question__startswith" 查询的“OR” :
Q(question__startswith='Who') | Q(question__startswith='What')
参考网址
1.好评如潮Python Django全套教程
https://www.bilibili.com/video/BV1pq4y1W7a1
2.AJAX 简介
https://www.w3school.com.cn/js/js_ajax_intro.asp
3.https://www.cnblogs.com/liuq/p/5946803.html
4. https://www.cnblogs.com/huchong/p/8027962.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库