首页 > 编程语言 >巨蟒python全栈开发flask1

巨蟒python全栈开发flask1

时间:2022-11-14 12:31:26浏览次数:39  
标签:下面 上边 结果 python request flask1 Flask 全栈 我们

  1.整体把握

(1)路飞学城 - RestAPI 前后端分离开发 Django
Vue.js - DRF DjangoRestFromwork - 线上商城的经验

(2)智能玩具 - RestAPI 前后端分离开发 Flask
FlaskWeb框架 - Sanic Python asyncio
WebSocket - 长连接
App开发 - Android + iOS
MongoDB - NoSQL
人工智能 - 技术应用
机器学习 - Gensim
自然语言处理 - NLP

(3)自动化运维 - Django
运维 -> 自动化

2.框架对比

Django :
优点 - 大而全所有组件都是有组织内部开发高度定制化 教科书级别的框架
缺点 - 大到浪费资源,请求的时候需要的资源较高

Flask ;
优势 - 小而精,组件只有Session,第三方机构强烈支持Flask,非常多的三方组件 简单至极
缺陷 - 由于三方组件的关系 稳定性相对较差 Flask-Session

Tornado :
优势 - 异步IO 非阻塞 原生WebSocket
缺陷 - 组件 == 0 关于异步的不好理解 Debug难上加难

Sanic :
优势 - 异步IO 非阻塞 原生WebSocket + 小而精,组件只有Session,第三方机构强烈支持Flask,非常多的三方组件
缺陷 - 复杂度

扩展知识:
QPS = 请求每秒钟的次数 QPS == 10
时间片 cpu 工作一次的时间单位
py 假线程 - 1个核心
真线程 - 4个核心 - 四个线程

首先,我们进入虚拟环境,virtual代表组件env代表环境,注意下图的选择内容

巨蟒python全栈开发flask1_json

进入下图,看一下选择的内容

巨蟒python全栈开发flask1_数据_02

巨蟒python全栈开发flask1_json_03

进入settings.py中,进行处理

巨蟒python全栈开发flask1_数据_04

安装一下上图中的flask.

装完之后的内容,见下图

巨蟒python全栈开发flask1_数据_05

 

 

3.Flask简单启动

三行启动Flask
from flask import Flask
app = Flask(__name__)
app.run()

六行启动Flask Hello
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "hello"
app.run()

 

巨蟒python全栈开发flask1_数据_06

成功访问,见下图

巨蟒python全栈开发flask1_数据_07

我们就使用"干净的环境变量就可以了"

巨蟒python全栈开发flask1_json_08

 

六行搞定Hello

 

巨蟒python全栈开发flask1_flask_09

巨蟒python全栈开发flask1_flask_10

 

 

4.Flask响应

Response三贱客:
1.HTTPResponse return "hello"
2.render return render_template("login.html")
3.redircet return redircet("/login")
Flask 封装
4.send_file() return send_file("文件路径")
打开并返回文件内容 确定会在响应头中加入 Content-Type:文件格式 + Content-Length:文件大小(bytes)
5.jsonify({k:v}) return jsonify({k:v})
返回一个客户端可以识别的json格式字符串 确定会在响应头中加入 Content-Type:application/json

 

巨蟒python全栈开发flask1_json_11

巨蟒python全栈开发flask1_json_12

 

 send_file

巨蟒python全栈开发flask1_flask_13

巨蟒python全栈开发flask1_flask_14

巨蟒python全栈开发flask1_数据_15

上图是返回的是文本文件的内容.也就是三行启动flask

我们查看到生成的是下图这样的html

巨蟒python全栈开发flask1_flask_16

 我们可以返回文本文件当然可以访问二进制文件,什么是二进制文件?图片,视频,音频等等

 

同样可以处理二进制文件,音频,图片,视频

 下面,我们从网上照一张图片"煎蛋"

 

巨蟒python全栈开发flask1_数据_17

保存,下图的图片

巨蟒python全栈开发flask1_flask_18

 复制到下图的pycharm中

 

巨蟒python全栈开发flask1_数据_19

巨蟒python全栈开发flask1_数据_20

重启代码:

巨蟒python全栈开发flask1_flask_21

我们再看一下路由:

巨蟒python全栈开发flask1_flask_22

