1.Flask简介
Flask是一个基于Python并依赖于Jinja2模板引擎和WerkZeug WSGI
服务的轻量级框架,采用了MTV的设计模式:
M:模型层Model
T:Template模板(HTML模板)
V:View视图层,处理请求与响应
2.Flask路由配置
路由:是为了匹配用户的请求地址,会自动执行视图函数,视图函数中必须有返回值,返回字符串显示到相应的页面中。
路由的使用:
1.定义路由及视图函数
@app.route(’/地址’)
def funcName():
return “” #响应到页面中的内容
例:
@app.route(’/’) # '/'表示根路径
def index(): # 匹配到路径后执行的视图函数
return “index.html”
2.定义带参数的路由
变量:<变量名>
@app.route("/login//")
def login(name,age):
return “%s,%s” % (name,age)
3.类型转换器
分类:
缺省字符串,不能包含’/’
int: 转换整数
float: 转换小数
path: 字符串,允许包含’/’
使用:
@app.route(’/show/int:num’)
4.多个URL执行同一个视图函数
例:
@app.route(’/’)
@app.route(’/index’)
def index():
return “index.html”
3.模板
1).模板是一种“Python+html”的网页结构,允许在HTML文件中定义变量,定义流程控制。使用模板可以使视图函数专注于处理业务逻辑,将页面渲染交由模板控制
2).使用
导入 render_template
在视图函数中使用render_template(“模板文件”),生成模板字符串,交由浏览器解析
所有的模板文件必须存在名为"templates"的文件下
3.变量代码块
1)模板中使用变量,语法{{ 变量名(key)}}
2)从视图函数中获取相关的变量,传递到模板文件中。
return render_template(“模板文件”,key1=value1,key2=value2)
函数中可以传递若干键值对,其中的key名就是在模板文件中使用的变量名
3)使用locals()返回字典,包含所有局部变量:params = locals()
4)过滤器
允许模板中的变量在输出之前修改成其他的值,修改显示
分类:
upper 转大写字母
lower 转小写字母
title 首字母大写
first 获取列表中第一个
last 获取最后一个
length 获取列表长度
default() 如果变量未赋值,可采用默认值
trim 去掉字符串两端的空格
…
语法:
{{ 变量|过滤器1|过滤器2 }}
4.Flask中的请求与响应
1.请求对象request
1)在request对象中封装了所有跟当前请求相关的信息
2)使用:
引入:from flask import request
使用:在视图函数中获取request对象内部的信息
3)request对象常用属性
scheme:获取此次请求使用的协议
method:获取请求方式(GET/POST),默认为GET
args:获取GET方式提交的数据
form:获取POST方式提交的数据
cookies:获取浏览器cookies中保存的数据
files:获取上传的文件
path:获取请求的资源路径(不带参数)
full_path:获取请求的资源路径(带参数)
url:获取完整的请求地址
headers:获取请求消息头,使用key:value保存相关信息
4)获取请求中的数据
1.获取GET请求中的数据
1)request.args['key']
2)request.args.get('key','默认值')
3)request.args.getlist('key')
适用于一个key对应多个值的情况(复选框)
注:get当时如果未携带数据,在视图函数中直接读取requese.args['']数据,报400,报错
2.获取POST请求中的数据
request.form获取数据字典
1)request.form['key']
2)request.form.get('key')
3)request.form.getlist('key')
注:post方式即使未携带数据,直接获取字典中的值,返回为空
5)页面重定向
由服务器端通知浏览器重新向新的地址发送请求
使用:
引入redirect
使用函数redirect('重定向地址')
视图函数中返回
return redirect('重定向地址')
6)页面源
当前的请求是从哪一个源地址发起的
保存在请求消息头中("Referer":"")
示例:
# 从请求消息头中获取源地址(不一定有值)
if "Referer" in request.headers:
print(request.headers['Referer'])
7)文件上传
1.使用表单控件type="file"向服务器发送文件,因为文件,图片,音视频等都是二进制数据,必须设置表单的提交方式和编码类型
<form action="" method="post" enctype="multipart/form-data">
2.服务器端使用request.files获取上传的文件,返回字典
例:
f = request.files["key"]
#将文件保存至指定的文件夹下
f.save(保存路径)