再次理解 Flask 中视图函数的用法
再次理解 Flask 中视图函数的用法
使用类描述视图
在 Flask 应用中,通常是用函数来描述视图的,但是如果多个函数都用到某些通用功能则用类实现视图就非常方便。
多个视图函数都要渲染模板
from flask.views import View
class GenericView(View): # 定义视图类,减少重复
def __init__(self, template):
self.template = template
super(GenericView, self).__init__()
# 作用和普通视图函数相同
def dispatch_request(self):
page = 1
posts = Post.query.order_by(
Post.publish_time.desc()
).paginate(page, 10)
recent, top_tags = sidebar_data()
return render_template(
self.template,
posts=posts,
recent=recent,
top_tags=top_tags
)
app.add_url_rule(
# 第一个参数是 url
'/test',
view_func=GenericView.as_view(
'test', # 指定 endpoint
template='home.html'
)
)
app.add_url_rule(
# 第一个参数是 url
'/test2',
view_func=GenericView.as_view(
'test', # 指定 endpoint
template='index.html'
)
)
如果要使用多种 HTTP 方法,则定义类属性 methods
class GenericView(View): # 定义视图类,减少重复
methods = ['GET', 'POST'] # 定义为类属性
def __init__(self, template):
...
# 作用和普通视图函数相同
def dispatch_request(self):
if request.method == 'GET':
...
elif request.method == 'POST':
...
使用方法视图
方法视图允许把每种 HTTP 请求的处理函数写成一个同名的类方法
from flask.views import MethodView
class UserView(MethodView):
def get(self):
...
def post(self):
...
def put(self):
...
app.add_url_rule('/user', view_func=UserView.as_view('user'))