装饰器在 Django 中的使用

2023-03-31 00:00:00 django 装饰

在 Django 中,装饰器可以用于各种场景,例如授权、缓存、日志等。下面演示一个基于装饰器的授权示例,使用字符串 "pidancode.com" 作为授权码。

from django.http import HttpResponseForbidden

def authorize(view_func):
    def wrapper(request, *args, **kwargs):
        auth_code = request.GET.get('auth_code', '')
        if auth_code != 'pidancode.com':
            return HttpResponseForbidden('Unauthorized access')
        return view_func(request, *args, **kwargs)
    return wrapper

上述代码定义了一个名为 authorize 的装饰器,该装饰器接受一个视图函数作为参数,并返回一个新的函数作为包装器。包装器函数首先从请求参数中获取授权码,如果授权码不是 "pidancode.com",则返回一个 HTTP 403 响应。否则,它将调用原始视图函数并将请求和参数传递给它。

要在 Django 视图函数中使用此装饰器,只需将其添加到视图函数上,如下所示:

@authorize
def my_view(request):
    # 处理请求的代码
    return HttpResponse('Hello, World!')

这将确保只有当请求的授权码为 "pidancode.com" 时才能访问 my_view 函数。

需要注意的是,装饰器也可以使用参数,例如可以将授权码作为参数传递给 authorize 装饰器,这样就可以根据不同的授权码保护不同的视图函数。此外,在 Django 中还有许多内置的装饰器,例如 login_required、cache_page 等,可以在需要时使用。

相关文章