Flask

Flask项目的配置信息

文 / 大炳哥 来源 / 原创 阅读 / 7288 2年前

安装flask

pip install flask

安装flask时还同时安装了5个依赖包: (1.) Jinja2(模板渲染引擎) (2.) MarkupSafe(HTML字符转义工具,escape) (3.) Werkzeug(WSGI工具集,处理请求与相应,内置WSGI开发服务器、调试器和重载器) (4.) click(命令行工具) (5.) itsdangerous(提供各种加密签名命令)

在项目根目录下创建app.py,名字可以随便取,但是非app.py需要设置环境变量FLASK_APP=文件名

启动开发服务器

flask通过依赖包Click内置了一个CLI(Command Line Interface, 命令行交互界面)系统。当安装flask后,会自动添加一个flask命令脚本。可以通过flask命令执行内置命令、扩展提供的命令或自定义的命令。

可以通过flask --help查看所有可用的命令

Usage: flask [OPTIONS] COMMAND [ARGS]...
命令:
flask assets  关于压缩css/js等文件的命令,还没用过,会列出如flask --help的命令介绍
flask db      执行数据库迁移
flask routes  显示路由命令
flask run     运行开发服务器(development),这个用的最多
flask shell   在虚拟环境下运行一个python shell。
flask run     命令运行的开发服务器默认会监听127.0.0.1:5000/,按Ctrl + C退出。并开启多线程支持。如果执行flask run命令后显示命令未找到提示(command not found)或其他错误,可以尝试使用python -m flask run命令。

自动发现程序实例 运行flask run命令之所以不需要提供程序实例(app=Flask(__name__))所在模块(app.py)的位置,是因为flask会自动探测程序实例,自动探测规则:

(1.) 从运行flask run的当前目录寻找app.py和wsgi.py模块,并从中寻找名为app或application的程序实例。 (2.) 从环境变量FLASK_APP对应的值寻找app或application的程序实例。 (3.) 程序主模块命名为app.py,flask run能自动在其寻找程序实例,如果不是app.py,则必须设置环境变量FLASK_APP,将包含程序实例的模块名赋值给这个变量。只有这样,flask run才能正确扎到这个模块。

Linux 或 macOS命令:

export FLASK_APP=hello  #hello是包含程序实例的模块名hello.py

windows命令:

set FLASK_APP=hello

管理环境变量

除了FLASK_APP之外,后面还会有其他的环境变量要设置,在命令行设置的缺点就是关掉命令行后环境变量就消失了,再运行flask时还需要重新设置,所以人们为了不频繁设置环境变量,决定用配置文件来设置,这就涉及了一个依赖包python-dotenv,用这个依赖来管理环境变量,安装后在项目跟目录下创建.env.flaskenv两个文件。

.flaskenv用来存储和flask相关的公开环境变量,比如FLASK_APPFLASK_ENV等,.env用来存储包含敏感信息的环境变量,比如用来配置email服务器的账户名密码。内容格式使用键值对形式如FLASK_APP=hello,不需要引号,#用作注释。.env文件都是私有信息,不要上传到远程仓库,记得把它的名称添加到.gitignore文件中,会告诉git忽略这个文件。

优先级:手动在命令行设置的环境变量>.env中设置的环境变量>.flaskenv中设置的环境变量。

flask run命令扩展

flask run命令后面可以带主机和端口

flask run --host=0.0.0.0   #这会让服务器监听所有外部请求
flask run --port=8000      #监听8000端口

主机和端口也可以用环境变量来设置FLASK_RUN_HOST=0.0.0.0和FLASK_RUN_PORT=8000。

设置运行环境

环境变量FLASK_ENV可以设置运行环境,development为开发环境,production为生产环境,flask run运行的是开发环境,如果设置为production会有警告,但是可以运行。一般这个环境变量在.flaskenv文件中设置

在开发环境中,调试模式(Debug Mode)将开启,运行flask run程序会自动激活Werkzeug内置的调试器和重载器。

注意在生产环境绝对不能开启调试模式。

调试器:当程序出错时,会在网页上看到详细的错误追踪,有时候内容实在太多,把顶部的报错信息复制,通过Ctrl + F查找,可以迅速确定到报错位置。

调试器允许在网页上运行python代码。单机错误信息右侧的命令行图标,会弹出窗口要求输入PIN码,也就是在启动服务器在命令行窗口打印出的调试器PIN码。输入PIN码后,可以单击错误堆栈的某个节点右侧的命令行节面图标,这回打开一个包含代码执行上下文信息的python shell,可以利用它来进行调试。

重载器:每次修改代码后,会自动重启服务器即可看到修改的变化。HTML文件修改不会重启服务器,直接刷新网页就可以了。

默认使用的是Werkzeug内置的stat重载器,缺点是耗电严重,准确性一般。改用python库中的Watchdog,因为只有开发环境使用,所以安装时在后面添加--dev.会在pipfile文件的dev-packages部分显示开发依赖包。

pipenv install watchdog --dev

python shell

在flask项目中可以使用flask shell命令打开python shell,退出可以执行exit()quit(),windows中可以使用Ctrl+Z并按Enter退出,Linux和macOS则按Ctrl+D直接退回。

使用flask shell命令打开的python shell自动包含程序上下文,并且已经导入了app实例:

>>> app
<Flask 'hello'>
>>> app.name
'hello'

我试了下用python打开python shell,然后直接输入app会报错

(helloflask) D:\GitHub\flask\helloflask\demos\hello>python
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 22:45:29) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> app
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'app' is not defined

需要提前导入app实例才行

>>> from hello import app
>>> app
<Flask 'hello'>
>>> app.name
'hello'

上下文(context)可以理解为环境。为了正常运行,一些相关操作的状态和数据需要被临时保存下来,这些状态和数据被统称为上下文,在flask中,上下文有两种,分为程序上下文和请求上下文。后面记得单独整一篇上下文的笔记。


来源https://zhuanlan.zhihu.com/p/159073021

11

评论

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

站点声明:本站转载作品版权归原作者及来源网站所有,原创内容作品版权归作者所有,任何内容转载、商业用途等均须联系原作者并注明来源。

© 2019 The Pride & Joy of an Artisan. · Designed By duoguyu · Powered By Django京ICP备19006898号-1 开往-友链接力
相关侵权、举报、投诉及建议等,请发E-mail:lemont0086@163.com

友情链接: 大炳哥的博客 逐梦个人博客 十年之约 青城 涛博客 Thrive Blog 关关和六六 扶苏 穿梭虫洞 浪海导航 甜鱼