from django.views.generic import View
from django.http import HttpResponse
class home(View):
def post(self,request):
return HttpResponse('Class based view')
当我尝试定义上述方法时,它说不允许使用方法(GET):/
有人可以在这个问题上帮助我吗?
答案 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)
将def post
更改为def get
,请参阅Django文档https://docs.djangoproject.com/en/2.1/topics/class-based-views/#supporting-other-http-methods
答案 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 或类似的,你就不会。