在Flask框架中通过响应对象传递变量

时间:2017-08-09 09:57:50

标签: html python-2.7 flask

我需要在完成注册过程时传递变量和响应对象,并在同一页面上显示成功消息。我尝试了很多方法,但我不知道该怎么做。请看这个场景并帮助我。

@app.route('/signup', methods=['POST', 'GET'])
    def signup():
        message = ''
        email = ''
        password = ''
        resp = app.make_response(render_template('signup.html'))
        if request.method == 'POST':
            import datetime
            email = request.form['emailInput']
            password = request.form['pswdInput']

            if len(password) < 3:
                message = Markup("<p style='color:red;'> Password Length Should Be More Than 3 Character </p> ")
                return render_template('signup.html', message = message)

            expire_date = datetime.datetime.now()
            expire_date = expire_date + datetime.timedelta(hours=1)
            resp.set_cookie('userEmail', email, expires=expire_date)
            resp.set_cookie('userPassword', password, expires=expire_date)

            message = Markup("<h1> Registration successfull! </h1>")
            resp.headers.set('message', message)
            return resp

        return render_template('signup.html', message = message)

HTML:

<div class="container">
<a href = "{{url_for('home')}}"> Home </a>
    <form id="signup" method="POST" action="{{url_for('signup')}}">

        <div class="header">

            <h3>Sign Up</h3>

            <p>You want to fill out this form</p>

        </div>

        <div class="sep"></div>

        <div class="">

            <input type="email" name="emailInput" placeholder="e-mail" autofocus />

            <input type="password" name="pswdInput" placeholder="Password" />

            <div class="">
                <input name="joinCheck" name="joinCheck" value="1" type="checkbox" /><label class="terms">I accept the terms of use</label>
            </div>

            <input type="submit" id="submitBtn" value="Submit">SIGN UP FOR INVITE NOW</a>

        </div>
        <div>
            {{message}}
        </div>

    </form>

</div>

1 个答案:

答案 0 :(得分:1)

  

resp = app.make_response(render_template('signup.html'))

这会遗漏您的message关键字。将其更改为:

resp = app.make_response(render_template('signup.html', message=message))

您还需要将此代码向下移动,因为它会直接将上面的message变量视为空字符串并将其分配给其关键字。我会把它放在resp.set_cookie()代码的正上方。

最后,移动一下:

  

message = Markup("<h1> Registration successfull! </h1>")

您移动的app.make_response()代码之上。在初始化响应代码之前,需要设置message变量。

只是一个小提示:我会将message = " "更改为message = None。否则,在编译的HTML中,它看起来就像是空的div。在这个小案例中,这不会太有害,但我肯定会在未来的大型项目中成为经验法则。然后,在您的HTML中:

{% if message %}
    <div>
        {{message}}
    </div>
{% endif %}

干杯。