跳至主要內容

视图类装饰器

Mr.Liu小于 1 分钟

视图类装饰器

装饰器

定义装饰器,判断请求头中,是否存在用户名?

  • 存在,认为用户是合法用户,允许通过
  • 不存在,拒绝用户访问
from flask import request


def login_auth(func):
    def wrapper(*args, **kwargs):
        # 1. 获取用户请求头中的 用户名 信息
        username = request.headers.get('USERNAME')
        # 2. 判断用户名
        if username:
            # 2.1 存在,继续执行
            return func(*args, **kwargs)
        else:
            # 2.2 不存在,拒绝访问
            return {
                       'msg': '认证失败'
                   }, 401

    return wrapper

所有方法添加装饰器

from flask_restful import Resource
from utils.auth import login_auth


# 图书的所有操作:增、查 都需要通过装饰器验证权限
class BookResource(Resource):
    method_decorators = [login_auth]

    def get(self):
        return ['图书1', '图书2']

    def post(self):
        return {
                   'name': '图书3'
               }, 201

为单个方法指定装饰器

from flask_restful import Resource
from utils.auth import login_auth


# 此时,只有图书的 添加操作需要 通过装饰器验证权限,而查询操作就不需要验证权限
class BookResource(Resource):
    method_decorators = {
        'post': [login_auth]
    }

    def get(self):
        return ['图书1', '图书2']

    def post(self):
        return {
            'name': '图书3'
        }, 201