flask-类视图
标准类视图
from flask import Flask, render_template, views, jsonify
app = Flask(__name__)
class JsonView(views.View):
def get_response(self):
raise NotImplementedError()
def dispatch\_request(self):
response = self.get\_response()
return jsonify(response)
class IndexView(JsonView):
def get_response(self):
context = {
'username': 'ivy'
}
return context
app.add_url_rule('/', view_func=IndexView.as_view('index'))
class FakeView(object):
def __init__(self):
super().__init__()
self.context = {
'username': 'ivy',
}
class TestView(JsonView, FakeView):
def get_response(self):
self.context.update({'age': 23})
return self.context
app.add_url_rule('/test', view_func=TestView.as_view('test'))
if __name__ == '__main__':
app.run()
标准类视图必须继承自flask的view.View且自定义实现dispatch_request方法,最后在app中使用add_url_rule实现路由,第一个参数是该视图对应的路由,view_func制定该路由对应的视图,类视图采用类视图的as_view方法作为视图函数对应。
利用类视图可以实现抽象视图,让子类视图自定义实现返回规则,对于一些共同的属性可以采用多继承的方式获取。
基于调度的类视图
from flask import Flask, render_template, views, jsonify
app = Flask(__name__)
class LoginView(views.MethodView):
def get(self):
return 'get'
def post(self):
return 'post'
app.add_url_rule('/login', view_func=LoginView.as_view('login'))
if __name__ == '__main__':
app.run()
MethodView可以根据请求方法自己调用自定义类视图的方法函数,跟django的View类一样
类视图使用装饰器
from flask import Flask, views, request
from functools import wraps
app = Flask(__name__)
def login_required(func):
@wraps(func)
def wrapper(*args, **kwargs):
# 模拟登陆验证
name = request.args.get('name')
if name:
return func(*args, **kwargs)
return '未登录'
return wrapper
@app.route('/')
@login_required
def index():
return 'index page'
class IndexView(views.View):
decorators = [login_required]
def dispatch\_request(self):
return 'index page view'
app.add_url_rule('/index', view_func=IndexView.as_view('index_view'))
if __name__ == '__main__':
app.run()
类视图想和函数视图使用一样的装饰器,直接使用类属性decorators, decorators是一个列表,里面接受装饰器的函数体
手机扫一扫
移动阅读更方便
你可能感兴趣的文章