403模板显示而不是404

时间:2015-05-01 01:04:01

标签: python django

我希望能够在发生任何其他请求时显示404页面。但是,当我运行服务器并在chrome上使用POSTMAN扩展执行POST请求时,我得到Django的403显示,而不是我创建的模板。

enter image description here

凸出/ urls.py

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'', include("index.urls")),
    url(r'auth/', include("userapp.urls"))
)

索引/ urls.py

 urlpatterns = patterns('',
    url(r'^$', load_index),
    url(r'^admin/', include(admin.site.urls)),

)

索引/ views.py

def load_index(request):
    if request.method == "GET":
        form = RegistrationForm(auto_id=False)
        return render(request, "index/index.html", {"form": form})
    else:
        # output 404 error
        return render(request, "error/404.html", status=404)

1 个答案:

答案 0 :(得分:2)

创建Django Web应用程序时, POST/PUT/DELETE 需要csrf token。这是Django遵循的一种安全策略。

现在,为什么需要这个?因为,按惯例的django Web应用程序是应该运行的应用程序,同时牢记显示和使用的上下文。

您尝试使用的是 POSTMAN 等客户端,主要用于测试REST服务。 (这并不意味着您无法触发托管为Html模板的Web应用程序的请求。)

现在,如果您想从Django Web应用程序中提供 POST 能力API,请考虑@csrf_exempt。为主题提供的最佳名称:csrf-protection-should-be-disabled-for-just-a-few-views

如果您希望自己的应用程序具有RESTFul服务,请确保使用正确的工具,Django Rest Framework。 (注意:如果您要为您的网站提供API,那么使用@csrf_extempt也是一种方式,这会提供一些视图作为POST / PUT的API。