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

常见的请求方式

  • 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_agecookie的过期时间,值为秒数
expirescookie的过期时间,值为 datetime对象 或 unix时间戳
path将 cookie 限制为给定路径生效,默认为所有路径
domaincookie 生效的域名
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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值