Flask + asyncio

3
My goal is to upgrade the application from python2 to python3. The application uses the following packages: flask, flask-admin, gevent (coroutine), socketio. Flask was decided to leave, and the rest of the packages will be replaced. There have been several attempts to replace the packages:
  1. Tornado + SockJS: a lot of extra code because of the lack of SockJS channels
  2. Flask-aiohttp: during authorization, request.form['username'] throws an error:

Traceback (most recent call last):

 File "/home/user/.env/rbaio34/lib/python3.4/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/flask/app.py",line 1381, in handle_user_exception reraise(exc_type, exc_value, tb)
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/flask/_compat.py",line 33, in reraise raise value
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/flask/app.py",line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/flask/app.py", line 1461, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args)
 File "/home/user/workspace/aiolina/aiolina.py", line 33, in login username = request.form['username']
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/werkzeug/local.py", line 338, in __getattr__
return getattr(self._get_current_object(), name)
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/werkzeug/utils.py", line 71, in __get__
value = self.func(obj)
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/werkzeug/wrappers.py", line 488, in form
self._load_form_data()
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/flask/wrappers.py", line 165, in _load_form_data
RequestBase._load_form_data(self)
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/werkzeug/wrappers.py", line 360, in _load_form_data
mimetype, content_length, options)
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/werkzeug/formparser.py", line 193, in parse
content_length, options)
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/werkzeug/formparser.py", line 103, in wrapper
exhaust()
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/werkzeug/wsgi.py", line 977, in exhaust
self.read(chunk)
File "/home/user/.env/rbaio34/lib/python3.4/site-packages/werkzeug/wsgi.py", line 994, in read
if to_read and len(read) != to_read:TypeError: object of type 'generator' has no len()

那么,如何让Flask-aiohttp工作?或者使用哪些包替代?

2个回答

3

Flask-aiohttp并非完全可以代替Flask:通常情况下可以使用,但有时会出现类似你观察到的错误。

我建议尝试只使用aiohttp。它有第三方库SockJS支持。


1
这个问题已经过时,但是它是谷歌搜索结果列表中的第一个。所以我会在这里提出来:
如果你正在寻找与asyncio兼容的Flask替代方案,那么你可能想看看Quart。它旨在成为一个(几乎)可替换的解决方案,甚至支持Flask扩展。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接