2017-06-17 17 views
2

我在Flask中開發了一個工作的應用程序。我嘗試將我的環境從2.7版升級到3.6版。 當我打正在調用它生成以下錯誤形式的端點:當升級我的python環境時,'bytes'類型的對象不是JSON序列化

Traceback (most recent call last): 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/flask/app.py", line 1997, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/flask/app.py", line 1985, in wsgi_app 
    response = self.handle_exception(e) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/flask/app.py", line 1540, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/TheSwitchWebApp/controllers/account/register.py", line 15, in display_signup_form 
    form = RegisterForm(request.form) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/wtforms/form.py", line 212, in __call__ 
    return type.__call__(cls, *args, **kwargs) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/flask_wtf/form.py", line 88, in __init__ 
    super(FlaskForm, self).__init__(formdata=formdata, **kwargs) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/wtforms/form.py", line 278, in __init__ 
    self.process(formdata, obj, data=data, **kwargs) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/wtforms/form.py", line 132, in process 
    field.process(formdata) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/wtforms/csrf/core.py", line 43, in process 
    self.current_token = self.csrf_impl.generate_csrf_token(self) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/flask_wtf/csrf.py", line 134, in generate_csrf_token 
    token_key=self.meta.csrf_field_name 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/flask_wtf/csrf.py", line 47, in generate_csrf 
    setattr(g, field_name, s.dumps(session[field_name])) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/itsdangerous.py", line 565, in dumps 
    payload = want_bytes(self.dump_payload(obj)) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/itsdangerous.py", line 847, in dump_payload 
    json = super(URLSafeSerializerMixin, self).dump_payload(obj) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/itsdangerous.py", line 550, in dump_payload 
    return want_bytes(self.serializer.dumps(obj)) 
    File "/Users/Melvyn/Documents/personnel/python/TheSwitchWebApp/venv/lib/python3.6/site-packages/itsdangerous.py", line 51, in dumps 
    return json.dumps(obj, separators=(',', ':')) 
    File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/__init__.py", line 238, in dumps 
    **kw).encode(obj) 
    File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", line 199, in encode 
    chunks = self.iterencode(o, _one_shot=True) 
    File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", line 257, in iterencode 
    return _iterencode(o, 0) 
    File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", line 180, in default 
    o.__class__.__name__) 
TypeError: Object of type 'bytes' is not JSON serializable 

它產生的時候我打下面的端點,這個錯誤:

@register_endpoint.route('/', methods=['GET']) 
def display_signup_form(): 
    error = None 
    form = RegisterForm(request.form) 
    return render_template("auth/register.html", form=form, error=error) 

錯誤似乎來從形式:

class RegisterForm(Form): 
    first_name = StringField('First name', [InputRequired(message='First name is mandatory')]) 
    email = StringField('Email Address', [Email(), InputRequired(message='Forgot your email address?')]) 

我沒有得到錯誤的來源。在這段代碼中,我不試圖用JSON串行化任何東西。錯誤來自哪裏?

+0

py2.x和3.x在編碼的情況下是非常不同的,這就是造成問題的原因。你必須改變一些代碼,像大多數東西將是字符串,而不是字節,使py3.x工作 –

+0

首先,使用bytes_type_variable.decode() – theBuzzyCoder

+0

將字節類型變量轉換爲str類型但是在我的端點中,我不使用字節類型變量@KarthikBhatK – mel

回答

5

作爲@Arpit Solanki提到的,​​py2.xpy3.x在編碼的情況下是非常不同的。您最好在瀏覽器中清除Cookie,可能瀏覽器的Cookie設置爲python2代碼,但您的新python3將cookie內容解釋爲字節串。請清除你的cookie將解決問題。

你也可以用selectively擦掉有問題的cookie。

+0

它解決了這個問題,做得很好,謝謝。 – mel

+0

@mel很高興它有幫助,祝你好運:) –

+1

你如何告訴每一位客戶,他們在瀏覽器中擁有的cookie必須清除'因爲我們升級了python'?必須有另一種方法來解決這個問題。 – datashaman

相關問題