登录页面的实现: from flask import Flask, redirect ,render_template , request, abort,url_for app = Flask(__name__) @app.route('/') def index(): return render_template('index7.html') @app.route('/login',methods = ['POST','GET'])#定义/login地址网页获取方式有get和post# def login(): if request.method == 'POST':#如果是post提交(从input中得到),post数据为admin则跳转到/success网页,不是admin则跳转为401(没有权限)# if request.form['username']=='admin': return redirect(url_for('success')) else: abort(401) elif request.method == 'GET':#如果是get得到(从网页链接处请求),则返回index7.html# return redirect(url_for('index')) @app.route('/success') def success(): return 'logged in successfully'#定义success网页的内容# if __name__ =='__main__': app.run(debug=True,threaded = True)
index7.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action = "/login" method="post">
<p><input type="text" name="username"></p>
<p><input type="submit" value="登录"></p>
</form>
</body>
</html>
cookies的获取与删除:
from flask import Flask,make_response,request
app = Flask(__name__)
@app.route("/set_cookies")
def set_cookie():
resp = make_response("success")#创造一个显示success的响应头resp,set和delcookie需要用到响应头作为对象#
resp.set_cookie("aaa_key","aaa_value",max_age=3600)#创造一个cookie,名字是aaakey,赋值为aaavalue,最大存活时间是3600秒#
return resp#返回响应头内容#
@app.route("/get_cookies")
def get_cookie():
cookie_1 = request.cookies.get("aaa_key")#该函数得到aaakey的cookie赋值#
return cookie_1
@app.route("/delete_cookies")
def delete_cookie():
resp = make_response("del success")
resp.delete_cookie("aaa_key")
return resp#和获取同理#
if __name__ == '__main__':
app.run(debug=True,threaded = True)
登录与注销的实现:
from flask import Flask from flask import render_template from flask import request from flask import Flask,session,redirect,url_for,request app = Flask(__name__) app.secret_key = '123456'#设置数据密钥,未输入密钥的数据将会被加密为乱码(存储于session中的)# @app.route('/') def index(): if 'username' in session:#检查username是否存在于session中,就是检测是否已经登录# user = session['username'] return '登录用户名是:' + user + '<br>' + "<b><a href = '/logout'>点击这里注销</a></b>" else:#若没登陆,则跳转到登陆页面# return "您暂时未登录,<br><a href = '/login'><b>点击这里登录</b></a>" @app.route('/login',methods = ['GET','POST']) def login(): if request.method == 'POST':#如果是post表单提交,则从表单中获取用户名# session['username'] = request.form['username'] return redirect(url_for('index'))#回到首页,重新判断# elif request.method == 'GET': return render_template('登录表单.html') @app.route('/logout') def logout(): session.pop('username',None)#删除,就是将session中的username重置为none默认值# return redirect(url_for('index')) if __name__ == '__main__': app.run(debug=True,threaded = True)
用户名+密码组合登录:
from flask import Flask,flash,redirect,render_template,request,url_for app = Flask(__name__) app.secret_key = '123456'#设置密钥# @app.route('/') def index(): return render_template('index.html') @app.route('/login',methods = ['GET','POST']) def login(): errormsg = None#设置错误信息提示,此时没有被赋值(为none)# if request.method == 'POST': if request.form['username'] !='admin' or request.form['password'] !='admin':#判断用户名和密码是否为admin# errormsg = 'Invalid username or password. Please try again!'#不是的话(末尾的叹号)则返回该错误信息# else: flash('You were successfully logged in')#生成一个登录成功信息,flash函数会使其可以重定向到其他页面# return redirect(url_for('index'))#回到主页# return render_template('login9.html',error = errormsg) if __name__ == "__main__": app.run(debug=True,threaded = True)
登录表单:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" action="http://localhost:5000/login">
<table>
<tr>
<td>Username</td>
<td><input type="username" name="username"></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="Submit"></td>
</tr>
</table>
</form>
{% if error %}
<p><strong>Error</strong>: {{ error }}</p>
{% endif %}
</body>
</html>
首页:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
<p>{{ message }}</p>
{% endfor %}
{% endif %}
{% endwith %}
<h3>Welcome!</h3>
<a href="{{url_for('login')}}">login</a>
</body>
</html>
首先,{% with messages = get_flashed_messages() %}这行代码用于获取通过flash()函数存储的消息,并将其保存在名为messages的变量中。
然后,{% if messages %}这行代码检查是否存在消息。如果存在消息,就会进入下一层级。
在下一层级中,{% for message in messages %}这行代码是一个循环语句,用于遍历所有的消息。
接下来,<p>{{ message }}</p>这行代码会将每个消息以段落标签<p>包裹起来并进行显示。{{ message }}是一个模板变量,用于显示消息的内容。
当所有的消息都被显示完毕后,代码回到上一层级,继续执行。
最后,<h3>Welcome!</h3>显示一个标题,表示欢迎用户访问该页面。
<a href="{{url_for('login')}}">login</a>是一个超链接,指向名为"login"的路由。这个超链接可用于跳转到登录页面。
文章详细介绍了如何使用Python的Flask框架实现登录功能,包括GET和POST请求处理、session管理以及cookie的创建、获取和删除。同时涉及了用户名和密码验证以及登录表单和首页的展示。

3990





