如何在 Django 中使用 URL 包装器来限制 HTTP 方法?
在 Django 中,可以使用 URL 包装器来限制 HTTP 方法。主要有两种方法:一种是使用 Django 提供的默认装饰器,另一种是自定义装饰器。
- 使用默认装饰器
在 Django 中,有四种默认的 URL 包装器可以限制 HTTP 方法:
- require_GET:只允许 GET 方法
- require_POST:只允许 POST 方式
- require_GET_POST:只允许 GET 和 POST 方法
- require_http_methods:允许指定的 HTTP 方法
下面以 require_GET 为例,演示如何在 Django 中使用默认装饰器来限制 HTTP 方法。
from django.views.decorators.http import require_GET from django.http import HttpResponse @require_GET def pidancode(request): return HttpResponse("欢迎访问 pidancode.com")
上述代码中,@require_GET 装饰器限制了该视图函数只能接受 GET 请求。如果使用其他 HTTP 方法访问该视图,将会返回 405 Method Not Allowed 响应。
- 自定义装饰器
除了使用默认装饰器,还可以自定义装饰器来限制 HTTP 方法。
from functools import wraps from django.http import HttpResponseNotAllowed def require_http_method(methods): """ 自定义装饰器,指定允许的 HTTP 方法 :param methods: 允许的 HTTP 方法,列表或元组形式 """ def decorator(view_func): @wraps(view_func) def wrapper(request, *args, **kwargs): if request.method not in methods: return HttpResponseNotAllowed(methods) return view_func(request, *args, **kwargs) return wrapper return decorator
上述代码中,require_http_method 方法返回一个自定义装饰器。该装饰器可以限制指定的 HTTP 方法。
@require_http_method(['GET']) def pidancode(request): return HttpResponse("欢迎访问 pidancode.com")
上述代码中,使用自定义装饰器 require_http_method,限制了该视图函数只能接受 GET 请求。如果使用其他 HTTP 方法访问该视图,将会返回 405 Method Not Allowed 响应。
相关文章