/*
Flask是python上一个非常轻量的框架,用来搞搞接口还挺方便的,不管部署还是开发,一目了然。
*/
一、Flask安装
pip install flask
二、最小结构
from flask import Flask #导入包中的Flask
app = Flask('demo') #初始化一个实例
@app.route('/') #定义一个路由(默认http://127.0.0.1:5000)
def index(): #定义访问该url时调用的方法
return 'hello world' #返回的content
app.run() #完成初始化工作后,运行实例
三、路由详解
1 .基本路由定义
@app.route('/') #http://127.0.0.1:5000
def index():
return 'hello'
@app.route('/hello') #http://127.0.0.1:5000/hello
def index():
return 'hello'
#http://127.0.0.1:5000/hello,methods中限定访问的方式
@app.route('/hello',methods=['GET','POST'])
def index():
return 'hello'
#当访问<http://127.0.0.1:5000/子目录>时,会把子目录传到index函数中的id参数里
#注意,在定义这个路由时<id>与index(id) 这两个地方的id 名称要一样
#当访问<http://127.0.0.1:5000/子目录1/子目录2>时,不会匹配到这个路由
@app.route('/<id>')
def index(id):
return id
#可以匹配id的具体类型,常用包括
#string
#int
#float
#path
#id为float类型
@app.route('/<float:id>')
def index(id):
return id
#id为int类型
@app.route('/<int:id>')
def index(id):
return id
#id为string类型
@app.route('/<string:id>')
def index(id):
return id
#id为path类型,此时可以访问<http://127.0.0.1:5000/子目录1/子目录2>
@app.route('/<path:id>')
def index(id):
return id
2.扩展路由匹配规则
wekzeug.routing,用于扩充routing匹配规则,使之不限于string、int、float、path
#导入werkzeug文件夹中的routing.py里的BaseConverter(是一个类)
from werkzeug.routing import BaseConverter
#扩展BaseConverter这个类,例如扩展为RegexConverter
class RegexConverter(BaseConverter):
def __init__(self,url_map, regex):
super(RegexConverter,self).__init__(url_map)
#重新赋值 父类的正则表达式
self.regex = regex
#value是从浏览器传来的值,重写该方法,
#返回值将传到route对应的函数(index)中的value
#比如这里value为 v 是,index函数将接受到 v000
def to_python(self, value):
print('to_python : '+str(value))
return value+'000'
#在flask中注册这个类,也称作<转换器>
#<re>是在app.route中使用时的名称
app.url.map.converters['re'] = RegexConverter
#定义处理函数
@app.route('/<re("123"):value>')
def index(value):
return value
#注意,RegexConverter构造函数带参,参数在定义app.route时传进去,达能构造函数不带参数时
#可以写作
# @app.route('/<re():value>')
#或者写作
# @app.route('/<re:value>')