一.flask与django的比较
Django 15
优势 : 组件全 - admin - Model ORM - Forms
教科书式
劣势 : 加载所有组件 - 占用资源较高
重型框架
Flask 3
优势 : 轻如鸿毛 扩展性极强 三方组件全
劣势 : 什么组件都没有
三方组件全 - 版本兼容问题 导致不稳
二.flask
1.Flask 安装 + 启动
from flask import Flask
app = Flask(__name__)
app.run()
#app.run('192.168.16.45',8000)通过此方法可以修改访问ip和端口
高级启动:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Hello World!"
app.run()
2.Flask Response (响应)
1.HttpResponse("HelloWorld") "HelloWorld" 返回字符串
2.from flask import render_template 需导入render_template 返回模板
render("模板路径") --->括号内跟的html页面名称.默认存放路径 templates
3.from flask import redirect 重定向
redirect("/") --->括号内跟的路由
Flask 中的返回特殊封装 2个
1.jsonify 转换标准JSON格式
响应头中加入 Content-type:application/json
在Flask 1.1.1 版本中 加入了 直接返回字典 可以不再使用jsonify了
例:@app.route('/')
def home():
return {'1':1}
2.send_file 发送文件
打开并返回文件内容,
自动识别文件类型,
响应头中加入Content-type:文件类型
ps:当浏览器无法识别Content-type时,会下载文件
例:@app.route('/file')
def my_file():
return send_file('111.mp4')
3.Flask Request(请求)
一个注意点:假登录,405 请求方式不被允许 - GET请求可以 但是POST请求 405 Method Not Allowed
解决方法: @app.route('/login',methods=('POST','GET')),
添加methods方法,可写成列表,也可写成元祖
request知识点:
from flask import request 公共对象
1.request.form 获取FormData中的数据 - Form表单
2.request.args # 获取URL中的参数
3.request.files # 获取FormData中的文件数据
print(request.url) # 获取访问路径
print(request.method) # 获取请求方式
print(request.path) # 路由地址 /login
print(request.values) # Form 和 Args 中的数据
# 综合获取 X
print(request.args.get("id")) # 获取URL中的参数
print(request.args["id"]) # 获取URL中的参数
print(request.args.to_dict()) # 获取URL中的参数 转换成 字典
print(request.environ) # 获取请求原始信息
print(request.base_url) # 获取URL头,不包含参数
print(request.json) # 毁三观 1 请求头中 Content-type:application/json 数据序列化 request.json
print(request.data) # 毁三观 2 请求头中 Content-type 不包含 Form or data
print(request.headers) # 请求头中的数据
4.Jinja2
{{}} 引用 or 执行 {%%} 逻辑语法 if else for
例:
{% for key,foo in STUDENT_LIST.items() %}
<tr>
<td>{{ foo.name }}</td>
<td>{{ foo.age }}</td>
{% if foo.gender != '男' and foo.gender != '女' %}
<td>女</td>
{% else %}
<td>{{ foo.gender }}</td>
{% endif %}
</tr>
{% endfor %}
5.Flask中的Session
from flask import session
session 交由客户端保管机制,session保管在前端的cookie下
# eyJ1c2VybmFtZSI6IjEyMyJ9.XSVpHA.W0NfiCmW-lsTV0mvQI7mx2mf1Wo
# .eJyrViotTi3KS8xNVbJSMjQyVtKBCxhiiBhhiBhjiJhgiJhiiJhBRWoBMFYkPg.XSVsaA.9merwNdTg3ZkZrdTumYRG7x8x7Y
验证session是否失效的过程:
反序列化机制 -
当客户端发起请求 - request 带上 Cookie - Cookie中有session的加密字符串 - Flask 收到Session加密字符串 - 通过secret_key解密session的加密字符串 - 获得 {username:123},然后检查后端数据库中是否存在session相关信息.
序列化机制 - 开启session - session["username"] = uname
先创建一个字典 {username:123} 接下来 通过secret_key + 时间戳 + 签名 加密 形成
# eyJ1c2VybmFtZSI6IjEyMyJ9.XSVpHA.W0NfiCmW-lsTV0mvQI7mx2mf1Wo session的加密字符串