- 装饰器
- Flask安装
- Routing
- HTTP Method
- 静态和模板
- Request/Response
- Error/重定向
- Flash Message
- Logger
- Flask-Script
装饰器
def log(level, *arg, **kvargs):
def inner(func):
"""
* 无名参数,用来传递任意个无名参数,这些参数会以一个Tuple的形式访问
** 有名参数 用来处理传递任意个有名字的参数,这些参数用dict来访问
"""
def wrapper(*args, **kvargs):
print(level, 'before calling ', func.__name__)
print(level, 'args',args,'kvargs', kvargs)
func(*args, **kvargs)
print(level, 'end calling ', func.__name__)
return wrapper
return inner
@log(level = 'INFO') # 直接去调用log装饰函数
def hello(name, age):
print('hello',name,age)
if __name__ == '__main__':
hello(name='toohoo',age=2) #= log(hello(name='toohoo',age=2))
print("---------------------------")
log(hello(name='toohoo',age=2))
测试结果
INFO before calling hello
INFO args () kvargs {'name': 'toohoo', 'age': 2}
hello toohoo 2
INFO end calling hello
---------------------------
INFO before calling hello
INFO args () kvargs {'name': 'toohoo', 'age': 2}
hello toohoo 2
INFO end calling hello
从上面的结果可以看出执行的顺序是从__main__开始调用Hello==>log装饰器==>inner函数==>wrapper函数==>func(就是hello函数)==>最后输出end…
因此可以知道,使用装饰器可以简化操作
安装与验证
使用命令import flask
验证是否安装了flask,没有安装时候可以使用命令安装
sudo pip3 install flask
参考文档:
- 中文文档:http://dormousehole.readthedocs.io/en/latest/
- github开源地址:https://github.com/pallets/flask
- 最新版本官网:https://palletsprojects.com/p/flask/
验证简单app
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello'
if __name__ == '__main__':
app.run(debug=True) # 开发的时候打开debug模式
路由 Routing
- 1、
/
结尾自动补齐:@app.route('/')
- 2、多映射:
@app.route('/index/')
- 3、参数变量:
@app.route('/profile/<uid>/')
- 4、变量类型:
@app.route('/profile/<int:uid>/')
1、/
结尾自动补齐和多映射:当使用浏览器访问的时候
使用127.0.0.1:5000和127.0.0.1:5000/都是一样的,/会自动补齐。
多映射就是可以设置多个映射路由,如下面的代码:
from flask import Flask
app = Flask(__name__)
@app.route('/index/')
@app.route('/')
def index():
return 'hello'
if __name__ == '__main__':
app.run(debug=True)
使用127.0.0.1:5000和127.0.0.1:5000/和127.0.0.1:5000/index都是可以访问的。
2、参数变量:@app.route('/profile/<uid>/')
@app.route('/profile/<uid>')
def profile(uid):
return 'haha' + uid
浏览器中请求的url之后加上一个uid,页面会返回一个对应的uid,不限类型。
3、变量类型:@app.route('/profile/<int:uid>/')
@app.route('/profile/<int:uid>')
def profile(uid):
return 'haha' + str(uid)
这个就必须是int类型,否则浏览器会显示Not Found
HTTP Method
- GET:获取接口信息
- HEAD:紧急查看HTTP的头
- POST:提交数据到服务器
- PUT:支持幂等性的POST(函数重发还是那一次,不改变)
- DELETE:删除服务器上的资源
- OPITIONS:查看支持的方法
注意:一般的网站只用GET和POST,代表获取和更新,html的form仅仅支持GET和POST
@app.route('/profile/<int:uid>',methods=['GET', 'post'])
def profile(uid)