基于Python的Flask框架实战全流程从新建到部署【2】

17 篇文章 0 订阅
2 篇文章 0 订阅

本项目是基于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博客

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值