巨蟒python全栈开发flask1_数据_23

可能,不代表所有的都会支持.

巨蟒python全栈开发flask1_数据_24

这个时候,我们再看一下请求:

 

巨蟒python全栈开发flask1_数据_25

巨蟒python全栈开发flask1_数据_26

巨蟒python全栈开发flask1_数据_27

巨蟒python全栈开发flask1_flask_28

这个时候,我们可以访问视频了.

出现多个get_file是因为数据接收不完,所以出现了这个现象.

巨蟒python全栈开发flask1_json_29

巨蟒python全栈开发flask1_json_30

通过上面的三次测试,我们确定了,

巨蟒python全栈开发flask1_flask_31

下面介绍一下jsonify

首先导入jsonify

巨蟒python全栈开发flask1_flask_32

 小的测试示例

 

巨蟒python全栈开发flask1_数据_33

运行,看一下结果:

巨蟒python全栈开发flask1_数据_34

下面,我们对比一下json&&jsonify的用法内容

 

巨蟒python全栈开发flask1_数据_35

运行:

巨蟒python全栈开发flask1_数据_36

 

巨蟒python全栈开发flask1_json_37

注意这个content-Type响应的结果是text/html;charset=utf-8   结果是字符串

巨蟒python全栈开发flask1_flask_38

巨蟒python全栈开发flask1_json_39

 注意这个content-Type响应的结果是application/json

返回上边的结果的意义.

下面我们朝向ajax方向思考,先下载一个jQuery

巨蟒python全栈开发flask1_数据_40

巨蟒python全栈开发flask1_数据_41

右键,链接另存为,得到的结果见下图:

巨蟒python全栈开发flask1_flask_42

下面,我们写一个页面,写一下

 

巨蟒python全栈开发flask1_数据_43

下面我们看一下能不能加载成功:

巨蟒python全栈开发flask1_json_44

上图,我们可以看到,已经加载成功了.

巨蟒python全栈开发flask1_json_45

我们也可以直接拿到这个静态文件,见下图

巨蟒python全栈开发flask1_flask_46

 

 

巨蟒python全栈开发flask1_json_47

我们再放一张图片在静态文件里边:

巨蟒python全栈开发flask1_flask_48

我们不用重启,直接访问的结果,见下图:

巨蟒python全栈开发flask1_flask_49

上边的背景也是黑色,也是jsonify

巨蟒python全栈开发flask1_数据_50

下面我们学习ajax的简写版只需要四个参数:

巨蟒python全栈开发flask1_flask_51

现在,我们需要向某个地方发送请求:

巨蟒python全栈开发flask1_json_52

运行:得到下面的错误  405(METHOD NOT ALLOWED)

巨蟒python全栈开发flask1_flask_53

巨蟒python全栈开发flask1_数据_54

百度405错误,因为没有见过:

巨蟒python全栈开发flask1_数据_55

http的8种请求方式:

 我们理解的是后端没有支持,因此,我们需要在后端加上方法,具体看下图:

巨蟒python全栈开发flask1_json_56

这个时候,我们再次启动,得到下面的结果:

巨蟒python全栈开发flask1_flask_57

下面我们再写一个p标签

 

巨蟒python全栈开发flask1_flask_58

返回的结果1:

巨蟒python全栈开发flask1_数据_59

修改下面的内容:

巨蟒python全栈开发flask1_数据_60

 

巨蟒python全栈开发flask1_flask_61

重启,返回的结果2:

巨蟒python全栈开发flask1_json_62

 

 我们再次换成jsonify

 

巨蟒python全栈开发flask1_数据_63

重启,再运行,这个时候返回的结果见下图:

巨蟒python全栈开发flask1_数据_64

巨蟒python全栈开发flask1_json_65

如果,我们访问的是json,下图是:

巨蟒python全栈开发flask1_flask_66

json显示的效果可能会好一些,但是这里边,我们需要找到的是json

巨蟒python全栈开发flask1_flask_67

这个时候,我们根本就没有办法通过字符串找到对应的msg

巨蟒python全栈开发flask1_json_68

巨蟒python全栈开发flask1_json_69

如果,我们序列化成jsonify,看一下msg

巨蟒python全栈开发flask1_json_70

通过中间的某种协议沟通

 

0代表成功,1代表失败

