Flask框架初始化、配置参数、运行参数说明

1、Flask对象初始化参数

        Flask 程序实例在创建的时候,需要默认传入当前 Flask 程序所指定的包(模块),接下来就来详细查看一下 Flask 应用程序在创建的时候一些需要我们关注的参数:

  • import_name
    • Flask程序所在的包(模块),传 __name__ 就可以
    • 其可以决定 Flask 在访问静态文件时查找的路径
  • static_url_path
    • 静态文件访问路径,可以不传,默认为:/ + static_folder
  • static_folder
    • 静态文件存储的文件夹,可以不传,默认为 static
  • template_folder
    • 模板文件存储的文件夹,可以不传,默认为 templates

默认参数情况下

app = Flask(__name__)

文件目录

----
  |---static
  |     |--- 1.png
  |---helloworld.py

访问 127.0.0.1:5000/static/1.png 就可以访问到图片

修改参数的情况下

app = Flask(__name__, static_url_path='/url_path_param', static_folder='folder_param')

文件目录

----
  |---folder_param     # 此处目录名变化
  |     |--- 1.png
  |---helloworld.py

访问127.0.0.1:5000/url_path_param/1.png才可以访问到图片

2、应用程序配置参数

对于Flask对象初始化参数仅仅设置的是Flask本身的属性,比如:

  • Flask从哪里读取静态文件
  • Flask从哪里读取模板文件
  • ...

等等。

应用程序配置参数设置的是一个Web应用工程的相关信息,比如:

  • 数据库的连接信息
  • 日志的配置信息
  • 自定义的配置信息
  • ...

等等

2.1 作用

        集中管理项目的所有配置信息

2.2 使用方式

Django将所有配置信息都放到了settings.py文件中,而Flask则不同。

Flask将配置信息保存到了app.config属性中,该属性可以按照字典类型进行操作。

2.3 读取配置信息

  • app.config.get(name)
  • app.config[name]

2.4 设置配置信息

主要使用以下三种方式:

2.4.1 从配置对象中加载

app.config.from_object(配置对象)

from flask import Flask


class DefaultConfig(object):
    """默认配置"""
    SECRET_KEY = 'TPmi4aLWRbyVq8zu9v82dWYW1'


app = Flask(__name__)
app.config.from_object(DefaultConfig)


@app.route('/')
def index():
    print(app.config['SECRET_KEY'])
    return 'Hello world!'


if __name__ == '__main__':
    app.run()

运行结果:

应用场景

        作为默认配置写在程序代码中

可以继承

class DevelopmentConfig(DefaultConfig):
    DEBUG=True
2.4.2 从配置文件中加载

app.config.from_pyfile(配置文件)

app.config.from_file('config.json', json.load)

旧版本可以使用app.config.from_json("config.json")   

config.json:

{"DEBUG":"True"}

新建一个配置文件setting.py

SECRET_KEY = 'TPmi4aLWRbyVq8zu9v82dWYW1'

在Flask程序文件中

from flask import Flask


app = Flask(__name__)
app.config.from_pyfile('setting.py')


@app.route('/')
def index():
    print(app.config['SECRET_KEY'])
    return 'Hello world!'


if __name__ == '__main__':
    app.run()

运行结果:

应用场景

        在项目中使用固定的配置文件

2.4.3 从环境变量中加载

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。

通俗的理解,环境变量就是我们设置在操作系统中,由操作系统代为保存的变量值

在Linux系统中设置和读取环境变量的方式如下:

export 变量名=变量值  # 设置
echo $变量名  # 读取

# 例如
export ITCAST=python
echo $ITCAST

Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息,其使用方式为

app.config.from_envvar('环境变量名')

环境变量的值为配置文件的绝对路径

先在终端中执行如下命令

export PROJECT_SETTING='~/setting.py'

再运行如下代码

from flask import Flask


app = Flask(__name__)
app.config.from_envvar('PROJECT_SETTING', silent=True)


@app.route('/')
def index():
    print(app.config['SECRET_KEY'])
    return 'Hello world!'


if __name__ == '__main__':
    app.run()

关于silent的说明:

        表示系统环境变量中没有设置相应值时是否抛出异常

Pycharm运行时设置环境变量的方式

  • False 表示不安静的处理,没有值时报错通知,默认为False
  • True 表示安静的处理,即时没有值也让Flask正常的运行下去

应用场景

        配置文件的地址不固定;

        ​ 在代码中不想暴露真实的配置文件地址,只在运行代码的服务器上才有真实配置文件的信息。

