Django Test Client client.post()发送GET请求?

yhf*_*377 3 django http

我是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)
Run Code Online (Sandbox Code Playgroud)

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'),
]
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

但测试总是返回状态500.

我在这里看到这可能与follow=Trueclient.post()通话中使用有关.但是,如果我使用,follow=False我将获得状态301.

有任何想法吗?谢谢!

Mat*_*nen 5

它可能重定向/mytest/mytest/文档建议默认情况下,如果没有带有斜杠的URL模式匹配,则通过执行重定向添加尾部斜杠,并引用:

请注意,重定向可能导致POST请求中提交的任何数据丢失.

由常用重定向状态代码引起的请求始终是GET请求.您可以向/mytest/URL模式发出请求或删除尾部斜杠.