共计 4119 个字符,预计需要花费 11 分钟才能阅读完成。
1. 装置 pipenv 并创立虚拟环境
windows:
pip install pipenv
Linux 或 macOS:
sudo pip install pipenv
如果有多个版本的 python 留神是装置到哪个 python 上,查看应用 pip 还是 pip3。
查看 pipenv 是否装置和版本号
pipenv –version
创立虚拟环境
先在我的项目跟目录下创立.venv 文件夹,这样使得虚拟环境装置在本我的项目下。默认状况下 pipenv 会对立治理虚拟环境,在 windows 中虚拟环境文件夹在 C:\Users\Administrator.virtualenvs\ 目录下,在 Linux 或 macOS 中会在~/.local/share/virtualenvs 目录下创立。命令行在创立实现会提醒虚拟环境文件夹地位。
pipenv install
如果目录下没有 pipfile 和 pipfile.lock 文件,则会创立这两个文件,如果有,会装置 pipfile 里列出的依赖包。
激活虚拟环境
pipenv shell
除了显示地激活虚拟环境,pipenv 还提供了一个 pipenv run 命令,这个名利容许在不显示激活虚拟环境即可在当前目录的虚拟环境中执行命令,例如:
pipenv run python hello.py
pipenv install 只有在当前目录,无论激不激活虚拟环境,安装包时都会装在虚拟环境中。
pipfile 和 pipfile.lock 用于治理依赖,代替 requirements.txt 文件,劣势是无需手动保护这两个文件,当应用 pipenv 装置 / 删除 / 更新依赖包时,这两个文件会自动更新。requirements.txt 须要手动保护,在文件中指出了包和对应版本号,然而这并不能保障不同计算机装置的就是同一个包,然而 pipfile.lock 将包的具体版本进行 hash,应用这个 hash 装置的包就会是雷同版本的雷同包,不会呈现雷同版本,然而包不一样的状况。
另外 pipfile 文件内还辨别一般依赖包和开发专属依赖包,一般依赖包是开发环境和生产环境都须要用到的,开发专属依赖包则只在开发环境应用,生产环境用不到。装置开发环境依赖包命令在一般装置命令前面加 –dev:
pipenv install watchdog –dev
查看依赖列表
pipenv graph
或在虚拟环境中应用
pip list
前者展现的内容会更具体些,会写出须要的依赖包须要高于哪个版本,而以后的包版本号是多少。
降级命令
pipenv update flask
2. 装置并运行 flask
装置 flask
pipenv install flask
装置 flask 时还同时装置了 5 个依赖包:
- Jinja2(模板渲染引擎)
- MarkupSafe(HTML 字符本义工具,escape)
- Werkzeug(WSGI 工具集,解决申请与相应,内置 WSGI 开发服务器、调试器和重载器)
- click(命令行工具)
- itsdangerous(提供各种加密签名命令)
在我的项目根目录下创立 app.py,名字能够轻易取,然而非 app.py 须要设置环境变量 FLASK_APP= 文件名
启动开发服务器
flask 通过依赖包 Click 内置了一个 CLI(Command Line Interface, 命令行交互界面)零碎。当装置 flask 后,会主动增加一个 flask 命令脚本。能够通过 flask 命令执行内置命令、扩大提供的命令或自定义的命令。前提是须要提前激活虚拟环境,如果没有激活须要在后面增加 pipenv run 例如 pipenv run flask run.
能够通过 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 会主动胎侧程序实例,主动探测规定:
- 从运行 flask run 的当前目录寻找 app.py 和 wsgi.py 模块,并从中寻找名为 app 或 application 的程序实例。
- 从环境变量 FLASK_APP 对应的值寻找 app 或 application 的程序实例。
程序主模块命名为 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_APP、FLASK_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
3.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 中,上下文有两种,分为程序上下文和申请上下文。前面记得独自整一篇上下文的笔记。