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_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
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-21 11:33
昨天是学校最后一场招聘会,鼠鼠去参加了,全场只有一个招聘java的岗位,上来先做一份笔试题,做完后他拿张纸对答案,然后开始问简历上的问题,深圳小厂,6-8k(题目如下),后面还有两轮面试。然后我就在招聘现场逛呀逛,看到有公司招聘电商运营,给的比上年的小厂还多,鼠鼠就去了解了下,然后hr跟鼠鼠要了份简历,虽然我的简历上面全是求职Java开发相关的内容,但是hr还是鼓励我说没关系,她帮我把简历给老板看看,下周一会给我通知。招聘会结束后鼠鼠想了一段时间,也和朋友聊了聊,发现我可能是不太适合这个方向,然后就跟爸爸说回家了给我发条微信,我有些话想跟他说说。晚上爸爸到家了,跟我发了条微信,我立马跑出图书馆跟他打起了电话,这个通话长达一个小时,主要是跟爸爸坦白说我不想找这行了,是你的儿子太没用了,想试试其他行业。然后爸爸也跟我说了很多,说他从来没有希望我毕业后就赚大钱的想法,找不到就回家去,回家了再慢慢找,实在找不到就跟他干(帮别人装修房子,个体户),他也知道工作不好找,让我不要那么焦虑,然后就是聊一些家常琐事。对于后面的求职者呢我有点建议想提一下,就是如果招实习的时间或者秋招开始,而你的简历又很差的情况下,不要说等做好项目填充完简历之后再投,那样就太晚了,建议先把熟悉的项目写上简历,然后边投边面边完善,求职是一个人进步的过程,本来就比别人慢,等到一切都准备好后再投岂不是黄花菜都凉了。时间够的话还是建议敲一遍代码,因为那样能让你加深一下对项目的理解,上面那些说法只是针对时间不够的情况。当然,这些建议可能没啥用,因为我只是一个loser,这些全是建立在我理想的情况下,有没有用还需其他人现身说法。上篇帖子没想到学校被人认了出来,为了不丢脸只能匿名处理了。
KPLACE:找研发类或技术类,主要还是要1.多投 2.多做准备,很多方面都要做准备 3.要有心理准备,投累了就休息一两天,再继续,要相信自己能找到
投递58到家等公司7个岗位
点赞 评论 收藏
分享
05-22 09:23
门头沟学院 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-16 12:18
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务