是否可以通过自定义HTTP标头获取引用URL?

问题描述 投票:6回答:3

我当前正在使用以下功能来获取引用视图:

def get_referer_view(request, default=None):   
    referer = request.META.get('HTTP_REFERER')
    if not referer:
        return default

    # remove the protocol and split the url at the slashes
    referer = re.sub('^https?:\/\/', '', referer).split('/')
    if referer[0] != request.META.get('SERVER_NAME'):
        return default

    # add the slash at the relative path's view and finished
    referer = u'/' + u'/'.join(referer[1:])
    return referer

[如果由于编程逻辑,例如,我将view重定向了...

return HttpResponseRedirect('dashboard')

...是否有一种无需使用HTTP_REFERER即可获取引用视图的方法,以便可以在重定向的view中使用该变量?并非总是在浏览器的标题中设置。

注意,因为视图是按语法重定向的,所以我不能使用POST来收集数据。

也许可以通过某种方式设置和检索自定义标头?

django django-views django-urls
3个回答
1
投票
使用Django的中间件组件。

https://docs.djangoproject.com/en/3.0/topics/http/middleware/

类似这样的方法应该起作用:

class HTTPReferer: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): referer = request.META.get('HTTP_REFERER', None) request.referer = referer # other business logic as you like it response = self.get_response(request) return response

因此,您可以将所需的任何信息绑定到Django中的每个请求/响应周期(您还可以设置自定义标头,等等。)

在以上示例中,HTTP_REFERER将在请求对象中以referer的形式提供。


0
投票
确定,因为您控制着发出请求的页面。将当前URL添加到某些标头中,然后将其提取到函数中,类似于:Add request header before redirection

所以代替这个:

def current_view(): ... return HttpResponseRedirect('dashboard')

做这样的事情:

def current_view(): ... response = redirect('/dashboard') response['source-view'] = request.resolver_match.view_name return response

这将产生带有自定义标头source-view的302,您可以在接收视图中提取它

0
投票
这是我们如何将变量设置为标头:

from django.http import HttpResponse def index(request): response = HttpResponse("Hello world!") response["My-Header"] = "header value" return response

您将获得:

200 OK Content-Type: text/html; charset=utf-8 Date: Mon, 22 Aug 2016 10:56:34 GMT Server: WSGIServer/0.1 Python/2.7.10 My-Header: header value X-Frame-Options: SAMEORIGIN Hello world!

© www.soinside.com 2019 - 2024. All rights reserved.