如何在python中处理非预期的请求方法?

时间:2015-11-24 16:25:38

标签: django

假设我有一个只应响应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?

3 个答案:

答案 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。其他基于类的基于视图的视图(例如TemplateViewListViewDetailView通常更为可取。

答案 2 :(得分:1)

您可以尝试使用HttpResponseNotAllowed

def my_view(request, topic_id):
    if request.method == 'GET':
        # do domething
        pass
    else:
        return HttpResponseNotAllowed(['GET'])