一尘不染

Django测试客户端访问URL时获得301重定向

ajax

我正在为Django视图编写单元测试。我观察到我的一个视图返回了重定向代码301,这是不期望的。
这是我前面提到的views.py。

def index(request):
    return render(request, 'index.html',
                  {'form': QueryForm()})

def query(request):
    if request.is_ajax():
        form = QueryForm(request.POST)
        return HttpResponse('valid')

以下是urls.py。

urlpatterns = patterns('',
         url(r'^$', 'core.views.index'),
         url(r'^query/$', 'core.views.query')
         )

而单元测试将失败。

def so_test(self):
    response = self.client.post('/')
    self.assertEquals(response.status_code, 200)

    response = self.client.post('/query', {})
    self.assertEquals(response.status_code, 200)

我的问题是:为什么返回状态301?


阅读 442

收藏
2020-07-26

共1个答案

一尘不染

您已经定义了一个匹配的URL
/query/,但是您正在测试/query。Django正在使用尾部的斜杠重定向到url,因为APPEND_SLASH=True在您的设置中。

您可能希望将测试更改为:

response = self.client.post('/query/', {})
2020-07-26