假设我有一个只应响应GET请求的视图:
def myview(request, topic_id):
if request.method == "GET":
#do something
#return some url
else:
#What should I do here to have the least performance or security issues?
答案 0 :(得分:5)
您可以使用Django提供的装饰器来限制允许的方法类型:
from django.views.decorators import require_GET
@require_GET
def myview(request, topic_id):
# Guaranteed to be GET only
Django将针对任何其他方法提出405方法不允许。
有关详细信息,请参阅the docs。
答案 1 :(得分:2)
作为Ben推荐的替代方案,您还可以使用基于类的视图,它将为您执行此操作。例如:
from django.views.generic import View
class MyView(View):
def get(self, request, *args, **kwargs):
# Only the GET method will work. Others will return a 405.
虽然应该注意,您通常不会单独使用基础View
。其他基于类的基于视图的视图(例如TemplateView
,ListView
和DetailView
通常更为可取。
答案 2 :(得分:1)
您可以尝试使用HttpResponseNotAllowed:
def my_view(request, topic_id):
if request.method == 'GET':
# do domething
pass
else:
return HttpResponseNotAllowed(['GET'])