2017-03-31 38 views
1

我是django的新手,我想了解课堂观点。class httpresponse results in 405 - django

在urls.py(主)我有:

from django.conf.urls import url, include 
from django.contrib import admin 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^', include('webapp.urls')), 
] 
在web应用文件夹

我有:

urls.py(web应用):

from django.conf.urls import url 
from webapp.views import Firstapp 

urlpatterns = [ 
    url(r'^whatever$', Firstapp.as_view()), 

] 

views.py(web应用):

from django.shortcuts import render 
from django.views import View 
from django.http import HttpResponse 

class Firstapp(View): 

    def something(self): 
     return HttpResponse('Yes it works!') 

正如我所说的,我试图使用我会很感激,如果你能帮助我理解为什么课程返回405错误。谢谢。 CMD返回0个问题。

回答

1

因为您正在继承View并且您定义的唯一方法称为something

View期望您为每个有效的http动词定义一个方法。 (GET,POST,HEAD等)。由于Firstapp没有这种方法,因此View.dispatch将返回http状态405(方法不允许)的响应。

dispatch(request, *args, **kwargs)

视图的视图的一部分 - 它接受一个请求参数加上参数,并且返回一个HTTP响应 方法。

默认实现将检查HTTP方法并尝试委托给匹配HTTP方法的方法;一个GET将被委派给get(),一个POST来post()等等。

默认情况下,HEAD请求将委派给get()。如果您需要以与GET不同的方式处理HEAD请求,则可以覆盖head()方法。有关示例,请参阅支持其他HTTP方法。

为了解决这个问题,改变你的something方法:

def get(self, request): 
    return HttpResponse('Yes it works!') 
+0

你好,是的,它的工作原理。谢谢。 –