准备工作
1.安装pip和pipenv
pip --version (查看pip版本,一般安装python自带)
pip install <某个包的名称>
pip install pipenv
2.创建虚拟环境
pipenv install (创建虚拟环境)
pipenv shell (显式激活虚拟环境)
pipenv run python hello.py (不显式执行命令)
3.管理依赖
在创建虚拟环境时,如果项目根目录下没有Pipfile文件,pipenv install命令会在项目文件夹下创建Pipfile(记录项目依赖包列表)和Pipfile.lock(固定版本的详细依赖包列表)文件
当需要在一个新的环境运行程序时,只需要执行pipenv install命令。Pipenv就会创建一个新的虚拟环境,然后自动从Pipfile中读取依赖并安装到新创建的虚拟环境中。
4.安装flask
pipenv install flask (下载)
pipenv update flask (更新)
同时被安装的还有五个依赖包:
Hello, Flask
1.最小的flask程序
app.py:
from flask import Flask
app = Flask(__name__) # 创建程序实例,实例化Flask类,__name__对于app.py来说值为app
@app.route('/') # 装饰器,注册路由,绑定根地址/和index()函数
def index(): # 视图函数
return 'Hello Flask!
'
对于简单的程序来说,程序的主模块一般命名为app.py。你也可以使用其他名称,比如hello.py,但是要避免使用flask.py,因为这和Flask本身冲突。
1.一个视图函数可以绑定多个URL
@app.route('/hi')
@app.route('/hello')
def say_hello():
return 'Hello, Flask!
'
2.动态URL
@app.route('/greet/')
def greet(name):
return 'Hello, %s!
' % name
@app.route('/greet')
@app.route('/greet/')
def greet(name='Programmer'): # 默认
return 'Hello, %s!
' % name
2.启动开发服务器
Flask内置简单开发服务器(由依赖包Werkzeug提供)
通过依赖包Click,当安装Flask后自动添加一个flask命令脚本
其中,flask run
命令用来启动内置的开发服务器,可以执行 flask --help
查看所有可用的命令
http://127.0.0.1即localhost,是指向本地机的IP地址,一般用来测试。Flask默认使用5000端口,对于上面的地址,你也可以使用http://localhost:5000/。
flask run 是如何找到程序实例的?
自动探测存在下面规则:
1.从当前目录寻找app.py和wsgi.py模块,并从中寻找名为app或application的程序实例
2.从环境变量FLASK_APP对应的模块名/导入路径寻找名为app或application的程序实例
$ export FLASK_APP = hello # Linux macOS
> set FLASK_APP = hello # windows
3.如果安装了 python-dotenv
自动从 .flaskenv 文件和 .env 文件中加载环境变量,优先级:手动设置的环境变量 > .env中设置的环境变量 > .flaskenv设置的环境变量
pipenv install python-dotenv
SOME_VAR=1
FOO="BAR"
# .flaskenv和.env文件中环境变量用键值对形式定义,每行一个,#开头的是注释
.flaskenv 用来存储和Flask相关的公开环境变量,比如FLASK_APP
.env 用来存储包含敏感信息的环境变量(服务器账户名密码),绝不能提交到git仓库中,.gitignore
3.更多的启动选项
flask run --host=0.0.0.0 # 使服务器外部可见
flask run --port=8000 # 改变默认端口5000
可以通过环境变量设置:
FLASK_RUN_HOST = 0.0.0.0
FLASK_RUN_PORT = 8000
4.设置运行环境
开发环境是指我们在本地编写和测试程序时的计算机环境,而生产环境与开发环境相对,它指的是网站部署上线供用户访问时的服务器环境。默认为production(生产)。
开发环境(development environment)和生产环境(production environment)
FLASK_ENV = development # 改变环境变量,将运行环境设置为开发环境
开发环境下会激活Werkzeug内置的调试器(debugger)和重载器(reloader):
-
调试器
当程序出错时,我们可以在网页上看到详细的错误追踪信息
-
重载器
监测文件变动,然后重新启动开发服务器
5.flask shell
使用flask shell命令打开的Python Shell自动包含程序上下文,并且已经导入了app实例:
>>> app
>>> app.name
'app'
6.Flask扩展
扩展(extension)即使用Flask提供的API接口编写的Python库,可以为Flask程序添加各种各样的功能。在编写程序时,应该尽量从实际需求出发,只在需要的时候使用扩展,并把扩展的质量和兼容性作为考虑因素,尽量在效率和灵活性之间达到平衡。
from flask import Flask
from flask_foo import Foo
app = Flask(__name__)
foo = Foo(app)
7.项目配置
在Flask中,配置变量就是一些大写形式的Python变量,你也可以称之为配置参数或配置键。和平时使用变量不同,这些配置变量都通过Flask对象的app.config属性作为统一的接口来设置和获取,它指向的Config类实际上是字典的子类,所以你可以像操作其他字典一样操作它。
app.config['ADMIN_NAME'] = 'Peter'
app.config.update(
TESTING = True,
SECRET_KEY = '_5#yF4Q8z\n\xec]/'
)
value = app.config['ADMIN_NAME']
某些扩展需要读取配置值来完成初始化操作,因此我们应该尽量将加载配置的操作提前,最好在程序实例app创建后就加载配置。
8.URL与断点
@app.route('/')
def index():
return 'Hello Flask!' # 这个路由的端点即视图函数的名称index
# 调用url_for('index')可以获取到对应的URL,'/'
@app.route('/hello/')
def greet(name):
return 'Hello %s!' % name # url_for('greet',name='cad'),得到'/hello/cad'
9.Flask命令
flask run
flask <命令名>
@app.cli.command() # 装饰器,自定义命令,传入参数('say-hello')修改命令名
def hello(): # 函数的名称即命令名称,用flask hello命令来触发函数
"""Just say hello.""" # 帮助信息显示 flask hello --help
click.echo('Hello, Human!')# echo()函数,在命令行界面输出字符
10.模板与静态文件
模板(template)即包含程序页面的HTML文件,静态文件(static file)则是需要在HTML文件中加载的CSS和JavaScript文件,以及图片、字体文件等资源文件。
hello/
- templates/
- static/
- app.py
11.Flask与MVC架构
MVC | Flask |
---|---|
数据处理(Model) | SQLAlchemy创建数据库模型 |
用户界面(View) | Jinja2渲染的HTML模板 |
交互逻辑(Controller) | 视图函数 |