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中,上下文有两种,分为程序上下文和申请上下文。前面记得独自整一篇上下文的笔记。