如果前端没有写到,我们可以在jsonify写一个空值.

巨蟒python全栈开发flask1_数据_71

前端,我们通过alert返回

巨蟒python全栈开发flask1_json_72

重启项目:

这个时候,出现了弹窗:

巨蟒python全栈开发flask1_数据_73

 

 我们需要将需要的结果进行返回,这就是后端要干的事情,前端需要显示出来.

4.send_file()   return send_file("文件路径") 
打开并返回文件内容 确定会在响应头中加入 Content-Type:文件格式 + Content-Length:文件大小(bytes)
5.jsonify({k:v}) return jsonify({k:v})
返回一个客户端可以识别的json格式字符串 确定会在响应头中加入 Content-Type:application/json

扩展  RestAPI-请求响应为json-请求支持的协议为http 8种请求
GET POST PUT DELETE OPTIONS//head trace
查  增 改 删

对应的CBV---原生  RestAPI

class

def   post    增

def   delete    删

def   put      改

def   get    查

 def   options  跨域请求

 

最后两个方法的作用,解决后端传递文件的不便利

jsonify解决json响应不成功的问题

注意,jsonify也可以修改头,Content-Type: laoayi/woaini

大前提,前端必须支持

 

5.Flask Request

比较特殊
from flask import request #公共变量
# 公共变量 被覆盖?不会(第四天)
1.request.args 获取URL中的数据
2.request.form 获取FormData中的数据
3.request.values 获取args+form 知道就可以了
4.request.data 流 # 获取请求体中的原始数据
5.request.json 字典 # 请求头中带有Content-Type:application/json 将请求体中的数据反序列化到json中 但是在data中依然存储这原始数据bytes

6.request.files 获取FormData中的文件数据 request.files.get("my_file")
request.files.save(默认提交的文件名)

记住:request.method

 后端只能响应请求,所以先讲响应,再讲请求.

首先,我们导入request

巨蟒python全栈开发flask1_json_74

我们看到源码中写的是公共变量:

巨蟒python全栈开发flask1_flask_75

 

 

巨蟒python全栈开发flask1_数据_76

运行:

访问根目录:

巨蟒python全栈开发flask1_json_77

服务端成功,打印出GET

巨蟒python全栈开发flask1_json_78

 

 

巨蟒python全栈开发flask1_flask_79

运行:

巨蟒python全栈开发flask1_json_80

 

巨蟒python全栈开发flask1_json_81

巨蟒python全栈开发flask1_flask_82

运行:

巨蟒python全栈开发flask1_json_83

 服务端得到下面的结果:

巨蟒python全栈开发flask1_flask_84

巨蟒python全栈开发flask1_数据_85

运行:前端返回66666

巨蟒python全栈开发flask1_flask_86

后端返回下图所示:

 

巨蟒python全栈开发flask1_数据_87

如何拿到,下图中的id=1    ???

巨蟒python全栈开发flask1_数据_88

巨蟒python全栈开发flask1_json_89

运行,试一下前端的结果:

巨蟒python全栈开发flask1_flask_90

后端得到的结果:

巨蟒python全栈开发flask1_数据_91

request没有这个属性,我们可以打印一下args

巨蟒python全栈开发flask1_json_92

运行:

巨蟒python全栈开发flask1_json_93

 

 

巨蟒python全栈开发flask1_json_94

上边符合字典的规则,我们可以通过get拿一下

巨蟒python全栈开发flask1_数据_95

顺便,因为重启太麻烦,我们可以配置一下那个自动重启

自动重启的配置方式一:

巨蟒python全栈开发flask1_flask_96

方式二:(注释掉上边的那个)

巨蟒python全栈开发flask1_数据_97

巨蟒python全栈开发flask1_数据_98

 

 注意上边的访问参数:

巨蟒python全栈开发flask1_flask_99

上图是我们得到的结果

巨蟒python全栈开发flask1_flask_100

 

 

 

巨蟒python全栈开发flask1_flask_101

 

巨蟒python全栈开发flask1_数据_102

思考一下,能不能把字典进行序列化一下?

巨蟒python全栈开发flask1_json_103

运行:

巨蟒python全栈开发flask1_json_104

真的将结果序列化成字典了

巨蟒python全栈开发flask1_数据_105

再看一下类型

