代码之家  ›  专栏  ›  技术社区  ›  c74ckds

从数据库或会话数据填充字段的正确方法是什么?

  •  1
  • c74ckds  · 技术社区  · 10 年前

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

    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)
    

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

    1 回复  |  直到 3 年前
        1
  •  7
  •   davidism    4 年前

    类定义中的代码在导入时执行,而不是在类实例化时执行。您需要将访问权限移动到 session __init__ 方法,以便在视图函数中创建窗体时可以访问它。

    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)
    

    这适用于需要应用程序或请求上下文的任何内容,例如数据库查询,而不仅仅是 一场 .