Web框架 Flask 之 请求方式 & 会话

2023-11-04

常见的请求方式

  • GET : 页面的默认请求方式,请求的数据是以明文的形式放在路由上面,以 ? 开头的键值对,中间以 & 连接多个参数
  • POST : 请求的数据隐藏发送的,安全系数高,通常用来向服务器提交数据

请求对象

Flask 中由全局对象 request 处理请求,需要使用 from flask import request 导入模块

request 常用属性

属性名 描述
args 获取 get 请求的参数
form 获取 post 请求的参数
method 获取请求的方式 GET or POST
files 获取上传的文件
cookirs 获取 cookie 信息
headers 获取请求头
path 获取 /
host 获取 ip:host
host_url 获取 http://127.0.0.1:5000/
referrer 请求的来源

配置请求

# 配置路由 支持 POST 及 GET 请求 (默认仅支持 GET 请求)
@app.route("/",methods=["POST","GET"])
def view():
    # 如果请求方式为 POST
    if request.method == "POST":
        # 获取 POST 方式提交的参数
        data = request.form
    # 如果请求方式为 GET
    elif request.method == "GET":
        # 获取 GET 方式提交的参数
        data = request.args

文件上传

HTML 表单

<form action="/file_upload/" method="POST" enctype="multipart/form-data">
    <input type="file" name="img">
    <input type="submit" value="上传">
</form>

Flask

@app.route("/file_upload/",methods=["POST"])
def file_upload():
    # 获取文件对象
    file = request.files.get("img")
    # 获取文件名
    file_name = file.filename
    # 保存文件
    file.save(f"./{file_name}")

会话

由于 HTTP 协议都是无状态的,即当前请求和上一次请求没有任何的联系,请求者的身份都是匿名的,这样的访问缺乏连续性,导致在一个 WEB 项目中没有办法表示用户的身份,对于 WEB 有很大的制约,基于此出现了会话机制,即 Cookie 和 Session

Cookie

Cookie 是浏览器在请求的时候,由服务器下发,保存在用户的客户端(本地)的一段用于标识身份的小文本

Cookie的出现让浏览器的访问有了连续性,可以有身份的访问,但是也带来了很大的安全隐患,Cookie 很容易被盗用和篡改

(1) 设置 Cookie

在 Flask 中,cookie 设置在响应对象上,使用 make_response() 函数从视图函数的返回值中获取响应对象。之后,使用响应对象的 set_cookie() 函数老存储 cookie

set_cookie(key, value[, max_age, expires, path, domain, secure, httponly])

参数 描述
key 设置的 cookie 中的 key
value 设置的 cookie 中的 value
max_age cookie的过期时间,值为秒数
expires cookie的过期时间,值为 datetime对象 或 unix时间戳
path 将 cookie 限制为给定路径生效,默认为所有路径
domain cookie 生效的域名
secure 如果为 True,则 cookie 仅可通过 https 使用
httponly 如果为 True,则禁止 JavaScript 访问 cookie
from flask import make_response

@app.route("/")
def view():
    resp = make_response(render_template("index.html"))
    resp.set_cookie("username","zong")
    return resp

(2) 获取 Cookie

request.cookies.get("key")

(3) 删除 Cookie

@app.route("/del_cookie/")
def del_cookie():
    rep = make_response("删除 cookie")
    rep.delete_cookie("username")
    return rep

通过观察 Reponse Headers 可以发现,删除 cookie 就是将 cookie 值 置为空,并将过期时间设置为 过去

Set-Cookie: username=; Expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0; Path=/

Session

与 Cookie 不同,session 数据存储在服务器上,安全性有了提高。

session 为每个客户端的会话分配 会话ID,会话数据存储在 cookie 的顶部,服务器以加密方式对其进行签名。对于此加密,Flask程序需要定义一个 SECRET_KEY

特点:

  1. session 依赖 cookie 技术
  2. session本身存储在服务器上边,多数情况下存储在数据库中,频繁校验数据会导致服务器,数据库的压力变大

(1) 设置 Session

from flask import session

# 设置 session SECRET_KEY
app.config["SECRET_KEY"] = "test@0527"

# 添加 session
session['xxx'] = "xxx"

(2) 获取 Session

session['xxx']
session.get('xxx')

(3) 删除 Session

# 删除指定 session
session.pop("xx")

# 清空 session
session.clear()

(4) 设置 session 过期时间

# 如果不设置过期时间,session默认为 浏览器关闭后过期

# 默认过期时间为 31 天
session.permanent = True

# 配置 app.config 修改默认过期时间
from datetime import timedelta
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)
session.permanent = True
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web框架 Flask 之 请求方式 & 会话 的相关文章