巨蟒python全栈开发flask1_json_106

运行:

巨蟒python全栈开发flask1_数据_107

巨蟒python全栈开发flask1_数据_108

我们再通过转化成字典的方式,再拿值

巨蟒python全栈开发flask1_json_109

运行:

巨蟒python全栈开发flask1_json_110

 

 得到的结果,成功拿到:

巨蟒python全栈开发flask1_数据_111

如果写成ages

巨蟒python全栈开发flask1_flask_112

巨蟒python全栈开发flask1_json_113

报错:KeyError错误

从字典中取值的两种方式:索引取值,get方式取值,get取值可以默认是None,也可以设置默认值.索引取值的方式是keyerror

 

 

巨蟒python全栈开发flask1_数据_114

写一个form表单

运行:(将上边的s去掉)

巨蟒python全栈开发flask1_json_115

 

巨蟒python全栈开发flask1_数据_116

输入123,点击"提交",结果报405的错误

巨蟒python全栈开发flask1_flask_117

这个时候,我们需要添加两种请求的方式:

巨蟒python全栈开发flask1_flask_118

运行:

巨蟒python全栈开发flask1_flask_119

这个时候,我们提交数据就不会报错了.

目前我们只支持两种请求:下面我们开始继续操作

测试一下是否有POST请求:

巨蟒python全栈开发flask1_数据_120

 

 

巨蟒python全栈开发flask1_json_121

输入123,提交

得到下面的结果:

巨蟒python全栈开发flask1_flask_122

 

没有post

修改成下面的样子:

巨蟒python全栈开发flask1_flask_123

运行之后,输入345,点击"提交"

巨蟒python全栈开发flask1_数据_124

巨蟒python全栈开发flask1_json_125

我们并没有得到任何数据:

巨蟒python全栈开发flask1_数据_126

 

巨蟒python全栈开发flask1_数据_127

巨蟒python全栈开发flask1_json_128

巨蟒python全栈开发flask1_数据_129

还是没有数据

巨蟒python全栈开发flask1_json_130

巨蟒python全栈开发flask1_数据_131

巨蟒python全栈开发flask1_json_132

依然没有

巨蟒python全栈开发flask1_数据_133

巨蟒python全栈开发flask1_json_134

巨蟒python全栈开发flask1_flask_135

得到上边的结果

 通过上边,我们知道values优点特殊,下面我们在处理一下

巨蟒python全栈开发flask1_flask_136

运行:

访问下面的地址

巨蟒python全栈开发flask1_flask_137

巨蟒python全栈开发flask1_json_138

提交之后得到的结果:

巨蟒python全栈开发flask1_json_139

得到的结果:(服务端得到的结果:)

巨蟒python全栈开发flask1_json_140

 

巨蟒python全栈开发flask1_flask_141

输入123,点击提交

 

 

巨蟒python全栈开发flask1_数据_142

这个时候,我们可以拿到123

巨蟒python全栈开发flask1_json_143

 

 

巨蟒python全栈开发flask1_flask_144

将上边转化成字典

巨蟒python全栈开发flask1_数据_145

点击"提交"

 

巨蟒python全栈开发flask1_数据_146

巨蟒python全栈开发flask1_数据_147

 

 

巨蟒python全栈开发flask1_flask_148

点击"提交"

巨蟒python全栈开发flask1_json_149

 

巨蟒python全栈开发flask1_数据_150

上边,我们得到的是"输入的内容4566"和链接中的键值

原来页面中的内容:

巨蟒python全栈开发flask1_数据_151

现在页面中的内容:

巨蟒python全栈开发flask1_json_152

巨蟒python全栈开发flask1_json_153

点击提交:

巨蟒python全栈开发flask1_数据_154

得到下面的结果:

巨蟒python全栈开发flask1_json_155

也就是先序列化input里边的,再序列化action中的,同时后序列化的会覆盖先序列化的,

values.to_dict()  #知道有这东西就行,一般不用,又不代表用

 专业的叫法叫做FormData数据

4.Flask Request
比较特殊
from flask import request 公共变量
# 公共变量 被覆盖?
1.request.args 获取URL中的数据
2.request.form 获取FormData中的数据
3.request.values 获取args+form 知道就可以了
4.request.data 流 # 获取请求体中的原始数据
5.request.json 字典 # 请求头中带有Content-Type:application/json 将请求体中的数据反序列化到json中 但是在data中依然存储这原始数据bytes

