• 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
  • 相关阅读:
    PHP服务器端API原理及示例讲解(接口开发)
    Nginx的启动、停止与重启
    还是,Stairway To Haven
    NetBeans 时事通讯(刊号 # 42 Jan 20, 2009)
    Eve Backstory
    将默认的Netbeans中文版设置为英文界面/如何将Netbeans 6.5设置为英文界面
    Eve Backstory
    将默认的Netbeans中文版设置为英文界面/如何将Netbeans 6.5设置为英文界面
    领域驱动设计和开发实战
    领域驱动设计和开发实战
  • 原文地址:https://www.cnblogs.com/Coufusion/p/8379358.html
Copyright © 2020-2023  润新知