Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python request.environ[';HTTP#u REFERER';]为无_Python_Flask - Fatal编程技术网

Python request.environ[';HTTP#u REFERER';]为无

Python request.environ[';HTTP#u REFERER';]为无,python,flask,Python,Flask,我想在python框架中获得HTTP\u REFERER。 我的路线是: @app.route('/login') def login(): if authenticateForPanel(): return redirect(url_for("panel")) else: ref = request.environ['HTTP_REFERER'] return render_template('

我想在python框架中获得
HTTP\u REFERER
。 我的路线是:

@app.route('/login')

def login():

    if authenticateForPanel():
        return redirect(url_for("panel"))
    else:               
        ref = request.environ['HTTP_REFERER']

        return render_template('login.html',blogOptions = g.blogOptions,ref=ref)
当我执行此操作时,我得到了带有回溯的
KeyError:'HTTP\u REFERER'

Traceback (most recent call last):
  File "/Users/ozcan/flask/flask/app.py", line 1823, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/ozcan/flask/flask/app.py", line 1811, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/Users/ozcan/flask/flask/app.py", line 1809, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/ozcan/flask/flask/app.py", line 1482, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/ozcan/flask/flask/app.py", line 1480, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/ozcan/flask/flask/app.py", line 1466, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/ozcan/Documents/python/app.py", line 318, in login
    ref = request.environ['HTTP_REFERER']
KeyError: 'HTTP_REFERER'
当我第一次写这段代码时,它是有效的。我不直接调用这个url。我调用
localhost:5000/panel
,它将我重定向到
login
方法。所以基本上应该有一个referer,我错了吗

当我打印
request.environ['HTTP\u REFERER']
时,它打印
None

我也试过了

ref=request.referer
但它是
None


为什么会发生这种情况?非常感谢。

@dm03514的想法是正确的,但是如果你坚持使用
环境
字典,你应该使用
获取
方法。另外,您如何测试它是否为无,即您是使用交互式解释器打印值,还是在正文中添加打印语句

您如何合理地做到这一点的示例:

# snip
else:
    ref = request.environ.get('HTTP_REFERER')
    # You can specify a default return value other than None like so:
    # ref = request.environ.get('HTTP_REFERER', '/')
# snip

werkzeug请求包装器(flask默认使用)为您执行以下操作:

但在更一般的情况下,要检索指定默认值的字典键的值(如果该键不存在),请使用

当我第一次写这段代码时,它正在工作。我不直接调用 我调用localhost:5000/panel,它会将我重定向到登录名 所以基本上应该有一个推荐人,我错了吗

这是不对的。重定向不能保证推荐人。浏览器是否提供推荐人取决于浏览器。也许您使用的是另一个浏览器,它曾有过这种行为?您现在拥有的代码正在尽可能地发挥最佳效果


请参见

获取请求的唯一方法是通过
加载页面。重定向和生成常规的旧HTTP请求不包括referer属性。

要检查它,我将ref变量打印到ternalsorry,但没有任何更改。您的意思是添加print语句并运行服务器。如果您仍然遇到上述异常,那么您一定没有重新启动服务器。
get
方法不会引发异常,除非对象没有此类方法。不,不,我不是这个意思。我编写了print ref并运行服务器。我没有上述异常,但现在HTTP\u REFERER是none。那么,我如何设置REFERER?正如我链接的问题的答案所述,最可靠的方法是不要让浏览器自行决定。相反,将推荐人的URL作为参数包含在URL中。所以,类似于
http://example.com/login?referrer=http%3A%2F%2Fexample.com%2Fpanel
from flask import Flask, request
import unittest

app = Flask(__name__)
@app.route('/')
def index():
    return unicode(request.referrer)

class Test(unittest.TestCase):

    def test(self):
        c = app.test_client()
        resp = c.get('/', headers={'Referer': '/somethingelse'})
        self.assertEqual('/somethingelse', resp.data)

if __name__ == '__main__':
    unittest.main()