6.request.files 获取FormData中的文件数据 request.files.get("my_file")
request.files.save(默认提交的文件名)

记住:request.method 当前的请求方式

第四个和第五个,

第六,以后还会遇到

巨蟒python全栈开发flask1_数据_156

 

巨蟒python全栈开发flask1_json_157

巨蟒python全栈开发flask1_数据_158

选择完之后:

巨蟒python全栈开发flask1_数据_159

点击提交:

巨蟒python全栈开发flask1_json_160

 

这个时候,得到下面的结果

巨蟒python全栈开发flask1_flask_161

巨蟒python全栈开发flask1_flask_162

巨蟒python全栈开发flask1_数据_163

点击"提交"

 

巨蟒python全栈开发flask1_数据_164

拿到下图所示的结果:

巨蟒python全栈开发flask1_flask_165

 

 

巨蟒python全栈开发flask1_json_166

巨蟒python全栈开发flask1_flask_167

巨蟒python全栈开发flask1_json_168

依然,我们没有拿到任何结果:

巨蟒python全栈开发flask1_数据_169

我们改变一下请求的方式:

巨蟒python全栈开发flask1_数据_170

巨蟒python全栈开发flask1_数据_171

提交

巨蟒python全栈开发flask1_json_172

 

 

enctype="multipart/form-data"  #代表formdata的升级版

巨蟒python全栈开发flask1_json_173

现在得到的数据是序列化之后的数据

巨蟒python全栈开发flask1_json_174

思考,我们现在序列化这个files有意义吗?

巨蟒python全栈开发flask1_数据_175

点击"提交"

巨蟒python全栈开发flask1_flask_176

巨蟒python全栈开发flask1_flask_177

无意义,我们就拿出key

巨蟒python全栈开发flask1_数据_178

巨蟒python全栈开发flask1_json_179

点击“提交",

巨蟒python全栈开发flask1_json_180

 

巨蟒python全栈开发flask1_flask_181

得到上图的结果:

得到上边的结果没有意义,但是存储起来就有意义了

巨蟒python全栈开发flask1_数据_182

运行:

巨蟒python全栈开发flask1_json_183

 

点击"提交"

 

巨蟒python全栈开发flask1_数据_184

 

巨蟒python全栈开发flask1_flask_185

在同一目录下得到这个数据

巨蟒python全栈开发flask1_json_186

注意,再修改一下,新版本一定要写名字.

巨蟒python全栈开发flask1_数据_187

 

 

 点击"提交",

巨蟒python全栈开发flask1_数据_188

巨蟒python全栈开发flask1_json_189

得到上边的结果

 不能修改文件格式.(可以改,但是修改一般没有什么意义)

巨蟒python全栈开发flask1_flask_190

直接刷新:

巨蟒python全栈开发flask1_json_191

这样就将图片保存到静态文件里边;

巨蟒python全栈开发flask1_数据_192

 

 

巨蟒python全栈开发flask1_json_193

提交:

巨蟒python全栈开发flask1_json_194

巨蟒python全栈开发flask1_json_195

这样,我们就得到上边的结果.

 

 

6.Jinja2(爸爸flask用的)-template(儿子django用的)

{{}} 引用 执行函数
{%%} 逻辑代码

 在做之前,我们先找点数据

巨蟒python全栈开发flask1_json_196

 

 

巨蟒python全栈开发flask1_数据_197

添加一个函数

巨蟒python全栈开发flask1_flask_198

创建一个index.html页面:

巨蟒python全栈开发flask1_json_199

巨蟒python全栈开发flask1_flask_200

我们下面对模板做一个备注

 

巨蟒python全栈开发flask1_数据_201

第一次写可能不是这样的,可能是Template Folder

巨蟒python全栈开发flask1_flask_202

巨蟒python全栈开发flask1_数据_203

巨蟒python全栈开发flask1_flask_204

 

在上边,我们选择"Jinja2",这样就不显示黄色下划线了,这样操作之后,我们就支持Jinja2

 包括在python中不显示下划线和在html中jinja2的语法

巨蟒python全栈开发flask1_数据_205

下面我们从python的函数中传递数据到html中.

