Flask入门以及正则配置,钩子,捕获异常

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()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值