Python学习(三十七)—— 模板语言之自定义filter和中间件

Posted 生命练习生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习(三十七)—— 模板语言之自定义filter和中间件相关的知识,希望对你有一定的参考价值。

一、模板语言之自定义filter

自定义filter文件存放位置

模板中自定义函数
    - 在已注册的app中创建一个名字叫 templatetags 文件夹
    - 任意创建一个py文件
    - 创建名字交 register 的Library类的对象
    - 定义函数
    from django.template import Library
    register = Library()
                
    # 调用示例:{{ "a1"|meikai:"n1,n2"}}
    # 参数最多2
    # 可以做if的条件
    @register.filter
    def meikai(a1,a2):
        n1,n2 = a2.split(\',\')
        data = "我的名字叫:%s,我喜欢%s和%s" %(a1,n1,n2)
        return data
                
    # 调用示例:{% wangyan 1 2 3 4 %}
    # 参数无限制
    # 无法做if条件
    @register.simple_tag
    def wangyan(a1,a2,a3,a4):
        result = a1+a2+a3+a4
        return result        

注意事项

py文件必须写上:
from django.template import Library
register = Library()

自定义函数的两种方式:
@register.filter
缺点:最多只能传两个参数,在模板使用方法{{ 参数1|函数名:参数2 }}
优点:可以在if判断中使用

@register.simple_tag
优点:可以传递多个参数,在模板使用方法{% 函数名 参数1 参数2 参数3 ... %}

在模板中想要使用自定义函数,必须先导入py文件,在模板的开头加上一句:
{% load py文件名(不用.py后缀) %}

 代码示例:

from django.template import Library

register = Library()


@register.filter
def t1(arg):
    return arg.upper()


@register.simple_tag
def melody(n1, n2, n3):
    str = "I\'am {},I like {},my dream is to be a {}".format(n1, n2, n3)
    return str

 

二、中间件

概念:
    中间件是一个类
    
定义:
    以后想要对所有的请求做统一操作时,用中间件。(几个例外)
    只是对少量的视图函数做操作时,用装饰器。
        
任务:
    1. 对用户请求记录日志
    2. 用户登录验证(只有login)
        
        
梳理:
    1. 类
    - 继承MiddlewareMixin
    - 两个方法
        process_request
        process_response,必须设置返回值
    2. 应用中间件
            
    MIDDLEWARE = [
        ...
        \'xxxx.md.M1\',
                ]
                        
3. 示例:
    1. 对用户请求记录日志
    2. 用户登录验证 (只有login)
    3. 权限验证
        
    PS: 图+方法+参数         

 Django的生命周期

浏览器发送请求,经过wsgi,对请求数据进行解析,并封装成request,
然后经过中间件,执行中间件的process_request方法:

    1.如果没有返回值或者返回值为None,则到路由系统,然后到视图系统,执行视图函数,通过ORM调用数据库,通过template调用模板语言,并把response返回
    
    2.如果有返回值,则不经过路由系统和视图系统,直接执行中间件的process_response方法,然后经过wsgi进行数据封装,最后返回给浏览器进行渲染

 自定义中间件—登陆验证

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse,redirect

class AuthMiddleware(MiddlewareMixin):
    def process_request(self,request):
        # 如果么有返回值;返回None,表示可以继续往下执行
        # 如果有返回值,执行自己的response以及以上的response。

        if request.path_info == \'/login/\':
            return None

        user_info = request.session.get(\'user_info\')
        if not user_info:
            # return HttpResponse(\'请登录\')
            return redirect(\'/login/\')


    def process_response(self,request,response):
        return response

 

以上是关于Python学习(三十七)—— 模板语言之自定义filter和中间件的主要内容,如果未能解决你的问题,请参考以下文章

Python - Django - 模板语言之自定义过滤器

2018.11.09python学习第三十七天

Zabbix学习笔记(三十七)

java核心学习(三十七) 类加载器

[Python人工智能] 三十七.Keras构建无监督学习Autoencoder模型及MNIST聚类可视化详解

深度学习核心技术精讲100篇(三十七)-利用Contrastive Learning对抗数据噪声:对比学习在微博场景的实践