巨蟒python全栈开发flask1_数据_206

注意,我们传递的是stu,上图中多了一个逗号

巨蟒python全栈开发flask1_json_207

启动,我们看下我们的数据

巨蟒python全栈开发flask1_数据_208

 

显然,我要的不是这样的效果:

 我们可以通过字典进行取值.

下面是三种方式取数据

巨蟒python全栈开发flask1_json_209

运行:得到下面的结果

 

巨蟒python全栈开发flask1_json_210

django中只支持  点

 下面我们在传递一个列表数据

巨蟒python全栈开发flask1_flask_211

巨蟒python全栈开发flask1_flask_212

运行:

巨蟒python全栈开发flask1_json_213

我们可以想办法将它遍历出来

 

 

巨蟒python全栈开发flask1_flask_214

这个位置有点重名,但是作用域不同.

巨蟒python全栈开发flask1_json_215

 

运行:

 

巨蟒python全栈开发flask1_flask_216

如果每组数据换个行,只需要加一个p标签就可以了

巨蟒python全栈开发flask1_数据_217

 

 

巨蟒python全栈开发flask1_flask_218

这样就可以换行了.

如果不想循环怎么办?一个一个吧

巨蟒python全栈开发flask1_数据_219

依然是可以拿数据的

巨蟒python全栈开发flask1_数据_220

运行:

巨蟒python全栈开发flask1_数据_221

巨蟒python全栈开发flask1_flask_222

运行:得到下面的结果

巨蟒python全栈开发flask1_flask_223

jinja2功能多了一些

 

巨蟒python全栈开发flask1_数据_224

巨蟒python全栈开发flask1_flask_225

巨蟒python全栈开发flask1_json_226

这个时候,我们得到上边的结果.

 

巨蟒python全栈开发flask1_flask_227

得到下图所示的结果:

巨蟒python全栈开发flask1_flask_228

在表格中加上边界:

巨蟒python全栈开发flask1_json_229

 

 

巨蟒python全栈开发flask1_flask_230

巨蟒python全栈开发flask1_flask_231

运行:

得到下面的结果:

巨蟒python全栈开发flask1_数据_232

上边有一个性别错误,下面我们进行处理

 

巨蟒python全栈开发flask1_flask_233

巨蟒python全栈开发flask1_json_234

下面进行扩展一下:

{{}} 引用 执行函数
{%%} 逻辑代码 if for macro

对比django中的simple_tag

巨蟒python全栈开发flask1_flask_235

引用函数

在前端执行函数,传参

巨蟒python全栈开发flask1_数据_236

巨蟒python全栈开发flask1_json_237

下面我们进行升级,让所有的页面都能用这个函数

修改成全局模板之后,我们不在需要传递函数

巨蟒python全栈开发flask1_json_238

巨蟒python全栈开发flask1_flask_239

现在,我们直接调用就可以了

巨蟒python全栈开发flask1_数据_240

这个时候,每个页面都可以用了

jinja2中的macro语句,相当于def,也就是定义函数

除了定义函数,我们还需要执行函数

巨蟒python全栈开发flask1_flask_241

 

 

巨蟒python全栈开发flask1_数据_242

这个时候,我们得到上边的结果

巨蟒python全栈开发flask1_json_243

巨蟒python全栈开发flask1_flask_244

这个时候,得到上边的结果

 也就是上边的宏指令

 

巨蟒python全栈开发flask1_数据_245

巨蟒python全栈开发flask1_flask_246

上边这个有点鸡肋的感觉.

只有django是template    高度定制化的东西

其他flask和tornado和sanic都是原生的东西,也就是jinja2

 

 

7.Session   Flask中的Session  flask原生自带的Session,不是第三方组件中的Session

from flask import session
app.secret_key = "序列化Session需要的字符串儿"
在视图函数中
session["key"] = "value"

 

我们通过request的源码找到session

巨蟒python全栈开发flask1_json_247

点击进去,

巨蟒python全栈开发flask1_flask_248

 

 上边的两行代码,特别的相似.

巨蟒python全栈开发flask1_数据_249

巨蟒python全栈开发flask1_flask_250

 

再创建一个login2页面:

巨蟒python全栈开发flask1_json_251

巨蟒python全栈开发flask1_json_252

