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

news2024/9/19 10:45:18

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2095195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++的内存分布、动态内存管理等的介绍

文章目录 前言一、C/C的内存分布二、C/C动态内存管理总结 前言 C/C的内存分布、动态内存管理等的介绍 一、C/C的内存分布 因为程序在运行过程中需要存储一些不同的数据,所以需要对内存空间进行分类 二、C/C动态内存管理 C语言动态内存管理是malloc / calloc / rea…

光降解水凝胶:三色光响应

大家好,今天来了解一种三色可见光波长选择性光降解水凝胶生物材料——《Tricolor visible wavelength-selective photodegradable hydrogel biomaterials》发表于《Nature Communications》,其交联剂Rubiq、Rubp和oNB对低能可见光(400 - 617n…

洛科威岩棉板重塑屋面应用,以多重优势成为“优选材料”

屋面作为建筑物的“外衣”,不仅承载着遮风挡雨的基本功能,更在保温隔热、防火安全、防潮隔音等方面发挥着举足轻重的作用。然而,面对极端气候、自然灾害以及日益严苛的环保标准,传统屋面材料逐渐暴露出其局限性,保温效…

JVM垃圾判定算法

垃圾收集技术是Java的一堵高墙。Java堆内存中存放着几乎所有的对象实例,垃圾收集器在对堆内存进行回收前,第一件事情就是要确定这些对象中哪些还存活,哪些已经死去(即不可能再被任何途径使用的对象)。也就是判定垃圾。…

STM32 使用8720 通过LWIP发送数据

一、硬件IOC 1、GPIO 2、NVIC 3、SYS 4、RCC 5、ETH 6、USART 7、LWIP 二、软件函数 1、Main /* USER CODE BEGIN Includes */ #include "ytcesys.h" /* USER CODE END Includes *//* USER CODE BEGIN 2 */ ethreset(); MX_LWIP_Init(); OPEN_USART1…

chunqiude

CVE-2022-28512 靶标介绍: Fantastic Blog (CMS)是一个绝对出色的博客/文章网络内容管理系统。它使您可以轻松地管理您的网站或博客,它为您提供了广泛的功能来定制您的博客以满足您的需求。它具有强大的功能,您无需接触任何代码即可启动并运…

【Java开发】Maven安装配置详细教程

原创文章,不得转载。 文章目录 产生背景用途安装配置本地仓库配置镜像 产生背景 在Java应用程序开发中,随着项目规模的不断扩大和复杂性增加,项目依赖的库、插件和配置文件也变得愈加复杂。传统的项目构建工具(如Ant)…

简单选择排序例题

从上面题目看出,如果排序方法可保证在排序前后排序码相同的相对位置不变,也就是四个选项里,21和21*之间不会交换 简单选择排序方法是:首先在所有记录中找到排序吗最小的记录,把它与第一个记录交换,然后在其…

EXO:模型最终验证的地方;infer_tensor;step;MLXDynamicShardInferenceEngine

目录 EXO:模型最终验证的地方 EXO:infer_tensor EXO:step MXNet的 mx.array 类型是什么 NDArray优化了什么 1. 异步计算和内存优化 2. 高效的数学和线性代数运算 3. 稀疏数据支持 4. 自动化求导 举例说明 EXO:模型最终验证的地方 EXO:infer_tensor 这段代码定…

【科技前沿】用深度强化学习优化电网,让电力调度更聪明!

Hey小伙伴们,今天我要跟大家分享一个超级酷炫的技术应用——深度强化学习在电网优化中的典型案例!如果你对机器学习感兴趣,或是正寻找如何用AI技术解决实际问题的方法,这篇分享绝对不容错过!👩‍&#x1f4…

Pyqt5高级技巧2:Tab顺序、伙伴快捷键、各类常用控件的事件、可移动的卡片式布局(含基础Demo)

目录 一、编辑Tab顺序 二、编辑伙伴 三、设置快捷键(仅MainWindow可用) 四、信号槽 【基本介绍】 【常用信号槽】控件对窗体(拖地) 【常用信号槽】控件对控件 【自定义信号槽】步骤 五、设计文件的转化 六、GUI的运行 1…

【研发日记】吃透新能源充电协议(一)——GB27930实例报文解析

文章目录 前言 背景介绍 充电协议框架 充电握手阶段 充电准备阶段 充电传输阶段 充电结束阶段 错误处理阶段 总结 参考资料 前言 近期在一个嵌入式开发项目中,用到了新能源充电协议,期间在翻阅各种资料文件时,一些地方还是容易理解…

包装和类练习 Stack的使用

目录 1.最小栈 2.有效的括号 3.栈的压入、弹出序列 4.逆波兰表达式求值 5.链栈与顺序栈相比&#xff0c;比较明显的优点是&#xff08; &#xff09; 1.最小栈 2.有效的括号 class Solution {public boolean isValid(String s) {Stack<Character> st new Stack<&g…

I/O方式

目录 一、程序查询方式 1.程序查询方式的特点 2.程序查询方式可分类 ①独占查询 ②定时查询 二、中断方式 1.中断I/O流程 2.例题 三、DMA方式 1.DMA控制器 2.特点 3. DMA的传送方式 ①停止CPU ②周期挪用 ③DMA和CPU交替访存 4.传送流程 ①预处理 ②数据传…

AIGC时代算法工程师的面试秘籍(第二十一式2024.8.19-9.1) |【三年面试五年模拟】

写在前面 【三年面试五年模拟】旨在整理&挖掘AI算法工程师在实习/校招/社招时所需的干货知识点与面试经验&#xff0c;力求让读者在获得心仪offer的同时&#xff0c;增强技术基本面。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流学习&#x1f4aa; 欢迎大家关注Rocky…

海外云服务器安装 JDK8 (Ubuntu 18.04 记录篇)

本文首发于 秋码记录 曾几何时&#xff0c;我可是国内云厂商的忠实用户啊。 而今&#xff0c;却不再为云服务器&#xff08;尤指国内云厂商&#xff09;续费了&#xff0c;作为我的个人网站 秋码记录 选择了托管在 gitlab.com Pages服务上。 国内云厂商对新老用户持有两种截…

Linux网络编程入门及OSI七层模型

目录 OSI七层模型 TCP/IP五层(或四层)模型 ​编辑 协议报头 局域网 以太网 令牌环网 无线LAN OSI七层模型 TCP/IP五层(或四层)模型 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现…

全能型AI与专业型AI:未来的选择与挑战

引言 随着人工智能技术的飞速发展&#xff0c;市场上出现了多种类型的AI产品&#xff0c;其中全能型AI与专业型AI是两大主要类别。近期&#xff0c;OpenAI预计推出的代号为“草莓”的新AI引起了广泛关注&#xff0c;这一全能型AI的推出引发了关于未来AI趋势的热烈讨论。在这个…

学会自定义LayoutManager

最开始我在学习自定义LayoutManager的时候&#xff0c;也是网上搜文章&#xff0c;看博客&#xff0c;以及一些公众号的推文。刚开始看的时候觉得还是那么回事&#xff0c;但是在慢慢的深入LayoutManager源码才发现很多的文章其实都是不合格&#xff0c;乃至可以说是很误导人的…

vue3+elementplus的表格展示和分页实战

文章目录 一、Element Plus的安装使用二、el-table 表格组件三、el-pagination 分页组件四、全部代码五、效果 Element Plus 是一个基于 Vue 3 的现代化 UI 组件库&#xff0c;旨在帮助开发者快速构建美观且功能丰富的 Web 应用程序。它提供了大量的 UI 组件&#xff0c;如按钮…