我正在编写一个基于Flask,gevent和Redis的webapp,它使用Server Sent Events.
我在StackOverflow上经历了几个问题,并在google上进行了大量搜索,但没有找到适合我的合适答案,所以在这里我要求社区帮助.
问题在于生产堆栈,nginx + uwsgi:浏览器定期接收更新(并按预期刷新)大约30秒.之后,连接超时,浏览器不再接收任何更新,直到手动重新加载页面.
由于整个东西在localhost上完美运行,使用标准的烧瓶开发服务器(闲置30分钟后连接仍然存在),我很确定问题出在uwsgi/nginx配置上.我已经尝试了所有我能想到的nginx/uwsgi设置但没有任何东西,它会在几秒钟后保持超时.
有人有线索吗?
这里有一些代码和配置.
nginx相关的生产设置:
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/myapp.sock;
uwsgi_param UWSGI_PYHOME /srv/www/myapp/venv;
uwsgi_param UWSGI_CHDIR /srv/www/myapp;
uwsgi_param UWSGI_MODULE run;
uwsgi_param UWSGI_CALLABLE app;
uwsgi_buffering off;
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_cache off;
}
Run Code Online (Sandbox Code Playgroud)
uwsgi制作设置
[uwsgi]
base = /srv/www/myapp
app = run
home = %(base)/venv
pythonpath = %(base)
socket = /tmp/%n.sock
gevent = 100
module = %(app)
callable = app
logto = /srv/www/myapp-logs/uwsgi_%n.log
Run Code Online (Sandbox Code Playgroud)
这是模板执行订阅频道的javascript(目前,模板只是在服务器推送一些数据时刷新整个页面)
<script type="text/javascript">
var eventOutputContainer = document.getElementById("event");
var evtSrc …Run Code Online (Sandbox Code Playgroud) 我正在使用Flask和pyMongo开发一个web应用程序,我最近开始集成Flask-Admin模块(1.0.4),给出了新的mongodb支持.
使用ModelViews时,一切都很顺畅,但是当涉及到BaseView的子类化时,我根本无法使它工作.
这是我的设置:
user_view = Admin(app, name='User stuff', url="/user", endpoint="user")
class ProfileForm(wtf.Form):
username = wtf.TextField('Username', [wtf.Required()])
name = wtf.TextField('Name', [wtf.Required()])
class Profile(BaseView):
@expose('/', methods=('GET', 'POST'))
def profile(self):
user = User(uid) # gets the user's data from DB
form = ProfileForm(request.form, obj=user)
if form.validate_on_submit():
data = form.data
user.set(**data)
user.save()
flash("Your profile has been saved")
else:
flash("form did not validate on submit")
return self.render('user/profile.html', form=form, data=user)
user_view.add_view(Profile(name='Profile', url='profile'))
Run Code Online (Sandbox Code Playgroud)
提交表单时,wtforms不会报告任何错误(除非有任何错误)但验证不会返回到我的配置文件视图(else:分支始终执行)
尽管已经彻底扫描了烧瓶管理员文档,源代码和示例,但我无法找到这项工作.
任何人都可以建议我如何修复我的代码,或解决这个问题?
在长时间研究了flask-admin和wtforms的文档和源代码之后,我仍然无法理解如何改变flask-admin模型表单中输入字段的大小.
根据wtf"速成课程"页面,应该可以在模板中传递给表单字段css参数,像这样(jinja2示例):
<form method="POST" action="/login">
<div>{{ form.username.label }}: {{ form.username(size="10") }}</div>
<div>{{ form.password.label }}: {{ form.password() }}</div>
</form>
Run Code Online (Sandbox Code Playgroud)
但是,使用Flask-Admin表单字段/模板似乎不可能.至少我没有找到一个体面的方法来做到这一点
任何意见,将不胜感激