环境变量不能成功加载的可能原因

        1. 环境变量是否正确

        2. 重启下VScode

2.4.4 从mapping中加载

app.config.from_mapping({'DEBUG':True})

2.4.5 通过修改配置参数config
app.config.update(DEBUG=True)
# 或者
app.config['DEBUG'] = True
# 或者
app.debug = True
app.run()

2.5 项目中的常用方式

使用工厂模式创建Flask app,并结合使用配置对象与环境变量加载配置

  • 使用配置对象加载默认配置
  • 使用环境变量加载不想出现在代码中的敏感配置信息
from flask import Flask


def create_flask_app(config):
    """
        创建Flask应用
        :param config: 配置对象
        :return: Flask应用
    """
    app = Flask(__name__)
    app.config.from_object(config)

    # 从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数
    app.config.from_envvar("PROJECT_SETTING", silent=True)
    return app


class DefaultConfig(object):
    """默认配置"""
    SECRET_KEY = 'itcast1'


class DevelopmentConfig(DefaultConfig):
    DEBUG = True


# app = create_flask_app(DevelopmentConfig)
app = create_flask_app(DefaultConfig)


@app.route('/')
def index():
    print(app.config['SECRET_KEY'])
    return 'Hello world!'


if __name__ == '__main__':
    app.run()

运行效果:

3、app.run 参数(对象运行)

3.1 参数解释

可以指定运行的主机IP地址,端口,是否开启调试模式

app.run(host="0.0.0.0", port=5000, debug = True)

参数解释:

host

  • 主机IP地址,可以不传
  • 默认localhost

port

  • 端口号,可以不传
  • 默认5000

提示:

  • 如果想在同一个局域网下的其他电脑访问自己电脑上的Flask网站,需要设置 host='0.0.0.0' 才能访问得到。

关于DEBUG调试模式

  1. 程序代码修改后可以自动重启服务器
  2. 在服务器出现相关错误的时候可以直接将错误信息返回到前端进行展示

3.2 运行方式

3.2.1 通过Python运行方式运行
app = Flask(__name__)


@app.route("/")
def index():
    return "hello world"


if __name__ == '__main__':
    app.run()
3.2.2 通过Flask自带命令运行
app = Flask(__name__)


@app.route("/")
def index():
    return "hello world"

# 程序中不用再写app.run()
# if __name__ == '__main__':
#     app.run()

$ export FLASK_APP=helloworld
$ flask run
 * Running on http://127.0.0.1:5000/

举例:

flask run -h 0.0.0.0 -p 8000

注意

  • 命令行下,可以使用使用简写
  • 可以通过 flask run --help 获取帮助
(base) PS E:\python_code\test> flask run --help   
Usage: flask run [OPTIONS]

  Run a local development server.

  This server is for development purposes only. It does not provide the
  stability, security, or performance of production WSGI servers.

  The reloader and debugger are enabled by default if FLASK_ENV=development or
  FLASK_DEBUG=1.

Options:
  -h, --host TEXT                 The interface to bind to.
  -p, --port INTEGER              The port to bind to.
  --cert PATH                     Specify a certificate file to use HTTPS.
  --key FILE                      The key file to use when specifying a
                                  certificate.
  --reload / --no-reload          Enable or disable the reloader. By default
                                  the reloader is active if debug is enabled.
  --debugger / --no-debugger      Enable or disable the debugger. By default
                                  the debugger is active if debug is enabled.
  --eager-loading / --lazy-loader
                                  Enable or disable eager loading. By default
                                  eager loading is enabled if the reloader is
                                  disabled.
  --with-threads / --without-threads
                                  Enable or disable multithreading.
  --extra-files PATH              Extra files that trigger a reload on change.
                                  Multiple paths are separated by ';'.
  --help                          Show this message and exit.

4、Debug模式

在代码中制作一个错误

from flask import Flask

app = Flask(__name__)


@app.route("/")
def index():
    1 / 0
    return "hello world"


if __name__ == '__main__':
    app.run()

启动并访问:

控制台倒是给出了错误提示信息,但是我们希望在浏览器也能有相应的提示信息

开启Debug模式,运行时传递参数

app.run(debug = True)
from flask import Flask

app = Flask(__name__)


@app.route("/")
def index():
    1 / 0
    return "hello world"


if __name__ == '__main__':
    app.run(debug=True)

重新启动并访问:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值