Python 请求失败后,FlaskClient从g in设置cookie

Python 请求失败后,FlaskClient从g in设置cookie,python,cookies,flask,Python,Cookies,Flask,在我的烧瓶测试客户端中设置cookie时出现问题。 使用boilerplate+Flask BabelEx,在我添加这些用于语言选择(在main.py中)之后: 由于TypeError而失败: self = <tests.test_login.TestForm instance at 0x415f328c> def test_user_login(self): rv = self.app.post('/login', data=dict(

在我的烧瓶测试客户端中设置cookie时出现问题。 使用boilerplate+Flask BabelEx,在我添加这些用于语言选择(在main.py中)之后:

由于TypeError而失败:

self = <tests.test_login.TestForm instance at 0x415f328c>

    def test_user_login(self):
        rv = self.app.post('/login', data=dict(
            username='admin',
            password="supersafepassword"
>       ), follow_redirects=True)

tests/test_login.py:25: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
env/local/lib/python2.7/site-packages/werkzeug/test.py:784: in post
    return self.open(*args, **kw)
env/local/lib/python2.7/site-packages/flask/testing.py:108: in open
    follow_redirects=follow_redirects)
env/local/lib/python2.7/site-packages/werkzeug/test.py:742: in open
    response = self.run_wsgi_app(environ, buffered=buffered)
env/local/lib/python2.7/site-packages/werkzeug/test.py:659: in run_wsgi_app
    rv = run_wsgi_app(self.application, environ, buffered=buffered)
env/local/lib/python2.7/site-packages/werkzeug/test.py:867: in run_wsgi_app
    app_iter = app(environ, start_response)
env/local/lib/python2.7/site-packages/flask/app.py:1836: in __call__
    return self.wsgi_app(environ, start_response)
env/local/lib/python2.7/site-packages/flask/app.py:1820: in wsgi_app
    response = self.make_response(self.handle_exception(e))
env/local/lib/python2.7/site-packages/flask/app.py:1403: in handle_exception
    reraise(exc_type, exc_value, tb)
env/local/lib/python2.7/site-packages/flask/app.py:1817: in wsgi_app
    response = self.full_dispatch_request()
env/local/lib/python2.7/site-packages/flask/app.py:1479: in full_dispatch_request
    response = self.process_response(response)
env/local/lib/python2.7/site-packages/flask/app.py:1691: in process_response
    response = handler(response)
appname/controllers/main.py:22: in set_language_cookie
    response.set_cookie('user_lang', value=g.language)
env/local/lib/python2.7/site-packages/werkzeug/wrappers.py:1008: in set_cookie
    self.charset))
env/local/lib/python2.7/site-packages/werkzeug/http.py:933: in dump_cookie
    buf = [key + b'=' + _cookie_quote(value)]
env/local/lib/python2.7/site-packages/werkzeug/_internal.py:223: in _cookie_quote
    for char in iter_bytes(b):
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

x = None

>   iter_bytes = lambda x: iter(x)
E   TypeError: 'NoneType' object is not iterable
self=
def测试用户登录(自我):
rv=self.app.post('/login',data=dict(
username='admin',
password=“supersafepassword”
>),遵循_重定向=真)
tests/test_login.py:25:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
env/local/lib/python2.7/site packages/werkzeug/test.py:784:in-post
返回自开(*args,**kw)
env/local/lib/python2.7/现场包装/烧瓶/测试。py:108:开放式
follow_重定向=follow_重定向)
env/local/lib/python2.7/site packages/werkzeug/test.py:742:打开
response=self.run\u wsgi\u应用程序(environ,buffered=buffered)
env/local/lib/python2.7/site-packages/werkzeug/test.py:659:in-run\u-wsgi\u应用程序
rv=运行应用程序(self.application,environ,buffered=buffered)
env/local/lib/python2.7/site packages/werkzeug/test.py:867:in-run\u wsgi\u应用程序
应用程序=应用程序(环境,启动响应)
env/local/lib/python2.7/site packages/flask/app.py:1836:in\uu call__
返回self.wsgi_应用程序(环境,启动响应)
env/local/lib/python2.7/site packages/flask/app.py:1820:in wsgi_app
响应=self.make\u响应(self.handle\u异常(e))
env/local/lib/python2.7/site packages/flask/app.py:1403:句柄中的异常
重放(exc_类型、exc_值、tb)
env/local/lib/python2.7/site packages/flask/app.py:1817:in wsgi_app
response=self.full\u dispatch\u request()
env/local/lib/python2.7/site packages/flask/app.py:1479:完整发送请求
响应=自我过程\响应(响应)
env/local/lib/python2.7/site packages/flask/app.py:1691:过程中的响应
响应=处理程序(响应)
appname/controllers/main.py:22:in set\u language\u cookie
response.set\u cookie('user\u lang',value=g.language)
env/local/lib/python2.7/site packages/werkzeug/wrappers.py:1008:in set_cookie
自选字符集)
env/local/lib/python2.7/site-packages/werkzeug/http.py:933:in-dump_-cookie
buf=[key+b'='+\u cookie\u quote(值)]
env/local/lib/python2.7/site packages/werkzeug/_internal.py:223:in _cookie_quote
对于iter_字节(b)中的字符:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
x=无
>iter_字节=λx:iter(x)
E类型错误:“非类型”对象不可编辑
与其他请求测试一样。

