参数说明

  • Flask对象的初始化参数
  • 应用程序配置参数
  • app.run()运行参数

    1 Flask对象初始化参数

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

  • import_name

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

      默认参数情况下

      1. app = Flask(__name__)
      文件目录 ```

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

  1. 访问 `127.0.0.1:5000/static/1.png` 就可以访问到图片
  2. <a name="QqNlp"></a>
  3. #### 修改参数的情况下

app = Flask(name, static_url_path=’/url_path_param’, static_folder=’folder_param’)

  1. 文件目录

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

  1. 访问`127.0.0.1:5000/url_path_param/1.png`才可以访问到图片
  2. <a name="H2PUW"></a>
  3. ## 2 应用程序配置参数
  4. 对于Flask对象初始化参数仅仅设置的是Flask本身的属性,比如:
  5. - Flask从哪里读取静态文件
  6. - Flask从哪里读取模板文件
  7. - ...
  8. 等等。<br />应用程序配置参数设置的是一个Web应用工程的相关信息,比如:
  9. - 数据库的连接信息
  10. - 日志的配置信息
  11. - 自定义的配置信息
  12. - ...
  13. 等等
  14. <a name="HRIjM"></a>
  15. ### 作用
  16. 集中管理项目的所有配置信息
  17. <a name="ucVsJ"></a>
  18. ### 使用方式
  19. Django将所有配置信息都放到了settings.py文件中,而Flask则不同。<br />**Flask将配置信息保存到了`app.config`属性中,该属性可以按照字典类型进行操作。**
  20. <a name="G9LzP"></a>
  21. #### 读取
  22. - `app.config.get(name)`
  23. - `app.config[name]`
  24. <a name="OPcdN"></a>
  25. #### 设置
  26. 主要使用以下三种方式:
  27. - **从配置对象中加载**<br />`app.config.from_object(配置对象)`

class DefaultConfig(object): “””默认配置””” SECRETKEY = ‘TPmi4aLWRbyVq8zu9v82dWYW1’ app = Flask(_name) app.config.from_object(DefaultConfig) @app.route(“/“) def index(): print(app.config[‘SECRET_KEY’]) return “hello world”

  1. - 应用场景:<br />作为默认配置写在程序代码中<br />可以继承

class DevelopmentConfig(DefaultConfig): DEBUG=True

  1. - **从配置文件中加载**<br />`app.config.from_pyfile(配置文件)`<br />新建一个配置文件setting.py

SECRET_KEY = ‘TPmi4aLWRbyVq8zu9v82dWYW1’

  1. - Flask程序文件中

app = Flask(name) app.config.from_pyfile(‘setting.py’) @app.route(“/“) def index(): print(app.config[‘SECRET_KEY’]) return “hello world”

  1. - 应用场景:<br />在项目中使用固定的配置文件
  2. - **从环境变量中加载**
  3. > **环境变量**(environment variables)一般是指在操作系统中用来指定操作系统运行**环境**的一些参数,如:临时文件夹位置和系统文件夹位置等。 **环境变量**是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。
  4. - 通俗的理解,环境变量就是我们设置在操作系统中,由操作系统代为保存的变量值在Linux系统中设置和读取环境变量的方式如下:

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

例如

export ITCAST=python echo $ITCAST

  1. - **Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件**,再读取配置文件的信息,其使用方式为`app.config.from_envvar('环境变量名')`环境变量的值为配置文件的绝对路径先在终端中执行如下命令

export PROJECT_SETTING=’~/setting.py’

  1. - 再运行如下代码

app = Flask(name) app.config.from_envvar(‘PROJECT_SETTING’, silent=True) @app.route(“/“) def index(): print(app.config[‘SECRET_KEY’]) return “hello world”

  1. - 关于`silent`的说明:表示系统环境变量中没有设置相应值时是否抛出异常
  2. - False 表示不安静的处理,没有值时报错通知,默认为False
  3. - True 表示安静的处理,即时没有值也让Flask正常的运行下去
  4. - Pycharm运行时设置环境变量的方式<br />![Pycharm设置环境变量第一步.png](https://cdn.nlark.com/yuque/0/2020/png/2798942/1605410619126-cfa5b4d3-ad2b-439a-85d7-49272c01ae1f.png#align=left&display=inline&height=618&margin=%5Bobject%20Object%5D&name=Pycharm%E8%AE%BE%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E7%AC%AC%E4%B8%80%E6%AD%A5.png&originHeight=618&originWidth=2032&size=168161&status=done&style=none&width=2032)![Pycharm设置环境变量第二步.png](https://cdn.nlark.com/yuque/0/2020/png/2798942/1605410672682-725ed4fb-7655-4dbf-a2a1-89fd2dc87343.png#align=left&display=inline&height=1800&margin=%5Bobject%20Object%5D&name=Pycharm%E8%AE%BE%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E7%AC%AC%E4%BA%8C%E6%AD%A5.png&originHeight=1800&originWidth=2880&size=870291&status=done&style=none&width=2880)
  5. 应用场景:<br /> 配置文件的地址不固定;<br /> 在代码中不想暴露真实的配置文件地址,只在运行代码的服务器上才有真实配置文件的信息。
  6. <a name="cXRcc"></a>
  7. ### 项目中的常用方式
  8. 使用工厂模式创建Flask app,并结合使用配置对象与环境变量加载配置
  9. - 使用配置对象加载默认配置
  10. - 使用环境变量加载不想出现在代码中的敏感配置信息

def createflaskapp(config): “”” 创建Flask应用 :param config: 配置对象 :return: Flask应用 “”” app = Flask(__name) app.config.from_object(config)

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

class DefaultConfig(object): “””默认配置””” SECRET_KEY = ‘itcast1’ class DevelopmentConfig(DefaultConfig): DEBUG=True

app = create_flask_app(DefaultConfig)

app = create_flask_app(DevelopmentConfig) @app.route(“/“) def index(): print(app.config[‘SECRET_KEY’]) return “hello world”

  1. <a name="lX90W"></a>
  2. ## 3 app.run 参数
  3. 可以指定运行的主机IP地址,端口,是否开启调试模式

app.run(host=”0.0.0.0”, port=5000, debug = True) ``` 关于DEBUG调试模式

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