一、flask——hello world
# 安装flask
pip install flask
pip 安装 flask 后的依赖包如下
各个库说明如下:
Flask:Flask库
Jinja2:模板渲染库
MarkupSafe:返回安全标签 只要Flask返回模板或者标签时都会依赖MarkupSafe
Werkzeug:德文“工具” ,底层是WSGI,等价与uWSGI,Flask的启动都是依赖于Werkzeug
flask ——hello world
from flask import Flask # 导入Flask类创建Flask应用对象
app = Flask(__name__) # app = application
@app.route('/'): # 与路由绑定的视图函数
def index():
return "hello world"
# 启动flask
if __name__ == '__main__': # 当前文件处于脚本状态时运行如下代码
app.run()
flask ——Response
返回字符串:return ‘hello world’
返回HTML:return render_template(‘index.html’)
重定向:return rediriect(’/home’)
# redirect:讲解
# 服务器在ResponseHeaders中返回一个Localtion:http://url
# 客户端接收到 Localtion再次向服务器发起请求
flask ——特殊返回值
send_file(“文件路径”) 返回文件
# 服务器返回一个文件
@app.route('/')
def index():
return send_file('路径+文件')
# 打开并返回一个文件内容 ———— 怎么做的?
# 答 自动识别文件类型 在ResponseHeaders中加入Content-Type:文件类型
# 浏览器不能识别的类型 ——下载处理
jsonify(“字符串或数据类型”) 返回JSON字符串
在写API接口时特别爱使用
# 服务器返回一个json数据
@app.route('/')
def index():
user = {"name":"lisi"}
return jsonify(user) # Content-Type:application/json
return user # 直接返回字典时,本质上在执行jsonify(user)
flask ——request
flask中函数从不接受request参数
# flask中函数从不接受request参数
# 在flask中直接导入使用request
18792970884
from Flask import request
@app.route('/',methods=['GET','POST'])
def index():
# request请求函数
request.form.to_dict() # 获取FormData中的数据
request.methods # 请求方法
request.url # 请求地址
request.values # 接受所有get,post请求中的数据,包含了url和FormData中的数据
request.url_charset # url编码方式
request.url_root # 请求地址 完整请求地址
request.url_rule # 请求路由地址
request.args.to_dict() # 获取url中所有的请求参数
request.args.get() # 获取单个url总的匹配参数
# 上传保存文件的整个路径
my_file = request.files.get() # 获取一个FileStorage Flask 文件特殊对象
new_file = os.path.join('路径',my_file.filename)
my_file.save(new_file)
# 特殊提交方式数据获取
# Content-Type:application/json
# request.json 获取 Content-Type:application/json 时提交的数据
# request.data 获取原始请求体中的数据 b""
return '200 ok'
flask ——Session
面试:Session与Cookie的区别
答:Session是服务器端的键值对,交由客户端保管机制
Cookie客户端的键值对
前提条件是必须设置一个安全的秘钥
from flask import Flask
from Flask import session
app = Flask(__name__)
app.secret_key = "sdfsadsfasdg" # 设置session时必须要设置这个
flask ——路由参数
app.route(’/’,endpoint=,methods=,redirect_to=,strict_slashes=,defaults=,)
def func():
…
return
endpoint 不能重复 对应视图函数 默认是视图函数名
视图函数与路由对应关系 url_for 反向创建url
methods 允许请求的方式['GET'...]
redirect_to 永久重定向 没有进入视图直接跳转
strict_slashes=False 是否严格要求匹配路由规则
defaults=xx 默认参数
动态参数路由 /look/<int:page> 利用Send_file限定返回文件
flask ——实例化配置
from flask import Flask
app = Flask(__name__,template_folder=,static_folder=,static_url_path=)
# template_folder:静态模板存放路径
# static_floder:静态文采存放路径
# static_url_path:静态文件访问路径
flask ——对象配置
app.config.from_object(self,obj)
app.config.from_pyfile(self,filename,silent)
flask ——蓝布
from flask import Blueprint
user = Blueprint('name',__name__,url_prefix=)
@user.route():
def func():
return
app.regiest_blueprint('蓝图名称')
flask ——特殊装饰器
@app.before_request 请求进入视图函数之前
@app.after_request 响应之前
@app.errofhandler 处理错误
flask ——CBV
class Login(views.MethodView):
def get(self):
return
def post(self):
return
app.add_url_rule(rule,view_func=Login.as_view(name='login'))
flask ——第三方组件之Flask-Session
pip install flask-session
from flask-session import Session
app = Flask(__name__)
Session(app)
flask ——第三方组件之redis
from redis import Redis
conn = Redis(host=,prot=,db=)
dt = {'key','value'}
conn.set('key',json.dumps(dt))
json.loads(conn.get('key'))
flask ——wsgi收取request
flask ——请求上下文
请求是如何到达flask应用的