1,环境安装
1, mkvirtualenv name -p python3
2, pip install flask==1.0.3
2,路由定义
1,路由一定要以‘/’开头 2,可以通过app.url_map属性来获取所有路由(url资源段) 3,可以通过method 方法指定参数来设置路由的请求方式 自定义路由转换器 1,自定义路由转换器类,继承BaseConverter 2,定义属性regex,设置匹配规则 3,添加自定义转换器
示例代码:
from flask import Flask app = Flask(__name__) # 1. URL必须以/开头 # 3. 可以通过methods参数来设置路由支持的请求方式 @app.route(‘/index‘, methods=[‘POST‘, ‘GET‘]) def index(): return "index" if __name__ == ‘__main__‘: # 2.可以通过app.url_map属性来获取所有的路由规则 (URL资源段 支持的请求方式 视图函数的标记) print(app.url_map) # for rule in app.url_map.iter_rules(): # print(rule.rule, rule.methods, rule.endpoint) app.run(debug=True)
3,路由变量
正则对路由变量进行格式过滤,失败会返回404,
# 路由变量: 实现动态URL 让一个视图函数可以绑定"一类URL" # 获取某本书 GET /books/(?P<pk>\d+) # 路由变量格式: /user/<路由变量的名称> from flask import Flask from werkzeug.routing import BaseConverter app = Flask(__name__) # @app.route(‘/user/<userid>‘) # def index(userid): # 一旦定义了路由变量, 必须定义同名形参来接收路由变量的值 # print(userid) # return "index" # 正则转换器: 对路由变量进行格式过滤 过滤失败会返回404 # 格式: /user/<转换器名:路由变量> @app.route(‘/user/<int:userid>‘) # int转换器: 要求路由变量必须能够转为int def user(userid): print(type(userid)) return ‘user‘
自定义转换器的使用:
1. 自定义转换器类 继承BaseConverter
2. 定义属性regex, 设置匹配规则
3. 添加自定义转换器
# 所有的内置转换器都继承BaseConverter """自定义转换器 1. 自定义转换器类 继承BaseConverter 2. 定义属性regex, 设置匹配规则 3. 添加自定义转换器 """ class MobileConverter(BaseConverter): # 自定义转换器类 # 定义属性regex, 设置匹配规则 regex = r‘1[3-9]\d{9}$‘ # 规则不要添加开头的^ # 添加自定义转换器 {转换器名: 转换器类} app.url_map.converters[‘mob‘] = MobileConverter @app.route(‘/home/<mob:mobile>‘) # 使用自定义的转换器 def home(mobile): return ‘home‘ if __name__ == ‘__main__‘: # 获取所有的转换器 {转换器名: 转换器类} # print(app.url_map.converters) app.run(debug=True)
4,flask接收前端的4中方式
1,查询字符串方式 request.args
# 获取查询字符串 -> request.args 类字典对象 # print(request.args.get(‘name‘))
2,获取form_data表单传参 request.form
# 获取请求体-键值对(表单) -> request.form 类字典对象 # print(request.form.get(‘username‘))
3,获取请求体传参 文本 request.data | request.json
# 获取请求体-文本(json) -> request.data/request.json # print(request.data) # bytes类型 # print(request.json.get(‘name‘)) # 会将json字符串自动转为字典
4,获取请求体传参 文件 request.files
# 获取请求体-文件(图片) -> request.files 类字典对象 file = request.files.get(‘avatar‘) # type: FileStorage # 将文件保存到本地 # file.save(‘123.png‘) # 获取文件的二进制数据 file_bytes = file.read()
完整代码:
from flask import Flask, request from werkzeug.datastructures import FileStorage app = Flask(__name__) @app.route(‘/‘, methods=[‘POST‘, ‘GET‘]) def index(): # 获取请求的URL # print(request.url) # 获取本次请求的请求方式 # print(request.method) # 获取本次请求的请求头 # print(request.headers) # 类字典对象 可以像字典一样赋值和取值 # print(request.headers.get(‘Host‘)) # 建议使用get方法, 不存在会返回None, 不报错 # 请求传递数据的方式 1> URL路径参数-> 路由变量 2> GET 查询字符串 xx?name=xx&age=20 3> POST 请求体 键值对(表单)/文本(json)/文件(图片) 4> 请求头 -> request.headers # 获取查询字符串 -> request.args 类字典对象 # print(request.args.get(‘name‘)) # 获取请求体-键值对(表单) -> request.form 类字典对象 # print(request.form.get(‘username‘)) # 获取请求体-文本(json) -> request.data/request.json # print(request.data) # bytes类型 # print(request.json.get(‘name‘)) # 会将json字符串自动转为字典 # 获取请求体-文件(图片) -> request.files 类字典对象 file = request.files.get(‘avatar‘) # type: FileStorage # 将文件保存到本地 # file.save(‘123.png‘) # 获取文件的二进制数据 file_bytes = file.read() print(file_bytes) return "index" if __name__ == ‘__main__‘: app.run(debug=True)
响应:
1,访问静态文件步骤:
1,将静态文件放入static文件夹中
2,使用flask内置的静态文件路由进行访问
原文:https://www.cnblogs.com/wjun0/p/11827470.html