【问题标题】:Get current user id in Flask获取 Flask 中的当前用户 ID
【发布时间】:2017-04-26 21:27:59
【问题描述】:

我对 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()ToDoForm 中字段 course 的选择属性。我需要将当前登录的老师的 id 传递给这个函数,这样它就可以评估这个通过的老师是否有任何与他的 id 匹配的课程。我尝试使用current_user._get_current_object() 和其他任何东西,但它只是给我带来了很多错误。

我们将不胜感激任何帮助、建议或建议。我真的希望我在这里所说的(以及我想要实现的)是可以理解的

【问题讨论】:

  • 您没有解决用户登录时发生的情况,但我怀疑您需要的是会话管理。当用户登录配置文件时,应该在数据库中进行比较。成功后,将启动一个用户会话,您可以从那里存储您可能感兴趣的任何初始值,在本例中为用户 ID。这听起来对吗?
  • 好吧,我敢打赌这不是不言自明的。对此感到抱歉。好吧,我在 app.py 中实例化了 LoginManager(上面作为第一个代码块给出),在 forms.py(第二个代码块)中实例化了我的表单。一切正常,没有问题。我只是想解决另一个问题——如何提供当前用户的 id?换句话说,我想构建一个查询,例如“SELECT name,难度 FROM course WHERE teacher_id = ** 当前登录用户 **。这对我来说是个问题,因为这个评估过程是在 forms.py 中发生的,而不是在 app 中.py.
  • @SergeyOrlov - from flask_login import current_user
  • @pjcunningham 它是进口的。如何从该对象中检索 id?
  • @SergeyOrlov - current_user.get_id() - 我在考虑 Flask-Security。

标签: python flask flask-wtforms flask-login


【解决方案1】:

如果有人遇到同样令人沮丧的问题,解决方案非常简单。将外部类包装成函数并将所需的变量作为参数传递,然后随心所欲地使用它们。 只是不要忘记返回该类的实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多