小编use*_*924的帖子

Flask + gevent - SSE超时使用nginx + uwsgi

我正在编写一个基于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)

nginx gevent flask uwsgi server-sent-events

7
推荐指数
1
解决办法
1938
查看次数

Flask-Admin - 自定义视图

我正在使用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:分支始终执行)

尽管已经彻底扫描了烧瓶管理员文档,源代码和示例,但我无法找到这项工作.

任何人都可以建议我如何修复我的代码,或解决这个问题?

python flask flask-admin

6
推荐指数
1
解决办法
6057
查看次数

如何使用flask-admin更改输入字段大小

在长时间研究了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表单字段/模板似乎不可能.至少我没有找到一个体面的方法来做到这一点

任何意见,将不胜感激

flask-admin

3
推荐指数
1
解决办法
3752
查看次数

标签 统计

flask ×2

flask-admin ×2

gevent ×1

nginx ×1

python ×1

server-sent-events ×1

uwsgi ×1