我对 Python 还很陌生(老实说,我对一般编程也很陌生)。我目前正在制定一种待办事项列表,我需要它将待办事项放入适当的课程中(所有这些都与教育内容相关)。所以,问题很简单。我将此作为 Flask 驱动的路线:
@app.route('/add_course', methods=('GET', 'POST'))
@login_required
def course():
form = forms.CourseForm()
if form.validate_on_submit():
models.Course.create(teacher=g.user._get_current_object(),
name=form.name.data.strip(),
difficulty=form.level.data.strip(),
description=form.description.data.strip())
flash("Course successfully created!", "success")
return redirect(url_for('index'))
return render_template('add_course.html', form=form)
然后我在
forms.py
中有这个。你可以看到我用巧妙的标记来表明我的问题出在哪里。上面写着THE_PROBLEM
def courses():
try:
courses = models.Course.select(models.Course.id,
models.Course.name,
models.Course.difficulty).where(THE_PROBLEM)
course_list = []
for course in courses:
course_list.append((str(course.id), course.name + ' - ' + course.difficulty.title()))
return course_list
except models.DoesNotExist:
return [('', 'No courses')]
class ToDoForm(FlaskForm):
name = StringField("What's up?", validators=[
DataRequired()
])
due_date = DateTimeField('When?', format='%Y-%m-%d %H-%M')
course = SelectField('Course', choices=courses())
priority = SelectField('Priority',
choices=[('high', 'High priority'),
('medium', 'Normal priority'),
('low', 'Low priority')],
validators=[
DataRequired()
])
description = TextAreaField('Description')
所以,是的,我正在寻找的是传递当前登录的所有者(在本例中为老师)的 id 的方法。我使用此函数
courses()
为选项属性构建元组列表course
中的字段 ToDoForm
。我需要将当前登录的老师的id传递给这个函数,以便它可以评估这位通过的老师是否有任何与他的id匹配的课程。我尝试使用 current_user._get_current_object()
以及其他任何东西,但这只会给我带来大量错误。
任何帮助、意见或建议将不胜感激。我真的希望我在这里所说的(以及我想要实现的目标)是可以理解的
在 Flask 中,如果您使用 Flask-Login 等身份验证库,则可以检索当前用户 ID。 Flask-Login 提供了一个 current_user 对象来代表登录的用户。假设你的 User 模型有一个 id 属性,你可以这样获取用户 ID:
from flask_login import current_user
# Example usage in a view function
@app.route('/some-route')
def some_route():
if current_user.is_authenticated:
user_id = current_user.id
return f"Current user ID is: {user_id}"
else:
return "User is not logged in"
current_user.is_authenticated: Checks if a user is logged in.
current_user.id: Retrieves the ID of the logged-in user if authenticated.
确保 current_user 仅在正确设置 Flask-Login 后才能访问,并且您已使用 login_user(user_instance) 登录用户会话。
如果有人遇到同样令人沮丧的问题,解决方案非常简单。将外部类包装到函数中,并将所需的变量作为参数传递,然后随心所欲地使用它们。 只是不要忘记返回该类的实例。