• FLask之视图


    视图

    1 FBV

    def index():
        return render_template('index.html')
    app.add_url_rule('/index', 'index', index)
    
    
    # 公司里一般用这种方式
    @app.route('/login')
    def login():
        return render_template('login.html')
    

    2 CBV

    from flask import Flask,render_template,views
    
    app = Flask(__name__,)
    
    # 装饰器1
    def test1(func):
        def inner(*args,**kwargs):
            print('before1')
            result = func(*args,**kwargs)
            print('after1')
            return result
        return inner
    # 装饰器2
    def test2(func):
        def inner(*args,**kwargs):
            print('before2')
            result = func(*args,**kwargs)
            print('after2')
            return result
        return inner
    
    
    class UserView(views.MethodView):
        # 指定访问方法,允许列表中的请求可以执行
        methods = ['GET',"POST"]
    	# 添加装饰器的方法,
        decorators = [test1,test2]
    
        def get(self):
            print('get')
            return 'get'
    
        def post(self):
            print('post')
            return 'post'
    
    app.add_url_rule('/user', view_func=UserView.as_view('user')) # endpoint
    
    if __name__ == '__main__':
        app.run()
        
    

    解析:

    1. 上边cbv中装饰器的执行顺序:
        before2
        before1
        get
        after1
        after2
    # 可以看出这个装饰器的加载顺序是根据你列表中写的顺序执行的;
    
    2. CBV的执行流程梳理:
    	* 首先是执行"as_view('user')"方法,这个方法继承父类"View"中的方法;
        * 然后在这个方法的执行"view"方法,这个方法的返回值是"dispatch_request"方法;
        * 这个方法在父类"MethodView"中执行的;
        * 在这个"dispatch_request"中执行反射方法,通过你的请求方法找对应的函数去执行,
        meth = getattr(self, request.method.lower(), None)
    
  • 相关阅读:
    (十)条件判断
    (九)字符处理命令
    (八)awk命令
    (六)环境变量配置文件
    (七)grep命令行提取符号
    Ⅶ 类模板与STL编程 ②
    Ⅵ 虚函数与多态性
    Ⅴ 运算符重载
    Ⅳ 继承与派生②
    Ⅳ 继承与派生①
  • 原文地址:https://www.cnblogs.com/zhufanyu/p/11937995.html
Copyright © 2020-2023  润新知