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最大的优点是在不重写加载整个页面的情况下,可以与服务器交互数据并更新部分网页内容。

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

 

posted @   东山絮柳仔  阅读(108)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示