巨蟒python全栈开发flask1_数据_253

上边我们进行了判断.

巨蟒python全栈开发flask1_json_254

运行:

巨蟒python全栈开发flask1_json_255

输入123

得到下面的界面:

巨蟒python全栈开发flask1_数据_256

 很显然,上边不是我们需要的效果

巨蟒python全栈开发flask1_flask_257

巨蟒python全栈开发flask1_数据_258

运行:输入admin

巨蟒python全栈开发flask1_数据_259

 

 提交之后,显示"错误"

 

巨蟒python全栈开发flask1_flask_260

我们使用正确的密码登录

巨蟒python全栈开发flask1_json_261

 

 得到 结果:

巨蟒python全栈开发flask1_json_262

 

下面我们将输入的session,保存

巨蟒python全栈开发flask1_json_263

 

 

巨蟒python全栈开发flask1_flask_264

 

 点击登录,报下面的错误:

巨蟒python全栈开发flask1_json_265

巨蟒python全栈开发flask1_flask_266

也就是说,在app里边设置一个secret_key

巨蟒python全栈开发flask1_数据_267

这个时候,我们再添加一行这样的信息.

 

 再次运行:

巨蟒python全栈开发flask1_json_268

输入密码,点击"登录"

巨蟒python全栈开发flask1_flask_269

这样,上边我们就登录成功了.

这样就代表我们我们session已经开启了.

我们设置一下,只要定向到index页面,我们就打印session["username"]里边的内容

巨蟒python全栈开发flask1_json_270

再次运行:

巨蟒python全栈开发flask1_json_271

 

 点击"登录"

 

巨蟒python全栈开发flask1_数据_272

巨蟒python全栈开发flask1_flask_273

 

 服务端也就打印出了这个内容.

session存放在哪个地方?内存中?不是,

 

巨蟒python全栈开发flask1_flask_274

这样我们就得到session的位置.存储在浏览器中.

session和cookie是什么,区别是什么?

 通常我们解释的是session存放在服务端的键值对,cookie是存放在浏览器端的键值对.

在flask这里,我们在浏览器中,看到了session,三观改变了,我们看到的是序列化的session.

一切朝着最小化,精细化搞事情,朝着精简的方向搞事情.

flask连数据库都没有,为什么占用我服务端的资源存储客户端的没有用的资源,所以存储在客户端.想办法,将自己的状态自己保持,但是这个时候就不安全了.

 

巨蟒python全栈开发flask1_flask_275

我们是否能够拿到上边的资源在另一台机器上实现登录?答案是否定的.

session是有加密机制的.这里边存储的就是我们的数据

 //eyJ1c2VybmFtZSI6IkFsZXhEU0IifQ.XK9VAg.JLrPbOZk5Urlxzh7mDimPFIE2Uo

//

巨蟒python全栈开发flask1_flask_276

这个时候,我们向这里边多添加几条数据,理论上会变长很多,下面看一下

巨蟒python全栈开发flask1_数据_277

再次运行:点击"登录"

巨蟒python全栈开发flask1_flask_278

 

 //eyJ1c2VybmFtZSI6IkFsZXhEU0IifQ.XK9VAg.JLrPbOZk5Urlxzh7mDimPFIE2Uo

 //.eJyrViotTi3KS8xNVbJScsxJrXAJdlLSgQsaYhU1wipqjCRaCwD6YRwn.XK9XlA.O10ASWENVes-Qtlep4vqZdHudhI

 这个时候我们得到的结果只是长了一点点,再多也是只长一点点

 也就是将一样的值进行了序列化了.所以我们看不出来了.

 

巨蟒python全栈开发flask1_json_279

再次运行:

巨蟒python全栈开发flask1_数据_280

巨蟒python全栈开发flask1_flask_281

 

 //eyJ1c2VybmFtZSI6IkFsZXhEU0IifQ.XK9VAg.JLrPbOZk5Urlxzh7mDimPFIE2Uo

 //.eJyrViotTi3KS8xNVbJScsxJrXAJdlLSgQsaYhU1wipqjCRaCwD6YRwn.XK9XlA.O10ASWENVes-Qtlep4vqZdHudhI

 //.eJyrViotTi3KS8xNVbJScsxJrXAJdlLSgQsaIkRjSs3MjSxiSs1NUpKRVBghqzA1TEzGUGGMrMLC0jwNqqIWAMSlJ7I.XK9Ycw.b4ls6NT-ebmqmxa1-LPhQgkpvNs

 

 得到的结果是:session中一定存放的是key-value,注意安全只是相对的

