Flask web框架
- Flask 轻量级框架
- 轻 第三方支持比较全 扩容功能较为方便
- Django 重量级框架
- 重 原生组件 全 好
安装
pip install flask
启动flask
增加路由和视图
flask中的response
HttpResponse -return “httpresponse” 返回字符串
Render - 返回模板页面
Redirect - 跳转 重定向 response localtion: url
Flask 特殊封装
- send_file("文件路径") - 打开并返回文件内容 自动识别 文件类型 Content-Type :text/plan
@app.route("/login") def login(): return send_file('static/1111.jpg')
- Jsonify({k:v}) -返回标准的json字符串 Content-Type:apllication/json
@app.route("/index") def index(): d = { "name": "alexdsb" } return jsonify(d) # / return d
- Sanic - sonic 索尼克 蓝刺猬 ====flask web
async def login()
Flask 中的request
from flask import request
request中的一些方法 具体
@app.route("/login",methods=["POST","GET"]) def login(): if request.method=="GET": return render_template("login.html") else: # 请求方式 # request.method # 获取url 中的请求参数?id=1 # print(request.args) #ImmutableMultiDict([('id', '123')]) # print(request.args.to_dict()) # 将获取的值转化成字典{'id': '123'} # print(request.args.get("id")) #123 # form data 中的数据 post 请求提交数据 print(request.form) print(request.form.to_dict()) # 得到一个字典 request.json # 请求头中带有json格式 request.data # 请求头中不带formdata 保存在请求头中的流数据 print(request.url) # <http://127.0.0.1:5000/login> print(request.host) #127.0.0.1:5000 print(request.host_url) #<http://127.0.0.1:5000/> print(request.path) #127.0.0.1: print(request.files) # 直接保存文件 ImmutableMultiDict([('myFile', <FileStorage: '21.html' ('text/html')>)]) file = request.files.get("myFile") filename = file.filename # 获取文件名 file.save(filename) #保存 保存文件名 return "200 ok"
Flask 中的原生 session
Session:
from flask import flask
- 秘钥:secret_key 用于序列化字符串
app.secret_key="%$^&*(HJKJKLSDLJSDK"
- 使用session
- Session["key"] = value
- Session 存到哪里
- 交由客户端保管机制
Flask 中的路由
- methods 允许进入当前视图的请求方式
Methods=["POST","GET","DELET","PUT"…..] 8种
- endpoint # mapping 对应关系 视图函数 - 路由 必须保证唯一
- Defaults 默认参数
- redirect_to 永久重定向 301 or 308
- strict_slashes 是否严格按照路由匹配规则
- 动态路由规则
@app.route("/home/<int:username>") # 默认类型为string def home(username): return f"its 200 {username} ok"
Flask 初始化配置
app = Flask(name)
template_folder # 模板存放路径
static_folder # 静态文件存放路径
static_url_path # 静态文件访问路径 ”/开头 /{static_folder}
Flask 对象配置
app.secret_key="%$^&*(HJKJKLSDLJSDK" # 自动重启 传递错误信息 log级别较低 Debug 级别 app.debug=True app.config["debug"] = True app.config["SECRET_KEY"] = "asdjskajdklsajdlskajd" app.config["PERMANENT_SESSION_LIFETIME"] = 30 app.config["SESSION_COOKIE_NAME"] = "cookie的名字" app.config["JSONIFY_MIMETYPE"] = "application/json/sadjk" app.default_config # 非常重要
Flask 蓝图
- 蓝图 - 不能被run 的flask 对象
- From flask import Blueprint
- User_bp = Blueprint("蓝图标识",name)
- 蓝图功能:
- 功能隔离
- 路由视图分割
- Flask 实现web socket 需要实现什么组件?
- Gevent -websocket-flask-io
- Werkzukg-websocket flask io
- Utils 是指 数据库连接池
- 在app 中需要 register 蓝图
- app.register_blueprint(user.user_bp)
Flask 中的特殊装饰器
- @app.before_request # 再请求进入视图函数之前
- @app.after_request #在请求进入视图函数之后 响应返回客户端
正常情况: before1> before2>before3>after3>after2>after1
异常情况: before2 有返回值 :::: before1> before2>after3>after2>after1
- @app.errorhandler
@app.errorhandler(HttpErrorCode) # 重定向返回信息 HttpErrorCode[4xx,5xx]
Flask 中的CBV -- rest api 规则
class Login(MethodView): def get(self): return render_template('login.html') def post(self): if request.form.get("username")=="lzc": return redirect("/index") app.add_url_rule("/login",view_func=Login.as_view(name="login"))