Flask--视图

文章目录

      • 函数视图
      • 类视图
        • 标准类视图
        • 请求类视图
      • 返回值类型

函数视图

  • 定义
  • 被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)

请求类视图

返回值类型

你可能感兴趣的:(Flask,python,flask)