本文首发于公众号:Hunter后端
原文链接:Flask笔记七之基于类的视图
前面我们提供 API
接口,都是通过 @app.route()
或者使用 Blueprint
的 @bp.route()
的方式来定义接口。
现在这里介绍一下使用视图类的方式来提供接口。
视图类的方式和 Django 中的 View 使用的方式类似,接下来我们将之前的 /user/register
接口改写成视图类的方式。
本篇笔记的代码都已经提交到 github 上,可使用下面的操作获取代码:
git clone https://github.com/x1204604036/flask_backend.git
1、url 注册
如果我们之前的接口是用的 @app.route
的方式,那么这里注册的方式就是 app.add_url_rule()
如果是用的 Blueprint
来定义接口的,那么这里注册的方式就是 bp.add_url_rule()
其方式如下:
bp.add_url_rule("/register", view_func=UserRegisterView.as_view("register"))
其中,UserRegisterView 是我们编写的基于类的视图,文件内容如下:
# app/user/bp_user.py
from flask import Blueprint, request, session, jsonify
from werkzeug.security import generate_password_hash, check_password_hash
from app.models.user import User
from .views import UserRegisterView
bp = Blueprint("user", __name__, url_prefix="/user")
bp.add_url_rule("/register", view_func=UserRegisterView.as_view("register"))
接下来我们去创建类视图
2、flask.views.View
类视图处理接口逻辑有两种,一种是 flask.views.View,一种是 flask.views.MethodView,这里先介绍前者。
我们在 app/user/ 文件夹下创建一个 views.py 文件,文件内容如下:
# app/user/views.py
from flask.views import View
class UserRegisterView(View):
methods = ["POST"]
def dispatch_request(self):
# do something
return {"code": 0, "msg": "注册成功"}
对于 View 这个类,其下的 dispatch_request()
函数等同于视图函数,我们只需要把之前使用 @bp.route()
里的函数逻辑拷贝过来即可
我们可以在 dispatch_request()
里根据 request.method
来判断请求方式,然后进行不同的处理,当然,我们这个在前面的 methods 里定义了这个类允许调用的请求方式,所以不用对请求方法进行判断。
3、flask.views.MethodView
前面的类继承的是 View,我们也可以继承 MethodView 来处理请求
使用 MethodView 有个好处就是,我们可以直接在类里根据不同的请求方式来调用不同的函数,比如 GET 请求,就会直接调用下面的 get() 方法,示例如下:
class UserRegisterView(MethodView):
methods = ["GET", "POST"]
def get(self):
return {"msg": "GET method OK "}
def post(self):
result = {"code": 0, "msg": "注册成功"}
return result
至于基于视图函数和视图类的两种方式处理接口选择哪种,就我个人而言,之前使用 Django 的方式可能习惯了,所以看起来 url 和 views 两者分开的逻辑对我来说在逻辑架构上是更清晰的,所以我个人是更倾向于视图类的使用的。
以上就是基于类的视图的介绍。
如果想获取更多后端相关文章,可扫码关注阅读:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。