python - 从数据库或 session 数据填充字段的正确方法是什么?

标签 python session flask wtforms

当用户登录时,我会在 session 中存储一些变量,以便稍后用于填充字段。

from flask_wtf import Form
from wtforms import SelectField
from flask import session

class InstitutionForm(Form):

    city = session['city']

    city_tuples = [(x, x) for x in city]

    organisation = SelectField(
        'organisation',
        choices=city_tuples
    )


class Institution(View):

    methods = ['POST']

    def dispatch_request(self):

        form = InstitutionForm()
        return render_template(
            'form/institution.html',
            form=form)

当我运行该应用程序时,我收到错误消息“在请求上下文之外工作”。从 session 数据填充此字段的正确方法是什么?

最佳答案

类定义中的代码在导入时执行,而不是在实例化类时执行。您需要将对 session 的访问权移至 __init__ 方法,以便在 View 函数中创建表单时访问它。

class Institution(Form):
    organization = SelectField()

    def __init__(self, *args, **kwargs):
        self.organization.kwargs['choices'] = [(x, x) for x in session.get('city', ('not set',))]
        super().__init__(*args, **kwargs)

这适用于任何需要应用程序或请求上下文的东西,例如数据库查询,而不仅仅是 session

关于python - 从数据库或 session 数据填充字段的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28194593/

相关文章:

php - 跨服务器保留经过身份验证的用户

python - 禁用模板缓存 Jinja2

python - wtforms 验证下拉值

python - 使用 python 列出 github 目录

python - 橙色在Python脚本中保存模型

Python:此代码如何使用负整数 0 作为不同的索引值?

asp.net - HTTPHandler : IRequiresSessionState halts execution of pages

python - 编辑 x 轴刻度标签的日期格式

node.js - 在 Node 中运行时或数据库中存储 session

python - 从我的公共(public) IP 地址看不到 Flask 服务器