我想建立一个简单的网络应用程序作为我学习活动的一部分。Webapp应该要求用户输入他们的电子邮件id,如果它遇到第一次访问的人,它会通过cookie记住用户,并自动登录以执行这些功能。
这是我第一次创建基于用户的web应用。我脑子里有一个蓝图,但我不知道如何实现它。首先,我对收集用户cookie的方式感到困惑。我已经研究了各种教程和flask_login,但是我认为我想要实现的比flask_login实现的要简单得多。
我也尝试过使用flask.session
,但这有点难理解,最后我得到了一个有缺陷的实现。
以下是我目前所拥有的(它是基本的,旨在传达我的用例):
from flask import render_template, request, redirect, url_for
@app.route("/", methods= ["GET"])
def first_page():
cookie = response.headers['cookie']
if database.lookup(cookie):
user = database.get(cookie) # it returns user_email related to that cookie id
else:
return redirect_url(url_for('login'))
data = generateSomeData() # some function
return redirect(url_for('do_that'), user_id, data, stats)
@app.route('/do_that', methods =['GET'])
def do_that(user_id):
return render_template('interface.html', user_id, stats,data) # it uses Jinja template
@app.route('/submit', methods =["GET"])
def submit():
# i want to get all the information here
user_id = request.form['user_id']# some data
answer = request.form['answer'] # some response to be recorded
data = request.form['data'] # same data that I passed in do_that to keep
database.update(data,answer,user_id)
return redirect(url_for('/do_that'))
@app.route('/login', methods=['GET'])
def login():
return render_template('login.html')
@app.route('/loggedIn', methods =['GET'])
def loggedIn():
cookie = response.headers['cookie']
user_email = response.form['user_email']
database.insert(cookie, user_email)
return redirect(url_for('first_page'))
您可以通过^{} dictionary 访问请求cookie,并通过使用} on the response object 来设置cookie:
make_response
或将调用render_template
的结果存储在变量中,然后调用^{干掉代码
现在,您将注意到在
home
和do_that
方法中有一个lot的样板文件,它们都与登录相关。您可以通过编写自己的decorator来避免这种情况(如果您想进一步了解它们,请参见What is a decorator):然后,您的
home
和do_that
方法得到的要短得多:使用提供的
如果您不需要cookie有一个特定的名称,我建议您使用^{} ,因为它已经内置了很多细节(它是签名的,所以不能被篡改,可以设置为仅限HTTP等)。这会让我们的装修师更加干瘪:
然后,您的个别方法可以通过以下方式获得用户:
相关问题 更多 >
编程相关推荐