码迷,mamicode.com
首页 > 其他好文 > 详细

flask-类视图

时间:2019-09-17 22:50:50      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:获取   views   自定义类   ret   dex   调度   red   raise   get   

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是一个列表,里面接受装饰器的函数体

flask-类视图

标签:获取   views   自定义类   ret   dex   调度   red   raise   get   

原文地址:https://www.cnblogs.com/ivy-blogs/p/11537363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!