如何在其他表单提交结束时登录Flask?

2024-10-02 14:23:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个web应用程序,你可以在登录(或注册)之前通过表单提出产品请求。这是一种“试一试”的模式来降低放弃率。当我们把注册放在第一位的时候——我们有太多的人放弃了这项服务,因为他们必须先注册一个账户。这样一来,我们就可以让人们在报名之前做出一些努力。在

无论如何,我很难让这个模式发挥作用。我使用的是flask登录扩展名。我有一个呈现产品请求表单的视图,如果用户未登录,则会重定向到登录视图:

@app.route('/customer/gift_request', methods=['GET', 'POST'])
# Note login is NOT required for this.
def gift_request():
    form = GiftRequestForm()
    error = None
    if form.validate_on_submit():
        if current_user.get_id():
            new_gift_request = GiftRequest(
                current_user.id,
                form.giftee_name.data,
                form.giftee_age.data,
                int(form.giftee_sex.data),
                form.event.data,
                form.event_date.data,
                float(form.budget.data))
            try:
                db.session.add(new_gift_request)
                db.session.commit()
                flash("You have successfully submitted a gift request! ",'success')
                return redirect(url_for('customer_home'))
            except:
                error = "Error creating gift request"
        else:
            return redirect(url_for('login', next=request.url)

    return render_template('customer_portal/gift_request.html', form=form, error=error) 

我的登录视图如下:

^{pr2}$

请注意,我的登录显示为登录页上的模式窗口。在任何情况下,我不知道如何在登录后保留我的礼品申请表数据。我该怎么传递?我尝试过很多东西——比如把它放在请求中——但这让我觉得很不舒服(而且可能不安全)。另外,在登录提交时,表单数据就消失了。它从来没有传递到登录模板,所以我想它只是消失了。我在网上搜索过,但似乎找不到一个模式来做这件事。在

另外,登录只是其中的一部分——如果填写礼物请求的人没有登录名,那么我想让他们到注册页面上创建一个帐户。但我想如果我弄清楚了-,我可以用同样的模式来扩展它。在


Tags: form视图url表单fordatareturn产品
1条回答
网友
1楼 · 发布于 2024-10-02 14:23:50

我想你可能需要一个疗程。它看起来像这样:

if form.validate_on_submit():
    if current_user.get_id():
        session['new_gift_request'] = GiftRequest(
            current_user.id,
            form.giftee_name.data,
            form.giftee_age.data,
            int(form.giftee_sex.data),
            form.event.data,
            form.event_date.data,
            float(form.budget.data))

我用过很多次了,我从来没有遇到过问题。如果希望表单数据在没有会话的情况下挂起,则必须跟踪它并将其传递给每个后续模板。在

更新

重新读取代码后,如果当前用户未登录,则根本不会保存表单数据。很明显,这里的烧瓶有一点变化:

^{pr2}$

相关问题 更多 >