我有一个简单的烧瓶应用程序,我想使用@ app.before_request,但不知何故它不起作用!我确信我没有正确思考这个问题!显然它将被要求使用类似的东西:
return redirect(url_for('index'))
Run Code Online (Sandbox Code Playgroud)
但我需要它被要求:
return render_template('index.html')
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮忙吗?
我想要使用Flask的"SubmitField"
<button type="submit" title="Save this form"><span>Save</span></button>
Run Code Online (Sandbox Code Playgroud)
代替:
<input type="submit" title="Save this form" />
Run Code Online (Sandbox Code Playgroud)
我在模板中打印出来:
{{ field(class=css_class, title=field.description, **kwargs) }}
Run Code Online (Sandbox Code Playgroud)
我猜我必须以某种方式修改SubmitInput(SubmitField背后的小部件),但我不确定如何做到这一点,我是否必须修改__html __()?
编辑:
from flask.ext.wtf import Required, Length, EqualTo, Field, TextInput
from flask import Markup
class InlineButtonWidget(object):
html = """
<button type="submit" title="%s"><span>%s</span></button>
"""
def __init__(self, input_type='submit'):
self.input_type = input_type
def __call__(self, field, **kwargs):
kwargs.setdefault('id', field.id)
kwargs.setdefault('type', self.input_type)
if 'value' not in kwargs:
kwargs['value'] = field._value()
return HTMLString(self.html % (field.name, field.label ))
class InlineButton(Field):
widget = InlineButtonWidget()
def _value(self):
if self.data: …Run Code Online (Sandbox Code Playgroud) 我有一个在 WSGI 下提供的 Flask 应用程序,其中数据库 URI 会随时间变化。URI 每两小时切换到另一个数据库。我利用这段时间填充一个数据库,而另一个数据库则为应用程序提供数据。
我很难弄清楚如何最好地配置会话,以便在切换发生时,客户端将在下一个请求中获得正确的(不同的)数据库。根据我的测试,如果我在顶层初始化数据库,当切换发生时,客户端仍然指向旧数据库。
我想过在页面(索引等)内部设置会话,但是太痛苦了,然后我担心打开和关闭太多的数据库连接并让它们闲置。我想我可以通过在启动时初始化两个会话来使其工作,然后只需选择在每个页面内的切换时使用哪个会话。这似乎效率低下,我相信有更好的方法。
帮助?!
~~~~~~~~~
这是我目前正在做的事情的一般想法,但无法更改请求之间的 URI。顶级代码只运行一次,或者每隔一段时间运行一次。
if now.hour % 2:
db_name = 'db1'
else:
db_name = 'db2'
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://foo:poo@localhost:3306/%s" % db_name
def init_db(uri, **kwargs):
engine = create_engine(uri, **kwargs)
Base.metadata.create_all(bind=engine)
global db_session
db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))
Base.query = db_session.query_property()
init_db(app.config['SQLALCHEMY_DATABASE_URI'], pool_recycle=3600)
@app.teardown_request
def shutdown_session(exception=None):
db_session.remove()
@app.route('/')
def index():
...etc...
Run Code Online (Sandbox Code Playgroud)
工作示例 - 美丽。
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://foo:poo@localhost:3306/%s"
class SessionManager(object):
def __init__(self, base_uri=None, **kwargs):
self.session = None
self.base_uri …Run Code Online (Sandbox Code Playgroud) 我使用安装了ipdbpip,但我仍然得到
ImportError: No module named ipdb.
我是否必须做其他事情才能引入这个模块?当然,我import ipdb也在我的文件的顶部。我的想法是:我安装了 Python 2.7 和 Python 3。Pip 安装ipdb到 Python 2.7 目录,但我正在运行的 Python 模块使用的是 Python 3。我认为这是问题所在,但我该如何解决它,以便ipdb可以与我的 Python 3 模块一起使用?谢谢!
我使用 Flask-Babel 进行翻译。使用函数来确定语言环境:
LANGUAGES = ['en', 'ru']
@babel.localeselector
def get_locale():
return request.accept_languages.best_match(LANGUAGES)
Run Code Online (Sandbox Code Playgroud)
例如,如何根据语言环境为每个人的 url 添加 url-prefix?
ru/quotes
Run Code Online (Sandbox Code Playgroud)
或者
en/quotes
Run Code Online (Sandbox Code Playgroud)
我想设置链接以在模板中选择语言。我怎样才能做到这一点?
我有一个简单的设置,使用如下所示的flask-login.当我点击before_request时,g.user设置正确.我也正确注册用户(因为他们使用正确的电子邮件/通行证打到数据库).我的问题是在before_request和页面命中之间,g.user总是变为None.我想我会错过会话,但我不知道是什么.
init:
lm = LoginManager()
lm.init_app(app)
lm.login_view = 'login'
Run Code Online (Sandbox Code Playgroud)
在view/login.py文件中,我有以下内容.
意见/ login.py:
@app.lm.user_loader
def load_user(id):
return models.user.user_with_id(id)
@app.before_request
def before_request():
g.user = current_user
print 'current_user: %s, g.user: %s, leaving bef_req' % (current_user, g.user)
@app.route('/login', methods=['GET', 'POST'])
def login():
print 'in login, g.user: %s' % g.user
if g.user is not None and g.user.is_authenticated():
return redirect(url_for('index'))
enter_form = app.forms.EnterForm()
if enter_form.validate_on_submit():
session['remember_me'] = True
return app.models.user.try_register(enter_form.email.data,
enter_form.password.data)
return render_template('index.html', enter_form=enter_form, profiles=[])
Run Code Online (Sandbox Code Playgroud)
意见/ index.py:
@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
def index(): …Run Code Online (Sandbox Code Playgroud) 我有一个QlistView内部带有项目名称(QstandardItem)的复选框(动态创建)。下面Qlistview是一个名为的复选框DatacheckercheckBox1。我想要的是当此DatacheckercheckBox1复选框状态更改为“已检查”时,QlistView应选中内的所有复选框。我已经DatacheckercheckBox1通过复选框发出了信号
self.dlg.DatacheckercheckBox1.stateChanged.connect(self.selectAll)
Run Code Online (Sandbox Code Playgroud)
我没有写一个方法,应该迭代其中的所有项目,Qlistview并使其旁边的复选框“已检查”(如果尚未检查)的想法。
鉴于:
from django.db import models
class Food(models.Model):
"""Food, by name."""
name = models.CharField(max_length=25)
class Cat(models.Model):
"""A cat eats one type of food"""
food = models.ForeignKey(Food)
class Cow(models.Model):
"""A cow eats one type of food"""
food = models.ForeignKey(Food)
class Human(models.Model):
"""A human may eat lots of types of food"""
food = models.ManyToManyField(Food)
Run Code Online (Sandbox Code Playgroud)
一个人,只给出食物类,如何获得一组与"反向关系"的所有类.即给出食物类,如何获得猫,牛和人类课程.
我认为这是可能的,因为Food有三个"反向关系":Food.cat_set,Food.cow_set和Food.human_set.
帮助谢谢,谢谢!
我还没有找到一个令人满意的方法:我有一个工作正常的djangocms设置.但我需要将CMS外部表格中的内容添加到我的主页,并在模板上呈现该内容.我可以这样做,但在CMS中编辑urls.py以使用我的观点......
url(r'^', 'myapp.views.slideshow_info'),
Run Code Online (Sandbox Code Playgroud)
...从CMS中排除任何内容.我知道我只是获取自定义视图以适应CMS的观点,但我该如何实现?
目前我的应用程序的观点是:
from myapp.models import model1, model2
def slideshow_info(request):
return render_to_response('index.html', {'slideshow_list' : model1.objects.all()})
Run Code Online (Sandbox Code Playgroud)
非常感谢
例如,这段代码:
from flask import session
@app.route('/is_logged_in/')
def is_logged_in():
return 'user' in session
Run Code Online (Sandbox Code Playgroud)
它运行瓶的开发服务器时运行对我很好,但它抛出一个500错误与任何网络服务器设置(FastCGI的,uWSGI等)的任何服务器(Apache时,Nginx的,lighttpd的)上.
谁知道为什么?
我的实际代码是在GitHub上,如果重要的话.
在使用Flask的内部服务器运行时,它可以完美运行,但是我无法使用任何会话变量来使用生产网络服务器:https://github.com/Blender3D/Webminal/blob/master/server.py
python ×10
flask ×6
django ×2
session ×2
django-cms ×1
django-orm ×1
ipdb ×1
jinja2 ×1
lighttpd ×1
pyqt4 ×1
python-2.7 ×1
python-3.x ×1
qt-designer ×1
redirect ×1
sqlalchemy ×1
uri ×1
wtforms ×1