限制 HTTP 的请求方法

django.views.decorators.http 里的装饰器可以基于请求的方法来限制对视图的访问。若条件不满足会返回 django.http.HttpResponseNotAllowed

require_http_methods(request_method_list)

例子:

from django.views.decorators.http import require_http_methods

# 限制只能用 get 和 post 方法来访问 my_view 视图
@require_http_methods(["GET", "POST"])
def my_view(request):
    context = {}

    title = request.GET.get('title')
    books = Book.objects.get(title=title)
    
    context['books'] = books
    return render(request, 'my_view.html', context)

我们打开网址:

http://127.0.0.1:8000/my_view/?title=django_book

就能看到标题为 django_book 的书的页面。

如果把装饰器修改为:

@require_http_methods(["POST"])

那么 my_view 视图就只能用 post 方法来访问,再打开上述网址就会返回 django.http.HttpResponseNotAllowed

注意:HTTP 请求的方法名必须大写。

另外还是以下几种限制 HTTP 请求方法的装饰器,用法和上述的一致。

  • require_GET()
    只允许视图接受 GET 方法的装饰器。

  • require_POST()
    只允许视图接受 POST 方法的装饰器。

  • require_safe()
    只允许视图接受 GET 和 HEAD 方法的装饰器。 这些方法通常被认为是安全的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容