10、flask-会话-session
session会话
是一种服务器端的会话技术、依赖于cookie 特点: - 服务端的会话技术 - 所有数据存储在服务器中 - 默认存储在内存中 - 存储结构也是key-value形式的键值对 - session是离不开cookie的 Flask中的session是全局对象 常用操作: - 设置seesion: - seesion['key'] = value - 获取seesion: - seesion.get(key, default=None) #根据键获取会话的值 - 删除seesion: - session.pop(key) 删除某一个值 - session.clear() 清除所有的session cookie与session的区别: - cookie - 在浏览器存储 - 安全性较低 - 可以减轻服务器压力 - seesion: - 在服务器段存储 - 安全性高 - 对服务器要求较高 - 依赖cookie
__init__.py
#__init__.py: 初始化文件、用来创建flask应用 import datetime from flask import Flask from .views import blue #蓝图 def create_app(): app = Flask(__name__) #创建flask应用 #注册蓝图 app.register_blueprint(blueprint=blue) # session配置 print(app.config) ''' <Config {' DEBUG': False, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 'SECRET_KEY': None, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'USE_X_SENDFILE': False, 'SERVER_NAME': None, 'APPLICATION_ROOT': '/', 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': None, 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'TEMPLATES_AUTO_RELOAD': None, 'MAX_COOKIE_SIZE': 4093}> ''' # session配置 # SECRET_KEY: session加密的密钥 将aa123456作为密钥 app.config['SECRET_KEY'] = 'aa123456' app.config['PERMANENT_SESSION_LIFETIME'] = datetime.timedelta(days=8) #session过期时间 return app
views.py
# 路由 + 视图函数 import datetime from flask import request, redirect, session from flask import Blueprint, render_template # from models import * #蓝图 # 创建蓝图对象 # 第一个参数:蓝图的名字 # 第二个参数:蓝图的包名 blue = Blueprint('user', __name__,) #首页 @blue.route('/') # 路由 @blue.route('/home/') def home(): # 获取session username = session.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/') # 设置session session['user'] = username session.permanent = True # 设置session的过期时间, 默认是31天、如果__init__.py中设置过,则这里可以不用设置 return response else: return '登录失败,用户名或密码错误' # 注销 @blue.route('/logout/') def logout(): #先跳转到首页(刷新) response = redirect('/home/') # 删除session session.pop('user') # session.clear() #清除所有的session 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>
app.py
from App import create_app app = create_app() if __name__ == '__main__': app.run(debug=True)
本文作者:little小新
本文链接:https://www.cnblogs.com/littlecc/p/18288749
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步