本项目是基于win10系统运行以及操作的,部署在win7系统。
Flask 是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。
本文是flask框架实战项目,从新建、运行、测试、部署项目全流程进行梳理和总结 ,这个项目主要功能注册登录、添加list信息,修改列表、删除列表和退出功能。方便自己以后查看,也欢迎正在使用或学习的小伙伴们参考,如果发现问题请评论区留言指正,感谢。
目录
一、项目成功展示
1.1 注册登录
1.2 新增列表数据
1.3 修改删除数据
1.4 项目文件存放位置
二、新建项目
2.1 新建项目
2.2 创建虚拟环境
三、应用设置
3.1 应用工厂
3.2 运行项目
四、数据库及功能部分代码
五、安装项目
5.1安装项目
六、测试
6.1 运行测试
七、部署项目
7.1构建和安装
八 、配置密钥
九、运行服务器
一、项目成功展示
1.1 注册登录
首先用户可以进行注册登录操作,把用户信息保存至数据库。
1.2 新增列表数据
用户登录成功后,可以新增列表数据,比如博客学习记录,待办事项等信息,可以填写博客标题和内容,方便查看和记录。
1.3 修改删除数据
可以对已添加的列表数据,如博客记录内容的修改、或者对待办事项已完成的删除操作。
1.4 项目文件存放位置
二、新建项目
新建项目包括创建项目以及虚拟环境。
2.1 新建项目
win + r 打开命令行工具输入指令新建文件并打开:
mkdir flask-tutorial # 新建文件 即新建一个文件名称是flask-tutorial的项目
cd flask-tutorial #打开项目
2.2 创建虚拟环境
创建一个虚拟环境。创建完成后项目文件夹中会有一个 venv
文件夹:
py -3 -m venv venv # 创建虚拟环境
venv\Scripts\activate # 激活虚拟环境
三、应用设置
一个 Flask 应用是一个 Falsk 类的实例,可以在一个函数内部创建Flask实例来代替创建全局实例。这个函数被 称为 应用工厂 。所有应用相关的配置、注册和其他设置都会在函数内部完成, 然后返回这个应用。
3.1 应用工厂
创建 flaskr
文件夹并且文件夹内添加 __init__.py
文件。 __init__.py
有两个作用:一是包含应用工厂;二是 告诉 Python flaskr
文件夹应当视作为一个包。
__init__.py代码如下:
import os
from flask import Flask
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='dev',
DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
)
if test_config is None:
# load the instance config, if it exists, when not testing
app.config.from_pyfile('config.py', silent=True)
else:
# load the test config if passed in
app.config.from_mapping(test_config)
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
# a simple page that says hello
@app.route('/hello')
def hello():
return 'Hello, World!'
return app
后面代码不会全部贴出,此教程重点是项目的整体全流程项目,完整项目代码会在另一篇文章中具体解释,也会上传至资源中心,有需要可以下载。
3.2 运行项目
运行应用还是在根目录下flask-tutorial,主要设置应用在哪里,指定模式为开发模式,运行应用。
set FLASK_APP=flaskr #设置应用在哪里
set FLASK_ENV=development #设置为开发模式
flask run #运行项目
运行结果如图所示,可以访问http:// 127.0.0.1:5000/hello 看运行结果。
恭喜你, Flask 网络应用成功运行了!
四、数据库及功能部分代码
应用使用一个 SQLite 数据库来储存用户和博客内容。 Python 内置了 SQLite 数据库支持,相应的模块为 sqlite3 。
我们继续开发数据连接视图,项目的功能部分注册登录,验证注册信息,新增表单保存至数据,修改数据,删除数据,以及登出操作。注册登录以及博客新增编辑首页列表使用的模板静态文件。
这部分代码以及项目的完整代码都在另一篇文章。项目代码部分已经完成现在我们项目要进行可安装化,以使用项目可以安装到其他环境。
五、安装项目
项目可安装化是指创建一个项目 发行 文件,以使用项目可以安装到其他环境, 就像在你的项目中安装 Flask 一样。
我们先建一个setup.py文件,描述项目及其从属的文件。代码如下:
from setuptools import find_packages, setup
setup(
name='flaskr',
version='1.0.0',
packages=find_packages(),
include_package_data=True,
zip_safe=False,
install_requires=[
'flask',
],
)
packages
告诉 Python 包所包括的文件夹(及其所包含的 Python 文件)。 find_packages()
自动找到这些文件夹,这样就不用手动写出来。 为了包含其他文件夹,如静态文件和模板文件所在的文件夹,需要设置 include_package_data
。 Python 还需要一个名为 MANIFEST.in
文件来说明这些文件有哪些。MANIFEST文件代码如下:
include flaskr/schema.sql
graft flaskr/static
graft flaskr/templates
global-exclude *.pyc
5.1安装项目
使用 pip
在虚拟环境中安装项目:
pip install -e . #安装项目
pip list #来查看项目的安装情况
六、测试
为应用写单元测试可以检查代码是否按预期执行。 Flask 提供了测试客户端, 可以模拟向应用发送请求并返回响应数据。
越接近 100% 的测试覆盖,越能够保证修改代码后不会出现意外。但是 100% 测试 覆盖不能保证应用没有错误。通常,测试不会覆盖用户如何在浏览器中与应用进行 交互。尽管如此,在开发过程中,测试覆盖仍然是非常重要的。
我们使用 pytest 和 coverage 来进行测试和衡量代码。先安装它们:
pip install pytest coverage
每个测试会创建一个新的临时数据库文件,并产生一些用于测试的数据。写一个 SQL 文件来插入数据。
data.sql
INSERT INTO user (username, password)
VALUES
('test', 'pbkdf2:sha256:50000$TCI4GzcX$0de171a4f4dac32e3364c7ddc7c14f3e2fa61f2d17574483f7ffbb431b4acb2f'),
('other', 'pbkdf2:sha256:50000$kJPKsz6N$d2d4784f1b030a9761f5ccaeeaca413f27f2ecb76d6168407af962ddce849f79');
INSERT INTO post (title, body, author_id, created)
VALUES
('test title', 'test' || x'0a' || 'body', 1, '2018-01-01 00:00:00');
app
固件会调用工厂并为测试传递 test_config
来配置应用和数据库,而 不使用本地的开发配置。
测试部分的代码也是在完整项目中包含了。工厂测试、验证测试、博客测试等。
6.1 运行测试
另外新建setup.cfg
文件,这些配置不是必需的,但是 可以使用测试更简洁明了。代码如下:
[tool:pytest]
testpaths = tests
[coverage:run]
branch = True
source =
flaskr
使用pytest 来运行测试。该命令会找到并且运行所有测试
#第一种
pytest
#第二种 可以看到一个简单的覆盖率报告
coverage run -m pytest
还可以生成 HTML 报告,可以看到每个文件中测试覆盖了哪些行。如下图所示:
coverage html #生成测试报告的html文件
七、部署项目
本文假设你要把应用部署到一个服务器上,你可以在用于开发的电脑中 设置一个新的虚拟环境,以便于尝试下面的内容。
7.1构建和安装
当需要把应用部署到其他地方时,需要构建一个发行文件。当前 Python 的标准发行 文件是 wheel 格式的,扩展名为 .whl
。先确保已经安装好 wheel 库:
pip install wheel
用 Python 运行 setup.py
会得到一个命令行工具,以使用构建相关命令。 bdist_wheel
命令会构建一个 wheel 发行文件。
python setup.py bdist_wheel
构建的文件为 dist/flaskr-1.0.0-py3-none-any.whl
。文件名由项目名称、版 本号和一些关于项目安装要求的标记组成。复制这个文件到另一台机器,并且创建一个新的虚拟环境,然后用 pip
安装这个文件:
pip install flaskr-1.0.0-py3-none-any.whl
如上图所示,在python文件夹中创建新的虚拟环境,pip指令安装文件。
需要再次运行 init-db
命令,在实例文件夹中 创建数据库。
set FLASK_APP=flaskr
flask init-db
当 Flask 探测到它已被安装(不在编辑模式下),它会与前文不同,使用 venv/var/flaskr-instance
作为实例文件夹。
八 、配置密钥
在产品中我们应当设置一 些随机内容。否则网络攻击者就可以使用公开的 'dev'
键来修改会话 cookie ,或者其他任何使用密钥的东西。
生成随机密钥:
python -c 'import os; print(os.urandom(16))'
b'_5#y2L"F4Q8z\n\xec]/'
在实例文件夹创建一个 config.py
文件
SECRET_KEY = b'_5#y2L"F4Q8z\n\xec]/'
九、运行服务器
我们选择一个产品级的 WSGI 服务器,这里选择的Waitress,因为既可以在Linux环境下使用,又能在windows环境下使用。首先在 虚拟环境中安装它:
pip install waitress
运行应用需要告知 Waitree 导入并调用应用工厂来得到一个应用对象:
waitress-serve --call 'flaskr:create_app'
太棒了!我们已经成功把应用部署到另外一台电脑啦,并且成功访问到了应用!
附加内容:
Flask 入门基础知识:基于python的web框架 Flask 入门基础知识【1】-CSDN博客