- 被url装饰的==>后面处理逻辑的方法就是视图函数
- 同一函数处理单数和复数
- 同一函数处理GET/POST等多种方式请求
- 根据使用习惯,可以一个视图处理1个或多个逻辑
# 使用127.0.0.1:5000/ware访问全部项目信息
# 使用127.0.0.1:5000/ware?id=2获取单个项目信息
# 使用post 方法创建
@app.route('/ware', methods=['GET', 'POST'])
def ware():
id = request.args.get('id')
if request.method == 'GET': # get方法
if id is None:
return 'all ware info' # 复数,全部信息
return f'ware info: {id}' # 单数, 单个信息
elif request.method == 'POST': # post方法
if id is None:
return 'Ceate a ware'
类可继承
代码复用
可以定义多个函数
- 类需要继承自Flask.views.View
- 需要重写dispatch_request方法,否则报错NotImplementedError
- as_view()意思是将类转成视图函数用,接收一个name参数,定义视图函数名,或者说定义端点名(端点默认取视图函数名)
- 只能用add_url_rule注册路由
- methods: 定义支持的请求方法
- dispatch_request: 请求分发
- decorators: 装饰器
from flask import Flask, url_for, redirect, request
from flask.views import View
app = Flask(__name__)
class Ware(View):
# methods = ['GET', 'POST']
def dispatch_request(self):
return '{}'.format(request.method)
# Map([ ware>
app.add_url_rule('/', view_func=Ware.as_view('ware'), methods=['POST'])
if __name__ == '__main__':
app.run(debug=True)
class Ware(View):
methods = ['GET', 'POST']
def get(self):
return 'get'
def post(self):
return 'post'
def dispatch_request(self):
dispatch_pattern = {
'get': self.get, 'post': self.post}
method = request.method.lower()
return dispatch_pattern.get(method)()
app.add_url_rule('/', view_func=Ware.as_view('ware'))
def decorater(func):
pass
class Ware(View):
pass
# 显示装饰
func = Ware.as_view('ware')
decorater(func)
app.add_url_rule('/', view_func=func)