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 方法的装饰器。 这些方法通常被认为是安全的。