个性化阅读
专注于IT技术分析

Python Flask如何使用和处理会话session?

会话的概念与cookie的概念非常相似。但是, 会话数据存储在服务器上。

会话可以定义为用户登录服务器并注销的持续时间。用于跟踪此会话的数据存储在服务器上的临时目录中。

会话数据存储在cookie的顶部, 并由服务器以加密方式签名。

在Python Flask中, 会话对象用于跟踪会话数据, 会话数据是一个字典对象, 其中包含会话变量及其相关值的键值对。

以下语法用于将会话变量设置为服务器上的特定值。

Session[<variable-name>] = <value>

要删除会话变量, 请在会话对象上使用pop()方法, 并提及要删除的变量。

session.pop(<variable-name>, none)

让我们看一个简单的示例, 以了解如何设置和获取会话变量。

例子

from flask import *
app = Flask(__name__)
app.secret_key = "abc"

@app.route('/')
def home():
	res = make_response("<h4>session variable is set, <a href='/get'>Get Variable</a></h4>")
	session['response']='session#1'
	return res;

@app.route('/get')
def getVariable():
	if 'response' in session:
		s = session['response'];
		return render_template('getsession.html', name = s)

if __name__ == '__main__':
	app.run(debug = True)

getsession.html

<html>
<head>
<title>getting the session</title>
</head>
<body>
<p>The session is set with value: <strong>{{name}}</strong></p>
</body>
</html>
Python Flask如何使用和处理会话session?
Python Flask如何使用和处理会话session?

使用Session在Python Flask中登录应用程序

在这里, 我们将在Python Flask中创建一个登录应用程序, 并向用户显示以下主页。

Python Flask如何使用和处理会话session?

如果我们在没有登录的情况下直接单击view_profile, 那么它将显示一些警告, 因为我们在没有登录的情况下无法直接访问该配置文件。

Python Flask如何使用和处理会话session?

如果我们访问登录页面, 那么应用程序将向用户显示登录页面, 提示用户输入电子邮件ID和密码。在这里, 我们的应用程序将用户重定向到成功页面, 以获取下图所示的任何随机有效电子邮件ID和密码。

Python Flask如何使用和处理会话session?

提交后, 用户将重定向到下图所示的success.html。

Python Flask如何使用和处理会话session?

现在, 如果我们访问配置文件页面, 它将显示具有会话名称的消息, 因为会话变量’email’被设置为其值。

Python Flask如何使用和处理会话session?

现在我们登录到应用程序, 因为我们已经登录到应用程序, 所以现在无需登录应用程序就可以查看用户的个人资料。要进行测试, 请返回主页并单击链接view_profile, 我们将获得如上图所示的结果。

该应用程序方便我们注销会话, 为此, 请单击注销按钮返回首页。它将销毁为此特定服务器设置的所有会话变量。

Python Flask如何使用和处理会话session?

现在, 用户必须再次使用电子邮件和密码登录才能在应用程序上查看配置文件。

这是一个使用python flask构建的简单登录应用程序, 用于实现会话。在此, Python Flask脚本login.py的作用类似于主控制器, 其中包含与URL映射(/, )相关联的视图函数(home(), login(), success(), logout()和profile())。 / login, / success, / logout, / profile)。

login.py

from flask import *
app = Flask(__name__)
app.secret_key = "ayush"

@app.route('/')
def home():
	return render_template("home.html")

@app.route('/login')
def login():
	return render_template("login.html")

@app.route('/success', methods = ["POST"])
def success():
	if request.method == "POST":
		session['email']=request.form['email']
	return render_template('success.html')

@app.route('/logout')
def logout():
	if 'email' in session:
		session.pop('email', None)
		return render_template('logout.html');
	else:
		return '<p>user already logged out</p>'

@app.route('/profile')
def profile():
	if 'email' in session:
		email = session['email']
		return 				render_template('profile.html', name=email)
	else:
		return '<p>Please login first</p>'

if __name__ == '__main__':
	app.run(debug = True)

home.html

<html>
<head>
<title>home</title>
</head>
<body>
<h3>Welcome to the website</h3>
<a href = "/login">login</a><br>
<a href = "/profile">view profile</a><br>
<a href = "/logout">Log out</a><br>
</body>
</html>

login.html

<html>
<head>
	<title>login</title>
</head>
<body>
	<form method = "post" action = "http://localhost:5000/success">
		<table>
			<tr><td>Email</td><td><input type = 'email' name = 'email'></td></tr>
			<tr><td>Password</td><td><input type = 'password' name = 'pass'></td></tr>
		    <tr><td><input type = "submit" value = "Submit"></td></tr>
		</table>
	</form>
</body>
</html>

success.html

<html>
<head>
<title>success</title>
</head>
<body>
	<h2>Login successful</h2>
	<a href="/profile">View Profile</a>
</body>
</html>

logout.html

<html>
<head>
	<title>logout</title>
</head>

<body>
<p>logout successful, click <a href="/login">here</a> to login again</p>
</body>

</html>

赞(0) 打赏
未经允许不得转载:srcmini » Python Flask如何使用和处理会话session?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