Flask框架
一 . Python框架的简单介绍
Django
优点 - 大而全所有组件都是有组织内部开发高度定制化 教科书级别的框架
缺点 - 大到浪费资源,请求的时候需要的资源较高
Flask
优势 - 小而精,组件只有Session,第三方机构强烈支持Flask,非常多的三方组件 简单至极
缺陷 - 由于三方组件的关系 稳定性相对较差 Flask-Session
Tornado
优势 - 异步IO 非阻塞 原生WebSocket
缺陷 - 组件 == 0 关于异步的不好理解 Debug难上加难
Sanic
优势 - 异步IO 非阻塞 原生WebSocket + 小而精,组件只有Session,第三方机构强烈支持,非常多的三方组件
缺陷 - 复杂度
二 . flask的安装
添加Flask
三 . 实操
# 导入Flask类
from flask import Flask, request, render_template, redirect, session
app = Flask(__name__) # 实例化Flask对象
# 使用session必须写secret_key,内容随便写,加密作用,session存在浏览器上
app.secret_key = '君不见黄河之水天上来'
# app中的route装饰器,里面必须写上请求方式
@app.route('/', methods=['GET', 'POST'])
def login(): # 视图函数
if request.method == 'GET':
return render_template('login.html')
else:
if request.form.get('username') == 'attila':
session['is_login'] = True # 这里的session赋值与取值都不需要request,但是需要导入
# 注意,这里的用的是render_template,并且里面不用写request
return 'Congratulations!!!' # 这里直接return就可以,不用HttpResponse
else:
return redirect('/login')
# 端口5000,本地访问, debug=True是修改代码后自动重启
app.run('0.0.0.0', 5000, debug=True)
视图函数传参
if request.form.get('username') == 'attila':
session['is_login'] = True
return render_template('student_list.html', student_list=STUDENT_LIST)
# 这里只能用=(等号的形式),Django里面可以用{}(大括号形式)
解决html文件飘黄方法
四 . Flask响应
Response必须有的三个:
# Django三剑客 # Flask三剑客
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
五 . Flask Request
# 比较特殊
from flask import request 公共变量
# 公共变量 被覆盖?
1.request.args 获取URL中的数据,get方法,字典类型
2.request.form 获取FormData中的数据,post方法,字典类型
3.request.values 获取args+form 知道就可以了,不要用,会被覆盖
4.request.data 流 # 获取请求体中的原始数据
5.request.json 字典 # 请求头中带有Content-Type:application/json 将请求体中的数据反序列化到json中 但是在data中依然存储这原始数据bytes
# 下面传文件的时候,前端的form里面需要写enctype="multipart/form-data"
6.request.files 获取FormData中的文件数据,
flie = request.files.get("my_file") # file是FileStorage对象, file.filename 默认是文件本身的名字
file.save(保存路径/新名字)
# 记住:request.method
五 . Jinja2 - template
{{}} 引用 and 执行函数 可以直接在里面加()调用函数
{%%} 逻辑代码
# Django中的template只是用了jinja2的一部分
六 . session Flask中的session
from flask import session
app.secret_key = "序列化Session需要的字符串儿" # 这个是必须要写的
# 在视图函数中
session["key"] = "value" # 不用request.session
七 . 拓展知识
# 请求支持的协议为http 8种请求中常用的5中
GET(查) POST(增) PUT(改) DELETE(删) OPTIONS(跨越请求)
QPS = 请求每秒钟的次数 QPS == 10
时间片: cpu 工作一次的时间单位
py 假线程: - 1个核心
真线程 :- 4个核心 - 四个线程
#单引号与双引号,计算机底层的东西
''(单引号)是字符, 固定长度,方便查,最好用它
""(双引号)是字符串, 不固定长度,相对单引号费时