不允许的方法(GET):/ in django

时间:2018-11-16 06:11:04

标签: python django

from django.views.generic import View
from django.http import HttpResponse

class home(View):
  def post(self,request):
    return HttpResponse('Class based view')

当我尝试定义上述方法时,它说不允许使用方法(GET):/

有人可以在这个问题上帮助我吗?

5 个答案:

答案 0 :(得分:2)

在您的代码中,您定义了post方法,但是没有定义任何get方法来处理GET请求。您可以放一个这样的修复程序,例如:

class home(View):
    def get(self, request):
       return HttpResponse('Class based view')

    def post(self,request):
      return HttpResponse('Class based view')

在此处检查基于类的视图的用法:https://docs.djangoproject.com/en/2.1/topics/class-based-views/intro/#using-class-based-views

答案 1 :(得分:1)

我在您的代码中找不到任何“获取”方法。您只定义了发布方法!。

在您的View中,您可以定义get方法或使用post方法调用URL。

答案 2 :(得分:0)

答案 3 :(得分:0)

根据View的调度方法,您可以在这里找到:- https://ccbv.co.uk/projects/Django/2.0/django.views.generic.base/View/

def dispatch(self, request, *args, **kwargs):
    # Try to dispatch to the right method; if a method doesn't exist,
    # defer to the error handler. Also defer to the error handler if the
    # request method isn't on the approved list.
    if request.method.lower() in self.http_method_names:
        handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
    else:
        handler = self.http_method_not_allowed
    return handler(request, *args, **kwargs)

如果您未在View中定义get方法,则dispatch将调用self.http_method_not_allowed

def http_method_not_allowed(self, request, *args, **kwargs):
    logger.warning(
        'Method Not Allowed (%s): %s', request.method, request.path,
        extra={'status_code': 405, 'request': request}
    )
    return HttpResponseNotAllowed(self._allowed_methods())

在这里

if request.method.lower() in self.http_method_names:
    handler = getattr(self, request.method.lower(), self.http_method_not_allowed)

在这段代码中,if条件将通过,但是当它尝试对自身执行getattr时,request.method.lower()具有get作为值,因此getattr将不会找到get方法,因为我们尚未定义它,所以getattr将返回http_method_not_allowed

答案 4 :(得分:0)

由于您使用的是基于类的视图,但没有指定特定的基于类的视图模板,因此您需要同时声明 post 和 get。

但是如果你使用说 TemplateView 或类似的,你就不会。