我是Python和Django的新手。我做了一个关于执行请求方法的实验(例如,对于某些网址,您只能使用GET)。这是我的代码。
tests.py
from django.test import TestCase, Client
client = Client()
class MyTests(TestCase):
def test_request_method:
""" Sending wrong request methods should result in 405 error """
self.assertEqual(client.post('/mytest', follow = True).status_code, 405)
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name = 'index'),
url(r'^mytest/', views.mytest, name = 'mytest'),
]
views.py
from django.http import HttpResponse
def mytest(request):
if request.method == 'GET':
return HttpResponse("Not implemented", status = 500)
else:
return HttpResponse("Only GET method allowed", status = 405)
但测试总是返回状态500。
我看到here这可能与在follow=True
电话中使用client.post()
有关。但是,如果我使用follow=False
,我将获得状态301。
有什么想法吗?谢谢!
答案 0 :(得分:5)
是否可能将/mytest
重定向到/mytest/
? The documentation建议默认情况下,如果没有带斜杠的URL模式匹配,则通过重定向添加尾部斜杠,并引用:
请注意,重定向可能会导致POST请求中提交的任何数据丢失。
由常用的重定向状态代码引起的请求始终是GET请求。您可以向/mytest/
发出请求,也可以从网址格式中删除尾随斜杠。