Flask:API的一种简易实现方式——MethodView

来源:互联网 发布:阿苏拉捏脸数据 编辑:程序博客网 时间:2024/05/28 19:23

FlaskRESTful APIs 提供了一种简易的实现方式,可以针对不同的HTTP方法提供不同的函数。使用也很简单,只需要继承 flask.views.MethodView 然后重写需要的方法:GET POST PUT 等。

下面是官方给的程序示例:

from flask.views import MethodViewclass UserAPI(MethodView):    def get(self):        users = User.query.all()        ...    def post(self):        user = User.from_form_data(request.form)        ...app.add_url_rule('/users/', view_func=UserAPI.as_view('users'))

最下面的 add_url_rule 是添加路由,和用装饰器的效果一样:

@app.route('/users/')def users(page):    users = User.query.all()    return render_template('users.html', users=users)

因为现在是视图类而不是视图函数,对类进行装饰器操作没有意义,如果想对视图函数添加装饰器,比如用户登陆检测,可以对 .as_view() 返回的函数进行装饰:

def user_required(f):    """Checks whether user is logged in or raises error 401."""    def decorator(*args, **kwargs):        if not g.user:            abort(401)        return f(*args, **kwargs)    return decoratorview = user_required(UserAPI.as_view('users'))app.add_url_rule('/users/', view_func=view)

如何应对多种请求方法,比如用户信息管理:

URL Method Description /users/ GET Gives a list of all users /users/ POST Creates a new user /users/id GET Shows a single user /users/id PUT Updates a single user /users/id DELETE Deletes a single user

官方给的实用小例子:

class UserAPI(MethodView):    def get(self, user_id):        if user_id is None:            # return a list of users            pass        else:            # expose a single user            pass    def post(self):        # create a new user        pass    def delete(self, user_id):        # delete a single user        pass    def put(self, user_id):        # update a single user        passuser_view = UserAPI.as_view('user_api')app.add_url_rule('/users/', defaults={'user_id': None},                 view_func=user_view, methods=['GET',])app.add_url_rule('/users/', view_func=user_view, methods=['POST',])app.add_url_rule('/users/<int:user_id>', view_func=user_view,                 methods=['GET', 'PUT', 'DELETE'])
原创粉丝点击