10、flask-会话-session

news/2024/10/6 4:22:33/文章来源:https://www.cnblogs.com/littlecc/p/18288749

session会话

是一种服务器端的会话技术、依赖于cookie
特点:
- 服务端的会话技术
- 所有数据存储在服务器中
- 默认存储在内存中
- 存储结构也是key-value形式的键值对
- session是离不开cookie的Flask中的session是全局对象常用操作:
- 设置seesion:- seesion['key'] = value
- 获取seesion:- seesion.get(key, default=None)    #根据键获取会话的值
- 删除seesion:- session.pop(key) 删除某一个值- session.clear()    清除所有的sessioncookie与session的区别:
- cookie- 在浏览器存储- 安全性较低- 可以减轻服务器压力
- seesion:- 在服务器段存储- 安全性高- 对服务器要求较高- 依赖cookie

 

__init__.py

 

#__init__.py: 初始化文件、用来创建flask应用
import datetimefrom 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 datetimefrom flask import request, redirect, sessionfrom flask import Blueprint, render_template
# from models import *#蓝图
# 创建蓝图对象
# 第一个参数:蓝图的名字
# 第二个参数:蓝图的包名
blue = Blueprint('user', __name__,)#首页
@blue.route('/')        # 路由
@blue.route('/home/')
def home():# 获取sessionusername = 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/')# 设置sessionsession['user'] = usernamesession.permanent = True    # 设置session的过期时间, 默认是31天、如果__init__.py中设置过,则这里可以不用设置return responseelse:return '登录失败,用户名或密码错误'# 注销
@blue.route('/logout/')
def logout():#先跳转到首页(刷新)response = redirect('/home/')# 删除sessionsession.pop('user')# session.clear()   #清除所有的sessionreturn 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_appapp = create_app()if __name__ == '__main__':app.run(debug=True)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/739857.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AtCoder Beginner Contest 361

AtCoder Beginner Contest 361 A - Insert给定一个长度为\(N\)的序列\(A\),现在希望将数字\(X\)插入到序列的第\(K\)个数字后面,变成一个新的序列\(B\)。输出序列\(B\)。 \(K,N,A_i,X\le 100\)模拟题。先读入\(N,K,X\)。接着在读入\(A\)的过程中一遍读入一遍输出,如果读到了…

2024暑假第一周总结

JAVA开发环境搭建和HelloWorld编译 1、JDK安装(java开发环境安装) 更改环境变量 Path环境变量 Path环境变量用于记住程序路径,方面在命令行窗口的任意目录启动程序 老版本的jdk需要进行配置环境变量,将jdk和bin包路径复制,新建path路径 Java_home环境变量 告诉操作系统JDK…

前端取唯一标识 UUID

// 使用工具 fingerprintjs 可以简单取到UUID1 <!DOCTYPE html>2 <html lang="en">3 4 <head>5 <meta charset="UTF-8">6 <meta http-equiv="X-UA-Compatible" content="IE=edge">7 <meta nam…

srpingboot 自定义 start

自动配置工程绑定配置文件,上逼格的 start 都支持自定义配置,我们也装像点~~ @ConfigurationProperties("cyrus.hello") public class CyrusHelloProperties {// 绑定配置文件 cyrus.hello.username 属性private String username;public String getUsername() {re…

Spring 配置文件加密

前文 在某些场景下,使用 Spring 作为开发组件时,不可避免地需要使用到配置文件,然而,对于配置文件中的某些敏感数据(如密码等信息字段),如果使用明文的方式,则可能在一定程度上导致信息泄露。为此,需要一种有效的方式来对这些字段进行加密处理,当前主流的一种加密方式…

博客搭建-图床篇

我们的博客难免少不了图片,图片管理是一个不小的难题。我们的博客难免少不了图片,图片管理是一个不小的难题。如果我们将图片全部放到我们自己的服务器上,那么带宽就基本上会被图片所占满了,这会导致网站加载很慢(特别是图片加载很慢)。 ‍ 什么是图床 为了解决图片的问题…

FPGA以太网学习-RGMII与GMII

以太网口都叫RJ45接口,从功能角度说,网口只是信号连接,本身没有通信能力。PHY(物理层),这边需要一个芯片,将并行的以太网数据到符合以太网物理层链路数据传输格式的电平信号转换。 上图PHY右边是经过编码后的串行数据信号,左侧是提供多种并行信号。网络变压器连接串行信…

网络通信系统的voronoi图显示与能耗分析matlab仿真

1.程序功能描述两层基站(BS)组成整个通讯网络,第 1 层为 Macro 基站记为 ,第 2 层为 Micro 基站记为 ,均服从泊松分布,相互独立,在坐标为 1010km 的面积内、按照泊松分布随机生成若干个点(随机抛洒两遍 nodes,两层叠加起来)。然后画成 voronoi 图: 也就是在相邻两个…

Django详细笔记

django 学习 特点快速开发 安全性高 可伸缩性强URL 组成部分 URL: 同意资源定位符 一个URL由以下几部分组成 scheme://host:port/path/?query-string=xxx#anchorscheme: 代表的是访问的协议,一般为http或https协议 host: 主机名,域名 port: 端口 http 默认:80端口 …

关于虚拟机的使用

1、从网上下载了Centos7 2024年CentOS镜像下载地址,包括CentOS官网、国内镜像下载,超详细教学,小白也能学会。-CSDN博客 2、通过VMware添加了该iso文件,打开虚拟机之后安装该系统就可以了 3、进入之后我们需要进行软件安装、安装位置、KDUMP、网络和主机名的修改操作其中,…

LSTUR论文阅读笔记

Neural News Recommendation with Long- and Short-term User Representations论文阅读笔记 这个同样是一篇很老但是比较经典的文章,这里来读一下 Abstract 存在的问题: ​ 用户通常既有长期偏好,也有短期兴趣。然而,现有的新闻推荐方法通常只学习用户的单一表征,这可能是…

实战篇——文件包含漏洞一

实战篇——文件包含漏洞(1) 本地文件包含 本地文件包含一般需要依赖文件上传漏洞。如果文件上传漏洞限制上传文件的后缀必须为.jpg,那么配合本地文件包含,就可以通过上传图片木马获得服务器权限。 上传图片木马:利用本地文件包含,成功连接一句话木马:可见本地文件包含最大…