flask中的Response、Request、Session、装饰器、实例化参数、蓝图、

1.启动Flask
from flask import Flask
app = Flask(__name__)
if __name__ == '__main__':
app.run("0.0.0.0",9527) # 监听 绑定 ?

2.Flask 的 Response
1.HTTPResponse 返回字符串 ""
2.render_template 渲染返回模板文件
3.redirect 重定向
# Flask 特殊封装
4.send_file 打开返回文件内容 Content-Type:文件类型 自动识别的文件类型
5.jsonify 返回标准的JSON格式字符串 Content-Type:application/json

3.Flask 的 Request
# 有关的属性:
1.Request 导入 - 请求上下文
2.Request.method 请求方式 HTTP 8 种 POST(增)DELETE(删) PUT(改) GET(查) OPTIONS请求跨域
3.Request.path url_root 路由地址
4.Request.host 获取访问主机地址
# 有关的方法:
request.form FormData中的数据 to_dict() 直接返回字典数据
request.args URL中的数据
request.data 请求体的原始信息 只有在 Content-Type 没有 Form b""
request.json 请求头中的 Content-Type:application/json 字典
request.headers 请求头中的信息
request.cookies 请求中Cookie的信息
# 有关的坑:
request.values 不可触及的地带

4.Flask 中的 Session
from flask import session
使用session的前提是在 application 中加入 secret_key
app.secret_key = "$%^&*($#$%^&*^YH&U"
def get_session():
session["user"] = 123
交由客户端保管机制
1.开启Session - session["user"] = 123
2.session 序列化字符串
3.通过 secret_key 进行加密
4.通过 Cookie 返回客户端
接收Session
1.通过 Cookie 获取 session
2.通过 secret_key 解密
3.反序列化 字典
4.session
增加装饰器 实现验证登录
1.Flask 中路由
*1.endpoint 不能重复 对应视图函数 默认是视图函数名
视图函数与路由对应关系 url_for 反向创建url
*2.methods 允许请求的方式 ["GET","POST","DELETE","PUT"]
3.redirect_to 永久重定向 没有进入视图直接跳转 redirect_to="/new_look"
4.strict_slashes=False 是否严格要求 路由匹配规则最后的杠"/last/"
5.defaults={"nid":"22"} 默认参数 def 视图函数中(nid)一定要接受参数
# @app.route("/look", endpoint="look", methods=["GET", "POST", "post", "get"], strict_slashes=False, defaults={"nid":1})
# @app.route("/look", defaults={"nid": 1})
# @app.route("/look/<int:page>")
@app.route("/look/<string:page>")
def look(page):
return f"当前是第{page}页"
**动态参数路由 /look/<int:page>_<int:row>_<int:row_2>
应用场景 利用Send_file限定返回文件
from flask import send_file
@app.route("/look/<folder>/<filename>")
def look(folder, filename):
file_path = os.path.join(folder, filename)
return send_file(file_path)

2.Flask 初始化实例化参数
*static_folder 静态文件存放路径
*static_url_path 静态文件访问路径 默认值为 "/{static_folder}"
*template_folder 模板存放路径
static_host 静态文件访问服务HOST -> 指向到另外一台服务器
版一:
import os
from flask import Flask
from flask import render_template
from flask import send_file
# template_folder指定模板路径,static_folder静态默认访问路径,static_url_path默认访问的url路径
app = Flask(__name__, template_folder="templatesdfdsfdf", static_folder="image", static_url_path="/static")
# 重定义默认访问路径
my_static_folder = "image"
my_static_url_path = None
if not my_static_url_path:
# 不为空
url_path = f"/{my_static_folder}"
@app.route("/")
def index():
return render_template("index.html")
@app.route(f"{url_path}/<filename>")
def look(filename):
file_path = os.path.join(my_static_folder, filename)
return send_file(file_path)
if __name__ == '__main__':
app.run()

3.Flask 对象配置 简单
app.default_config 默认配置
DEBUG 模式 开启编辑时代码重启 Log打印级别最低 错误信息透传
TESTING 模式 无限接近生产环境 代码编辑不会重启 Log级别较高 错误信息不再透传
SESSION_COOKIE_NAME 存放在浏览器cookie中session的名称
app.config["SESSION_COOKIE_NAME"] = "I am Not Session" 第一个字符,绝对不能是 空格
Flask Config 快速配置
class DebugConfig:
DEBUG = True
SECRET_KEY = "%^&*(%^&*"
PERMANENT_SESSION_LIFETIME = 3600
SESSION_COOKIE_NAME = "I am Not Session"
OLD = "OLD"
BOY = "BOY"
EDU = "EDU"
PYTHON = "PYTHON"
FLASK = "FLASK"
class TestConfig:
TESTING = True
SECRET_KEY = "我是一个加密的字符串牛逼吧"
PERMANENT_SESSION_LIFETIME = 30
SESSION_COOKIE_NAME = "TestConfig"
OLD = "OLDS"
BOY = "BOYS"
EDU = "EDUS"
PYTHON = "PYTHONS"
FLASK = "FLASKS"
访问:
import os
from flask import Flask
from flask import render_template
from flask import send_file
from flask import session
app = Flask(__name__)
# 增加配置文件:
from setting import DebugConfig, TestConfig
# app.config.from_object(DebugConfig)
app.config.from_object(TestConfig)
# 重定义默认访问路径:
my_static_folder = "image"
my_static_url_path = "/look"
if not my_static_url_path:
# 不为空:
my_static_url_path = f"/{my_static_folder}"
@app.route("/")
def index():
session["user"] = "123123"
return render_template("index.html")
@app.route(f"{my_static_url_path}/<filename>")
def look(filename):
file_path = os.path.join(my_static_folder, filename)
return send_file(file_path)
if __name__ == '__main__':
app.run()

4.Flask 中的 蓝图 Blueprint
Django app01
蓝图作用 功能隔离 路由隔离
from flask import Blueprint
# Blueprint 当做一个不能够run的Flask 实例
user = Blueprint(name="app02user",__name__,url_prefix="/shopping") # url_prefix
@user.route("/login")
def login():
return "I am app02 userBP login func"
在Flask实例中增加注册蓝图
app.regiest_blueprint(蓝图-user)
name="app02user" 蓝图名称 不能重复 保证在app中是唯一的
url_prefix="/shopping" URL前缀 用于隔离相同URL
posted @ 2020-06-24 21:45  干it的小张  阅读(283)  评论(0编辑  收藏  举报