也就是说加密和解密都需要上边我们设置的字符串.

app.secret_key="secret_key"

 

如果我们修改了这个字符串.

巨蟒python全栈开发flask1_json_282

运行:

只是执行下面的页面得到的结果

巨蟒python全栈开发flask1_flask_283

这个时候session就无效了.

这里边携带了很多的信息,加密机制是个pass.

巨蟒python全栈开发flask1_数据_284

 

 

巨蟒python全栈开发flask1_flask_285

上边是一个装饰器

巨蟒python全栈开发flask1_flask_286

巨蟒python全栈开发flask1_json_287

巨蟒python全栈开发flask1_json_288

写这个装饰器的目的就是加上session

被装饰的函数一定在下面,

 

@classmethod  类方法装饰器

@property    属性装饰器

 

巨蟒python全栈开发flask1_flask_289

当然上边的存储字典是不行的,我们必须存储字符串

巨蟒python全栈开发flask1_数据_290

 

 如果登陆成功,代表index函数中就有session了.

巨蟒python全栈开发flask1_flask_291

 上边这种方式出不来数据,可能当时环境存在问题,再次调试的时候,可以得到相应的数据了

 下边这种方式是可以出来数据的

 

巨蟒python全栈开发flask1_json_292

 

 

 

 alt+上  纵向选择

alt+enter  快速找包.

 



标签:下面,上边,结果,python,request,flask1,Flask,全栈,我们
From: https://blog.51cto.com/u_11182673/5848944

相关文章

  • python 中实现在命令行中传递参数
     001、[root@pc1test1]#lsa.fatest.py[root@pc1test1]#cata.fa##测试fasta文件>chr1kkkaatttttcccc>chr2yyyttttuuuuddfff>chr3eeeuuuuukkss......
  • 巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询
    1.编辑删除&&多对多关系的其他方法提交,数据,得到结果  查看运行给编辑和删除,添加样式我们点击删除,可以成功删除 打印sql语句的,在settings.py里边的配置 LOGGING={......
  • 巨蟒python全栈开发-第21天 继承
    一.今日主要内容1.了解python2和python3类的区别python2在2.2之前使用的是经典类,2.2之后,使用的是新式类classFoo:passclassFoo(object):pa......
  • 巨蟒python全栈开发linux之cento9
    1.docker入门学习查看机器中已经启动的所有的进程.ps-ef 2.docker常用命令学习3.docker学习34.dockerfile与镜像5.docker私有仓库6.rabbitmq介绍与安装7.rabbitmq的队......
  • 开发笔记 -- URL地址格式显示异常-用python-urllib库解决1
    场景描述:开发中,尤其数据采集过程中,偶尔会遇到URL地址显示异常的情况,如下:https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fp6.itc.cn%2Fq_70%2Fimages03%2F......
  • Python如何研究类、对象、方法、函数之间的关系
    1,从某个类或对象出发,研究其上级父类,下级子类,同级类。自身类内部的函数和变量2,上级类base,下级类subclasses方法,同级类需要先上后下。3,查看某个类和对象支持哪些变量使用di......
  • 搭建python远程解释器
    背景python项目是flask项目,因一些包不支持windows,需要一个集中linux开发环境。公司使用K8S,没有多余CVM步骤使用VirtualBox+Vagrant创建虚拟机VirtualBox:5.2.4......
  • Python 常用库
    API文档NumPy:https://www.numpy.org.cn/reference/SciPy:   https://docs.scipy.org/doc/scipy/reference/index.html#Matplotlib:  http://matplotlib.org/......
  • python-介绍-笔记
    因为c语言的数据结构实在是看不懂,所以转而学习python了,等后续回过头来再看数据结构吧。目前先把python的基础内容学习完,顺便总结一下近期的学习笔记,和大家分享。认识Python......
  • python-注释-笔记
    注释目标注释的作用单行注释(行注释)多行注释(块注释)01.注释的作用使用用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序的可读性02.单行注释(行注释)以#开头,#右......