我爱Flask框架之Debug模式配置

黄色标注部分重点注意

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等其它格式配置文件。

有问题可以在评论指正,欢迎讨论,谢谢大家!!

猜你喜欢

转载自blog.csdn.net/qq_45261963/article/details/109095209
今日推荐