黄色标注部分重点注意
1. Debug模式的设置
•默认情况下flask库不会开启DEBUG模式,开启DEBUG模式后,flask会在每次保存代码的时候自动的重新载入代码,并且如果代码有错误,会在终端提示。
运行测试:
•在first_flask()
函数中加入错误代码进行测试:
from flask import Flask
app = Flask(__name__)
# 装饰器,将当前路由映射到对应函数
@app.route('/')
def first_flask():
result = 1 / 0 # 出现错误
return 'Hello Flask'
if __name__ == '__main__':
app.run()
•运行开启服务后,会在浏览器发现:
•在编译器的日志也会发现以下报错:
[2020-10-15 13:14:29,845] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "D:\envs\Flaskframe-UbajLYNV\lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "D:\envs\Flaskframe-UbajLYNV\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "D:\envs\Flaskframe-UbajLYNV\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "D:\envs\Flaskframe-UbajLYNV\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "D:\envs\Flaskframe-UbajLYNV\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "D:\envs\Flaskframe-UbajLYNV\lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "D:/Flaskframe/第一讲/first_flask.py", line 9, in first_flask
result = 1 / 0
ZeroDivisionError: division by zero
127.0.0.1 - - [15/Oct/2020 13:14:29] "GET / HTTP/1.1" 500 -
•这种运行方式显然很麻烦,且每次修改之后必须重新运行,而且错误信息只能在日志中看到。
•这时我们就需要开启Debug模式,这样每次修改代码后保存代码都会重新运行,并且代码有问题也会显示错误信息。
注意:修改代码后要保存才能重新运行,大部分编译器保存代码的快捷键都是(Crtl+S)
开启Debug的几种方法:
•在run()
方法中设置debug参数为True:
if __name__ == '__main__':
app.run(debug=True) #debug参数为True
•设置app对象实例的debug属性为True:
if __name__ == '__main__':
app.debug = True #实例的debug属性为True
app.run()
•通过配置参数config的属性设置:
if __name__ == '__main__':
app.config.update(DEBUG=True)
app.run()
•config
是继承于字典类型的,可以使用字典类型的update()
方法。
开启Debug模式测试如下:
from flask import Flask
app = Flask(__name__)
# 装饰器,将当前路由映射到指定函数
@app.route('/')
def first_flask():
result = 1 / 0
return 'Hello Flask'
if __name__ == '__main__':
app.run(debug=True)
•保存并运行,查看网页:
•控制台中也会提示已开启Debug模式:
* Serving Flask app "first_flask" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on # on表示Debug模式已开启
* Restarting with stat
* Debugger is active!
* Debugger PIN: 338-200-360
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
•当Debug模式开启后,修改完代码并保存,都会自动加载代码重启服务,不需要再手动关闭服务再重启了。
2. 配置与配置文件
•Flask项目的各种配置,都是通过app.config对象来进行配置的。
•如果要配置一个Flask项目处于Debug模式下运行,那么可以使用app.config[‘DEBUG’] = True来进行设置使得此Flask项目在Debug模式下运行。
项目配置的几种不同方法:
1. 直接硬编码硬编码的方式不灵活,不便于进行复用(多次使用)。
app = Flask(__name__)
app.config['DEBUG'] = True
2. 通过字典的update()方法
•因为app.config是flask.config.Config的实例,而Config类是继承于字典类型,因此可以通过update()方法
进行配置。
app.config.update(
DEBUG=True,
SECRET_KEY='...'
)
3. 通过模块from_object()方法
•当需要配置项非常多时,可以把所有需要的配置项都放在一个模块中,然后通过加载模块的方式进行配置。
•假设有一个settings.py模块,专门用来存储配置项的,此时你可以通过app.config.from_object()方法
进行加载配置项,并且该方法既可以接收模块的字符串名称,也可以是模块对象。
两种不同形式加载配置项:
# 1. 通过模块字符串
app.config.from_object('settings')
# 2. 通过模块对象
import settings
app.config.from_object(settings)
•添加配置文件后,将配置项都放在该文件中,其他文件直接引用该配置文件中的配置项,提高了代码的复用性、降低了耦合度。同时,在配置文件中修改了配置项时,其他代码中均不需要修改,从而大大提高了代码的灵活性。
将Debug模式配置添加到配置文件中:
•新建一个config.py文件,添加配置项如下:
# 设置Debug模式为True,开启Debug模式
DEBUG = True
# 指定HOST
HOST = '127.0.0.1'
•在所需文件中导入配置文件:
from flask import Flask
import config
app = Flask(__name__)
# 装饰器,将当前路由映射到指定函数
@app.route('/')
def first_flask():
result = 1 / 0
return 'Hello Flask'
if __name__ == '__main__':
app.config.from_object(config)
app.run()
•再运行,即可开启Debug模式。
也可通过字符串形式导入
if __name__ == '__main__':
app.config.from_object('config')
app.run()
4. 通过from_pyfile()方法
•app.config.from_pyfile()方法
传入一个文件名,通常是以.py结尾的文件,也可使用其它后缀的文件。
•通过导入Python文件的形式导入配置文件:
if __name__ == '__main__':
app.config.from_pyfile('config.py')
app.run()
•from_pyfile()方法
中有一个silent参数,设置为True时,如果配置文件不存在也不会出现报错;
•不仅支持Python格式的配置文件,也支持.ini等其它格式配置文件。
有问题可以在评论指正,欢迎讨论,谢谢大家!!