9、flask-会话-cookie
Cookie
客户端的会话技术: - cookie本身由浏览器保存,通过response将cookie写道浏览器上、下一次访问时、浏览器会根据不同的规则携带cookie过来 特点: - 客户端的会话技术、浏览器的会话技术 - 数据全都是存储在客户端中 - 存储使用的键值对结构进行的存储 - 特性: - 支持过期时间 - 默认会自动携带本网站的所有cookie - 根据域名进行cookie存储 - 不能跨域名 - 不能跨浏览器 - cookie是通过服务器创建的response来创建的 设置cookie: - response.set_cookie(key, valuep[,max_age=None,exprise=None]) - max_age:整数,指定cookie过期的时间 - expries:整数,指定过期时间,可以指定一个具体日期时间 - max_age和expries两个选一个指定
获取cookie:
request.cookies.get(key)
删除cookie:
response.delete_cookie(key)
案例:
__init__.py
#__init__.py: 初始化文件、用来创建flask应用 from flask import Flask from .views import blue #蓝图 def create_app(): app = Flask(__name__) #创建flask应用 #注册蓝图 app.register_blueprint(blueprint=blue) return app
app.py
from App import create_app app = create_app() if __name__ == '__main__': app.run(debug=True)
views.py
# 路由 + 视图函数 import datetime from flask import request, redirect from flask import Blueprint, render_template # from models import * #蓝图 # 创建蓝图对象 # 第一个参数:蓝图的名字 # 第二个参数:蓝图的包名 blue = Blueprint('user', __name__,) #首页 @blue.route('/') # 路由 @blue.route('/home/') def home(): #4.获取cookie # 这里的user 是保存到cookie中的变量名,如果不一样或是不存在就无法获取 username = request.cookies.get('user') return render_template('home.html', username=username) #登录页面 @blue.route('/login/', methods=['GET', 'POST']) def login(): # 判断请求方式、如果是get请求,则返回登录页面 if request.method == 'GET': return render_template('login.html') # 如果是post请求,则进行登录操作 elif request.method == 'POST': pass #1. 获取前端提交的数据 username = request.form.get('username') #post提交使用form、这里的username要和html中的name属性一致 password = request.form.get('password') #这里的password要和html中的name属性一致 #2. 实现登录功能, 验证账号密码是否正确 if username == 'xiaoxin' and password == '123456': #登录成功、跳转到首页 response = redirect('/home/') # 3.设置cookie # cookie中不能用中文 # response.set_cookie('user', username) 默认浏览器关闭则cookie失效 #过期时间: # max_age: 秒 # 7天 # expires: 指定日期 # response.set_cookie('user', username, max_age=3600*24*7) response.set_cookie('user', username, expires=datetime.datetime(2025, 7, 9)) return response else: return '登录失败,用户名或密码错误' # 注销 @blue.route('/logout/') def logout(): #先跳转到首页(刷新) response = redirect('/home/') # 5.选择要删除的cookie response.delete_cookie('user') return response
home.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h2>首页</h2> <hr> {% if username %} <p>你已经登录了,欢迎你:{{ username }}</p> <a href="/logout/">注销</a> {% else %} {#跳转到登录页面,注意这里要从后端路由去跳转#} <a href="/login/">登录</a> {% endif %} </body> </html>
login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <h2>登录</h2> <hr> {#登录表单#} {# <form action="" method="post">#} {# <form action="{{ url_for('user.login') }}" method="post">#} <form action="/login/" method="post"> <p>用户名:<input type="text" name="username"></p> <p>密码:<input type="password" name="password"></p> <p><input type="submit" value="登录"></p> </form> </body> </html>
本文作者:little小新
本文链接:https://www.cnblogs.com/littlecc/p/18288638
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步