模板引擎:
基本实用{{k1}} if for
模板中自定义函数:操作步骤
1在已经注册的App中创建一个名字叫templates文件夹
2任意创建一个py文件,
3创建名字叫register 的Library类的对象
4定义函数
from django.template import Library
register=Library()
在我们的模板里面填充数据,使用固定语法{{‘字符串函数的第一个参数‘|函数名:‘函数的第二个参数‘}}
参数最多是2个
支持使用if做判断
@register.filter
def meikai(a1,a2): # 这里的a2可以是一个字符串里面有特殊符号连接,我们使用字符串里面的语法进行分割就得到了多个出来例如 {{‘alex‘|func‘lily;jack‘}}
def func(a1,a2):
n1,n2=a2.split(‘;‘) # 可以是任意符号去连接那么就使用该符号去分割
使用:
{% load xl %} # 在我们的模板也就是html文件里面引入我们自定义的那个函数所在的文件名,我们引入之后通过模板语言就可以使用这个函数传参然后拿到返回值把返回值渲染给页面提交浏览器
我们的xl文件这样写:
from django.template import Library
register=Library()
@register.filter
def func(*args,**kwargs):
print(args,kwargs)
data=‘my name is %s‘ % (args) # 这里写成了动态的为了下面得到动态的返回值
return data # 这里的返回值就是动态的
在浏览器页面我们这样写:
<h2>{{‘peter‘|func‘fred‘}}<h2> #其他的是正常的HTML页面的标配,就是我们的body里面写一行这样的代码,可以用其他的标签包起来,这个看现实效果即可
中间件的内容是重点中的重点,必会
中间件就是一个类,
这个类需要继承MiddlewareMixin
类里面有两个方法,process_request(self,request) [可以没有返回值] process_response(self,request,response) ---[必须设置返回值]
我们需要对所有的请求做同一操作时,就使用中间件.
如果对少量的视图函数做操作就使用装饰器,
我们的django项目里面的setting里面有一个配置项
MIDDLEWARE就是中间件的意思,
MIDDLEWARE=[
‘xxx.md.M1‘ # xxx是我们自定义的一个文件夹,md是我们在文件夹里面新建的一个py文件,M1是我们的py文件里面的定义的类名,这里是把我们的中间件的路径保存到我们的setting配置项里面了
]
这里就需要牵扯到我们的django请求生命周期了,这是核心的重点
我们的请求过来了,先是到达wsgi,然后到达中间件(可以有多个如果有多个的话,我们就按照程序从上到下加载的顺序一一去执行, 在返回的时候再从下到上一一按照顺序去执行,),再接着到路由系统,紧接着是到视图函数,再是到orm操作数据库,然后把数据取出来通过我们的模板进行渲染,(渲染后我们的结果就可以在前端页面显示出来了),我们需要把渲染后的数据结果拿到{process_request},然后原路返回,穿过orm,视图函数,路由系统,穿过中间件,以及wsgi,最后返回给用户{process_response 必须要有返回值,不可以为None,},这一套流程就是我们的django请求生命周期,
由上不难看出我们的所有请求都需要经过我们的中间件,所以我们对所有的请求做同一个操作的时候,只需要写好一个中间件即可,所有的请求都会经过它,这样效率是最高的.[如果我们写装饰器的话我们需要在使用到装饰器的函数上面一一加上我们的装饰器,如果函数有100个的话我们需要手写100个,单一重复的操作太多了,这里有可优化的空间,这个时候我们的中间件就刚好解决了这个问题,只要我们在setting里把我们的中间件配置好,我们的所有的函数都会走我们的中间件,那么我们只需要改动我们的中间件即可满足要求]所以我们需要理解这个原理,也就是我们的django请求生命周期,然后我们才明白每一步是干什么的,理解了原理之后我们可以随意改动每一步,以满足我们的需求.
总结,中间件的流程图,中间件类里面的方法,以及方法里面的参数,都是需要背下来的