在重定向之前添加请求标头

时间:2015-08-03 10:31:06

标签: django url redirect

我正在为新客户端改造Django网络应用程序。为此,我添加了一个url模式,将新客户端的请求重定向到旧的url模式。

自: -

(('api/(?P<phone>\w+)/MessageA', handle_a_message),
 ('api/(?P<phone>\w+)/MessageB', handle_b_message),
  ...)

于: -

(('api/(?P<phone>\w+)/MessageA', handle_a_message),
 ('api/(?P<phone>\w+)/MessageB', handle_b_message),
 ('api/newclient', handle_newclient)
  ...)

views.handle_newclient

def handle_newclient(request):
    return redirect('/api/%(phone)s/%(msg)s' % request.GET)

这有点奏效。但是,新客户端不会执行这些URL所需的基本身份验证。此外,默认输出是json,其中新客户端需要纯文本。有没有办法在重定向到现有网址之前调整标题?

1 个答案:

答案 0 :(得分:3)

Django FBV应该返回一个HTTPResponse对象(或其子类)。 Django shorcut redirect返回HttpResponseRedirect,它是HTTPResponse的子类。这意味着我们可以为redirect()设置标头,以便为典型的HTTPResponse对象设置标头。我们可以这样做:

def my_view(request):
    response = redirect('http://www.gamefaqs.com')
    # Set 'Test' header and then delete
    response['Test'] = 'Test'
    del response['Test']
    # Set 'Test Header' header
    response['Test Header'] = 'Test Header'
    return response

相关文档herehere