1、Flask入门
flask的安装
在工作空间中输入
pip install flask
flask第一个程序
#引入Flask类,Flask类实现了一个WSGI应用
from flask import Flask
#app是Flask的实例,它接收包或者模块的名字作为参数,但一般都是传递__name__。让flask.helpers.get_root_path函数通过传入这个名字确定程序的根目录,以便获得静态文件和模板文件的目录。
app = Flask(__name__)
#使用app.route装饰器会将URL和执行的视图函数的关系保存到app.url_map属性上
@app.route('/')
def hello_world():
return 'Hello World!'
#使用这个判断可以保证当其他文件引用这个文件的时候(例如“from hello import app”)不会执行这个判断内的代码,也就是不会执行app.run函数。
if __name__ == '__main__':
#执行app.run就可以启动服务了。默认Flask只监听虚拟机的本地127.0.0.1这个地址,端口为5000。
app.run()
flask设置debug=True(自动更新,不用重启端口)
1、直接设置
在app.run()中设置为app.run(debug=True)
2、创建类
class Config(object):
'''这是app的配置'''
DEBUG=True
#进行app的配置:将配置文件或配置类加载进app
app.config.from_object(Config)
创建一个Config的类设置DEBUG=True,然后配置即可
3、创建文件
新建一个config.ini的file,在里面写入
DEBUG=True
然后在所在的py文件中
#加载配置文件
app.config.from_pyfile('config.ini')
注:
如果写入之后,debug没效果,那就选中run选项下拉框中的Edit Configurations,在左边选中生效文件,然后再选中右边的FLASK_DEBUG框即可。
2、正则规则
2.1将规则写死
#新建一个类,将自定义正则写入
class MyCoverter(BaseConverter):
regex = '\d{5}'
#将自定义正则添加到url_map中去‘myre’:MyCoverter
app.url_map.converters['myre']=MyCoverter
2.2 自定义正则不写死
class MyCoverter(BaseConverter):
def __init__(self,url_map,*args):
#调用父类(BaseConverter)的init方法,有些父类的初始化操作必须要有
super(MyCoverter,self).__init__(url_map)
self.regex =args[0]#获取第一个正则匹配式
app.url_map.converters['myre']=MyCoverter
#然后可以在自定义函数中规定正则规则
@app.route('/userinfo/<myre("\d{5}","张三"):user_id>',methods=['POST','GET'])
def userinfo(user_id):
print(user_id)
return jsonify({'err_msg':'ok'})
3、钩子
1、只有第一次请求才会调用
#请求钩子(类似中间件)
@app.before_first_request
def before_first_request():
print('在第一次请求之前')
2、每次请求之前都会调用
@app.before_request
def before_request():
print('在请求之前')
#此时判断用户的请求是否符合规范,如果符合,继续访问,如果不符合,直接return
3、请求之后需要调用(必须要有返回,返回的是<Response 12 bytes [200 OK]> 表示自己收到了)
@app.after_request
def after_request(response):
print(response)
print('after request')
return response
4.异常打印
在after request后面调用
@app.teardown_request
def teardown(a):
print('############')
print(a)
print('tear down')
钩子总结
before_first_request
在处理第一个请求前执行
before_request
在每次请求前执行
如果在某修饰的函数中返回了一个响应,视图函数将不再被调用 after_request
如果没有抛出错误,在每次请求后执行
接受一个参数:视图函数作出的响应
在此函数中可以对响应值在返回之前做最后一步修改处理
需要将参数中的响应在此参数中进行返回
teardown_request:
在每次请求后执行
接受一个参数:错误信息,如果有相关错误抛出
4、异常捕获
#配置路由以及路由对应的处理函数
#接收到错误,并且输出my404
@app.errorhandler(404)
def hello_world(e):
print(e)
return 'my404'
#如果上免得错误是FileNotFoundError,则返回该函数 文件找不到
@app.errorhandler(FileNotFoundError)
def file(e):
return '文件找不到'
#运行函数 故意找不到这个文件
@app.route('/err')
def status_my():
with open('a.txt','r') as f:
f.read()