随机推荐

  • CodeBlocks 的安装以及编译器的配置

    截止到我安装的今天 Code Blocks的最新版本为16 01 建议官网下载 下载地址http www codeblocks org downloads 下载下来之后是一个可执行文件 然后点击安装就可以了 安装完成之后显示的界面如下 注意
  • unity使用PhotonEngine实现多人联机游戏开发(一)

    unity使用PhotonEngine实现多人联机游戏开发 一 先来了解一下PhotonEngine 光子引擎 这是德国ExitGame公司开发的网络引擎 photonengine简单易上手 很多游戏公司开发的网络游戏都是使用的这个 这个网
  • 记录springboot+vue+fastdfs实现简易的文件(上传、下载、删除、预览)操作

    前言说明 springboot vue FastDFS实现文件上传 支持预览 升级版 FASTDFS部分 FASTDFS安装过程 基于centos 7安装FastDFS文件服务器 SpringBoot部分 springboot源码实现 pa
  • 何以解忧,唯有程序员硬核段子

    大家好 我是五月 前言 程序员应该是最喜欢自黑的职业了 因为黑程序员这个门槛有点高 外行人根本黑不到点子上 程序员们看不下去了 只好提起裤子自己上了 而且程序员的段子大多比较硬核 一般人可能会有点难以理解其笑点 下面找了几个程序员专属的段子
  • RDP远程桌面协议

    1 概况 目前常用的远程桌面协议有VNC SPICE RDP三种 2 RDP Remote Desktop Protocol 远程桌面协议 是一个多通道 multi channel 的协议 让用户 客户端或称 本地电脑 连上提供微软终端机服
  • IT网络时代文章读后感2011年3月10日星期四 晴 【大明原创,转载必须标明出处】

    我宿舍规矩开学来的第一天基本都是座谈会 是坐在一起说说各自的新鲜事 和老金侃侃而谈说点保定的新鲜事 和晨阳吹吹牛 和小新说说家里的热闹事 和老刘交流一下NBA赛事 和小白调侃一下 逗乐一下 然后就是老金和晨阳说起了网络游戏情节 就表示散会了
  • taro发版的时候,微信提示wx.getLocation 接口未配置在app.json文件中

    如何解决这个问题呢 taro的开发者找到app config ts文件 原生小程序的开发者找到app json文件就可以 uinapp的开发这找到manifest json文件 找到文件了以后呢 在window的同级添加requiredPr
  • 什么都不懂的人怎么样可以建立自己的网站

    网站建设教程 新手如何自己建网站 很多从来没有做过网站的新手都很想知道 如何建设自己的网站 需要准备什么 步骤有哪些 在讲解之前 需要先明白网站主要由什么组成 一个完整的网站必须具备三元素 域名 网站空间 服务器 网站程序 域名就是网址 空
  • 牛逼了,这21款游戏项目,只一行代码即可上手—开玩【附源码】

    导语 随着时代的不同 社会的改变 伴随着一起长大的游戏 逐渐淡出我们的视线 却一直铭刻在我们心中 还记得你小时候都玩过什么游戏吗 超级玛丽 坦克大战 魂斗罗 贪吃蛇 植物大战僵尸 咳咳咳 有点儿暴露年龄了哈 今天就分享一个私藏的项目 fre
  • JS判断时间上传格式

    MimeType 文件类型 application msword word doc application vnd ms powerpoint powerpoint ppt application vnd ms excel
  • 链表——一种线性数据结构

    链表 链表中的每个元素实际上是一个单独的对象 而所有对象都通过每个元素中的引用字段链接在一起 线性数据结构 与数组一样 链表也是线性数据结构 他们的区别在于存储方式不同 顺序存储结构 数组 快速的存和取 逻辑上相邻 物理上也相邻 链式存储结
  • 深入leveldb-初步认识leveldb

    文章参考http blog chinaunix net uid 26575352 id 3245476 html 1 leveldb简介 leveldb是google两位工程师实现的单机版k v存储系统 具有以下几个特点 1 key和val
  • 数组环形队列(FIFO)

    数组环形队列 FIFO 一 说明 环形队列的关键是判断队列为空 还是为满 当tail追上head时 队列为满 当head追上tail时 队列为空 二 代码实现 define ElemType uint8 t 定义数据类型 define Qu
  • python的小作业

    目录 python安装 2 打印0 100 遇到19的时候跳出循环 3 只打印90以内的奇数 4 对发送邮件代码进行修改 换成自己的邮箱并截图保存 5 对指导书中海龟画图和TCP UDP的案例进行学习并运行结果 python小项目 pyth
  • 高德地图-根据IP定位显示当前所在城市

    1 绘制地图 构造参数中的container为添加的地图容器的id let map new AMap Map container 2 IP定位 高德地图定位文档 自建图层 参考手册 地图 JS API 高德地图API 创建AMap Map对
  • ARCore:ARCore开发的起步

    已经是第7章节了 终于可以开始正式接触到我们梦寐以求的ARCore了 相信大家应该都有一点点小激动了吧 那么下面我们就开始讲解如何进行ARCore的开发 一 Session简介 初看到Session 大家都摸不到头脑 最直接的解释 它是AR
  • ChatGPT实用用法10大场景

    之前的文章中 我们提到了ChatGPT的一些局限性 比如它会一本正经地胡说八道 所以如果使用方法不对 反而会耽误时间甚至被误导 但要是用对了 真的会事半功倍 让我们褪去ChatGPT无所不知无所不能的光环 看看现阶段的它有哪些靠谱的用法吧
  • java jar 创建_java生成jar包

    Java编写的application程序是否可以终于形成一个类似于exe一样的可执行文件 难道就仅仅能用命令行执行 通常有两种 一种是制作一个可运行的JAR文件包 然后就能够像 chm文档一样双击运行了 而还有一种是使用JET来进行编译 可
  • 2014百度校招笔试

    1 ISO七层说明 2 用百度地图查询 百度大厦 到 北京大学 得到路线不太稳定是怎么回事 分析可能的原因 测试开发唯一区别于软件开发的一题 3 TCP UDP协议的区别 举出上一层的应用协议 二 算法 1 写出a0 a1 a2 an的所有
  • Web框架 Flask 之 请求方式 & 会话

    常见的请求方式 GET 页面的默认请求方式 请求的数据是以明文的形式放在路由上面 以 开头的键值对 中间以 连接多个参数 POST 请求的数据隐藏发送的 安全系数高 通常用来向服务器提交数据 请求对象 Flask 中由全局对象 reques