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_appapp = create_app()if __name__ == '__main__':app.run(debug=True)
views.py
# 路由 + 视图函数
import datetimefrom flask import request, redirectfrom 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 responseelse:return '登录失败,用户名或密码错误'# 注销
@blue.route('/logout/')
def logout():#先跳转到首页(刷新)response = redirect('/home/')# 5.选择要删除的cookieresponse.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>