首页 > 其他 > 详细

FLask之视图

时间:2019-11-26 20:07:44      阅读:66      评论:0      收藏:0      [点我收藏+]

视图

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)

FLask之视图

原文:https://www.cnblogs.com/zhufanyu/p/11937995.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!