重定向前添加请求头

Him*_*shu 6 django url redirect

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

从:-

(('api/(?P<phone>\w+)/MessageA', handle_a_message),
 ('api/(?P<phone>\w+)/MessageB', handle_b_message),
  ...)
Run Code Online (Sandbox Code Playgroud)

到:-

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

views.handle_newclient

def handle_newclient(request):
    return redirect('/api/%(phone)s/%(msg)s' % request.GET)
Run Code Online (Sandbox Code Playgroud)

这有点管用。然而,新客户端没有做那些 url 需要的基本身份验证。此外,默认输出是 json,其中新客户端需要纯文本。有没有办法在重定向到现有 url 之前调整标题?

Wan*_*der 6

Django FBV 应该返回一个 HTTPResponse 对象(或其子类)。Django 快捷重定向返回 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
Run Code Online (Sandbox Code Playgroud)

相关文档在这里这里