如果没有找到匹配项,则返回默认值
None

您没有在请求上设置
Accept Language
Cookie
头,因此将找不到匹配项,并返回该语言的
None

依次设置
g.language=None
,然后尝试将其用作
响应的值。set_cookie()
调用失败

如果未找到匹配项,则可以指定要使用的默认值:

language = (
    request.cookies.get('user_lang') or
    # default language is English
    request.accept_languages.best_match(LANG_CHOICES, default='en'))

非常感谢,“默认”设置修复了我的测试!哎呀,对不起。。忘了检查
self = <tests.test_login.TestForm instance at 0x415f328c>

    def test_user_login(self):
        rv = self.app.post('/login', data=dict(
            username='admin',
            password="supersafepassword"
>       ), follow_redirects=True)

tests/test_login.py:25: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
env/local/lib/python2.7/site-packages/werkzeug/test.py:784: in post
    return self.open(*args, **kw)
env/local/lib/python2.7/site-packages/flask/testing.py:108: in open
    follow_redirects=follow_redirects)
env/local/lib/python2.7/site-packages/werkzeug/test.py:742: in open
    response = self.run_wsgi_app(environ, buffered=buffered)
env/local/lib/python2.7/site-packages/werkzeug/test.py:659: in run_wsgi_app
    rv = run_wsgi_app(self.application, environ, buffered=buffered)
env/local/lib/python2.7/site-packages/werkzeug/test.py:867: in run_wsgi_app
    app_iter = app(environ, start_response)
env/local/lib/python2.7/site-packages/flask/app.py:1836: in __call__
    return self.wsgi_app(environ, start_response)
env/local/lib/python2.7/site-packages/flask/app.py:1820: in wsgi_app
    response = self.make_response(self.handle_exception(e))
env/local/lib/python2.7/site-packages/flask/app.py:1403: in handle_exception
    reraise(exc_type, exc_value, tb)
env/local/lib/python2.7/site-packages/flask/app.py:1817: in wsgi_app
    response = self.full_dispatch_request()
env/local/lib/python2.7/site-packages/flask/app.py:1479: in full_dispatch_request
    response = self.process_response(response)
env/local/lib/python2.7/site-packages/flask/app.py:1691: in process_response
    response = handler(response)
appname/controllers/main.py:22: in set_language_cookie
    response.set_cookie('user_lang', value=g.language)
env/local/lib/python2.7/site-packages/werkzeug/wrappers.py:1008: in set_cookie
    self.charset))
env/local/lib/python2.7/site-packages/werkzeug/http.py:933: in dump_cookie
    buf = [key + b'=' + _cookie_quote(value)]
env/local/lib/python2.7/site-packages/werkzeug/_internal.py:223: in _cookie_quote
    for char in iter_bytes(b):
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

x = None

>   iter_bytes = lambda x: iter(x)
E   TypeError: 'NoneType' object is not iterable
language = (
    request.cookies.get('user_lang') or
    # default language is English
    request.accept_languages.best_match(LANG_CHOICES, default='en'))