• flask-类视图


    flask-类视图


    • 标准类视图
      •  1 from flask import Flask, render_template, views, jsonify
         2 
         3 app = Flask(__name__)
         4 
         5 
         6 class JsonView(views.View):
         7     def get_response(self):
         8         raise NotImplementedError()
         9 
        10     def dispatch_request(self):
        11         response = self.get_response()
        12         return jsonify(response)
        13 
        14 
        15 class IndexView(JsonView):
        16     def get_response(self):
        17         context = {
        18             'username': 'ivy'
        19         }
        20         return context
        21 
        22 
        23 app.add_url_rule('/', view_func=IndexView.as_view('index'))
        24 
        25 
        26 class FakeView(object):
        27     def __init__(self):
        28         super().__init__()
        29         self.context = {
        30             'username': 'ivy',
        31         }
        32 
        33 
        34 class TestView(JsonView, FakeView):
        35     def get_response(self):
        36         self.context.update({'age': 23})
        37         return self.context
        38 
        39 
        40 app.add_url_rule('/test', view_func=TestView.as_view('test'))
        41 
        42 if __name__ == '__main__':
        43     app.run()

        标准类视图必须继承自flask的view.View且自定义实现dispatch_request方法,最后在app中使用add_url_rule实现路由,第一个参数是该视图对应的路由,view_func制定该路由对应的视图,类视图采用类视图的as_view方法作为视图函数对应。


      • 利用类视图可以实现抽象视图,让子类视图自定义实现返回规则,对于一些共同的属性可以采用多继承的方式获取。
    • 基于调度的类视图
      •  1 from flask import Flask, render_template, views, jsonify
         2 
         3 app = Flask(__name__)
         4 
         5 
         6 class LoginView(views.MethodView):
         7     def get(self):
         8         return 'get'
         9 
        10     def post(self):
        11         return 'post'
        12 
        13 
        14 app.add_url_rule('/login', view_func=LoginView.as_view('login'))
        15 
        16 if __name__ == '__main__':
        17     app.run()
        MethodView可以根据请求方法自己调用自定义类视图的方法函数,跟django的View类一样
    • 类视图使用装饰器
      •  1 from flask import Flask, views, request
         2 from functools import wraps
         3 
         4 app = Flask(__name__)
         5 
         6 
         7 def login_required(func):
         8     @wraps(func)
         9     def wrapper(*args, **kwargs):
        10         # 模拟登陆验证
        11         name = request.args.get('name')
        12         if name:
        13             return func(*args, **kwargs)
        14         return '未登录'
        15 
        16     return wrapper
        17 
        18 
        19 @app.route('/')
        20 @login_required
        21 def index():
        22     return 'index page'
        23 
        24 
        25 class IndexView(views.View):
        26     decorators = [login_required]
        27 
        28     def dispatch_request(self):
        29         return 'index page view'
        30 
        31 
        32 app.add_url_rule('/index', view_func=IndexView.as_view('index_view'))
        33 
        34 if __name__ == '__main__':
        35     app.run()

        类视图想和函数视图使用一样的装饰器,直接使用类属性decorators,  decorators是一个列表,里面接受装饰器的函数体

  • 相关阅读:
    如何在Window上使用Git
    【坑】log4j-over-slf4j.jar AND slf4j-log4j12.jar的冲突问题
    如何查看hadoop与hbase的版本匹配关系
    为什么要用Message Queue
    Storm+kafka的HelloWorld初体验
    KafkaOffsetMonitor使用方法
    Linux虚拟机配置本地yum源
    andorid CmakeLists
    python tkinter Treeview 事件绑定
    python我的tkinter学习,玩玩
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/11537363.html
Copyright © 2020-2023  润新知