Python 访问flask_wtf中的会话
在forms.py中,我想访问会话。 这是forms.py代码:Python 访问flask_wtf中的会话,python,session,flask,Python,Session,Flask,在forms.py中,我想访问会话。 这是forms.py代码: from flask_wtf import Form from wtforms import SelectField,FileField,TextAreaField,TextField,validators . . . class Send(Form): group = SelectField('Group',[validators.Required('you must select a group')],coerce=i
from flask_wtf import Form
from wtforms import SelectField,FileField,TextAreaField,TextField,validators
.
.
.
class Send(Form):
group = SelectField('Group',[validators.Required('you must select a group')],coerce=int,choices=c)
title = TextField('Title',[validators.Required('you must enter a title')])
content = TextAreaField('Content',[validators.Required('you must enter a content')])
attachment = FileField('Attachment')
但当我添加此代码时:
from flask import session
uid = session.get('user_id')
它向我显示了以下错误:
raise RuntimeError('working outside of request context')
RuntimeError: working outside of request context
那么我如何解决它呢?您应该仅在请求时使用
uid=session.get('user\u id')
,例如:
app = Flask(__name__)
@app.route('/')
def home():
'''dispatcher functions works with request context'''
uid = session.get('user_id')
return str(uid)
如果此代码不是从请求调用的(另一个进程、另一个线程、芹菜、单元测试等),则应手动创建请求上下文或避免使用上下文堆栈变量:
with app.test_request_context():
uid = session.get('user_id')
您应该仅在请求时使用
uid=session.get('user\u id')
,例如:
app = Flask(__name__)
@app.route('/')
def home():
'''dispatcher functions works with request context'''
uid = session.get('user_id')
return str(uid)
如果此代码不是从请求调用的(另一个进程、另一个线程、芹菜、单元测试等),则应手动创建请求上下文或避免使用上下文堆栈变量:
with app.test_request_context():
uid = session.get('user_id')
您应该仅在请求时使用
uid=session.get('user\u id')
,例如:
app = Flask(__name__)
@app.route('/')
def home():
'''dispatcher functions works with request context'''
uid = session.get('user_id')
return str(uid)
如果此代码不是从请求调用的(另一个进程、另一个线程、芹菜、单元测试等),则应手动创建请求上下文或避免使用上下文堆栈变量:
with app.test_request_context():
uid = session.get('user_id')
您应该仅在请求时使用
uid=session.get('user\u id')
,例如:
app = Flask(__name__)
@app.route('/')
def home():
'''dispatcher functions works with request context'''
uid = session.get('user_id')
return str(uid)
如果此代码不是从请求调用的(另一个进程、另一个线程、芹菜、单元测试等),则应手动创建请求上下文或避免使用上下文堆栈变量:
with app.test_request_context():
uid = session.get('user_id')
好的,我找到了解决这个问题的方法 我认为最好的方法之一是在路由文件中使用session 这是我的表格代码:
from flask_wtf import Form
from wtforms import SelectField
class Test(Form):
name = SelectField('Name')
因此,我有一个名为“我们”的应用程序,我可以访问此应用程序中的会话:
from flask import Blueprint,session,render_template
from form import Test
our = Blueprint('our',__name__)
@our.route('/')
def index():
form = Test()
#session['name'] = 'hedi'
if session.get('name').lower() == "morteza":
form.name.choices = ((1,'mori'),(2,'hedi'))
else:
form.name.choices = ((1,'you'))
return render_template('index.html',form=form)
#return str(session.get('name'))
现在我通过应用程序更改了表单字段数据form.name.choices=..好的,我找到了解决这个问题的方法 我认为最好的方法之一是在路由文件中使用session 这是我的表格代码:
from flask_wtf import Form
from wtforms import SelectField
class Test(Form):
name = SelectField('Name')
因此,我有一个名为“我们”的应用程序,我可以访问此应用程序中的会话:
from flask import Blueprint,session,render_template
from form import Test
our = Blueprint('our',__name__)
@our.route('/')
def index():
form = Test()
#session['name'] = 'hedi'
if session.get('name').lower() == "morteza":
form.name.choices = ((1,'mori'),(2,'hedi'))
else:
form.name.choices = ((1,'you'))
return render_template('index.html',form=form)
#return str(session.get('name'))
现在我通过应用程序更改了表单字段数据form.name.choices=..好的,我找到了解决这个问题的方法 我认为最好的方法之一是在路由文件中使用session 这是我的表格代码:
from flask_wtf import Form
from wtforms import SelectField
class Test(Form):
name = SelectField('Name')
因此,我有一个名为“我们”的应用程序,我可以访问此应用程序中的会话:
from flask import Blueprint,session,render_template
from form import Test
our = Blueprint('our',__name__)
@our.route('/')
def index():
form = Test()
#session['name'] = 'hedi'
if session.get('name').lower() == "morteza":
form.name.choices = ((1,'mori'),(2,'hedi'))
else:
form.name.choices = ((1,'you'))
return render_template('index.html',form=form)
#return str(session.get('name'))
现在我通过应用程序更改了表单字段数据form.name.choices=..好的,我找到了解决这个问题的方法 我认为最好的方法之一是在路由文件中使用session 这是我的表格代码:
from flask_wtf import Form
from wtforms import SelectField
class Test(Form):
name = SelectField('Name')
因此,我有一个名为“我们”的应用程序,我可以访问此应用程序中的会话:
from flask import Blueprint,session,render_template
from form import Test
our = Blueprint('our',__name__)
@our.route('/')
def index():
form = Test()
#session['name'] = 'hedi'
if session.get('name').lower() == "morteza":
form.name.choices = ((1,'mori'),(2,'hedi'))
else:
form.name.choices = ((1,'you'))
return render_template('index.html',form=form)
#return str(session.get('name'))
现在我通过应用程序更改了表单字段数据form.name.choices=..您希望如何处理用户id?记住,用户id会随着请求的不同而变化,因此在表单中声明一次没有任何意义。@MarkHildreth我需要用户id从数据库中获取用户记录并在表单中显示它们(selectField)。所以我在会话中保存了userid,我需要在表单中使用它。那么,你有什么办法让它变得更好吗?你希望用用户id做什么?记住,用户id会随着请求的不同而变化,因此在表单中声明一次没有任何意义。@MarkHildreth我需要用户id从数据库中获取用户记录并在表单中显示它们(selectField)。所以我在会话中保存了userid,我需要在表单中使用它。那么,你有什么办法让它变得更好吗?你希望用用户id做什么?记住,用户id会随着请求的不同而变化,因此在表单中声明一次没有任何意义。@MarkHildreth我需要用户id从数据库中获取用户记录并在表单中显示它们(selectField)。所以我在会话中保存了userid,我需要在表单中使用它。那么,你有什么办法让它变得更好吗?你希望用用户id做什么?记住,用户id会随着请求的不同而变化,因此在表单中声明一次没有任何意义。@MarkHildreth我需要用户id从数据库中获取用户记录并在表单中显示它们(selectField)。所以我在会话中保存了userid,我需要在表单中使用它。那么你有什么想法可以让它变得更好吗?谢谢你的重播,关于app.test\u request\u context()我有问题,有时我用Blueprint来代替,我会出错,因为Blueprint没有test\u request\u context(),所以我怎么解决它呢?感谢您必须获取应用程序并调用
test\u request\u context()
,当前的应用程序可能不适用于您的情况。但看起来你想为这种情况构建一个糟糕的解决方案。更好地描述你想要做什么?好的,我有3个应用程序有不同的工作,所以在所有的应用程序中,我想检查身份验证并通过会话获取用户ID,以提供一些功能。那么,最好的解决方案是什么,或者您的想法是什么?最好的解决方案是使用Flask登录
,因为它在会话
中存储用户ID,并在会话
中按用户ID检查身份验证。但是,您应该仅在请求分派器(查看/路由功能)中使用会话
(或当前用户
,用于Flask登录
),因为它只有在用户发出请求时才有意义。但是,我目前不明白您是如何得到运行时错误:在请求上下文之外工作的
例外,如果您的代码在没有会话的情况下工作
。感谢您的重播,关于app.test\u request\u context()我有问题,有时我使用Blueprint,因为Blueprint没有test\u request\u context(),所以我得到了一个错误,所以我如何解决它呢?感谢您必须获取应用程序并调用test\u request\u context()
,当前的应用程序可能不适用于您的情况。但看起来你想为这种情况构建一个糟糕的解决方案。更好地描述你想要做什么?好的,我有3个应用程序有不同的工作,所以在所有的应用程序中,我想检查身份验证并通过会话获取用户ID,以提供一些功能。那么,最好的解决方案是什么,或者您的想法是什么?最好的解决方案是使用Flask登录