工具帝 发布的文章

Web 程序通常有两种部署方式:传统部署和云部署。传统部署指的是在使用物理主机或虚拟主机上部署程序,你通常需要在一个 Linux 系统上完成所有的部署操作;云部署则是使用其他公司提供的云平台,这些平台为你设置好了底层服务,包括 Web 服务器、数据库等等,你只需要上传代码并进行一些简单设置即可完成部署。这一章我们会介绍使用云平台 PythonAnywhere 来部署程序。

- 阅读剩余部分 -

虽然我们的程序开发已经完成,但随着功能的增多,把所有代码放在 app.py 里会让后续的开发和维护变得麻烦。这一章,我们要对项目代码进行一次重构,让项目组织变得更加合理。Flask 对项目结构没有固定要求,你可以使用单脚本,也可以使用包。这一章我们会学习使用包来组织程序。先来看看我们目前的项目文件结构:

- 阅读剩余部分 -

在开发大型程序时,为程序编写自动化测试是非常重要的。手动测试所有功能不仅耗时而且容易出错,而自动化测试可以减轻这个负担并提高测试的可靠性。本章我们将介绍如何使用 Python 的 unittest 测试框架编写单元测试。单元测试单元测试是对程序中的独立单元(如函数、方法)进行测试的一种形式。我们将使用 Python 标准库中的 unittest 框架来编写单元测试。下面通过一个简单的例子来介绍一些基本概念。

- 阅读剩余部分 -

本章我们将为程序添加用户认证功能。这将把用户分成两类:管理员和访客。管理员可以通过用户名和密码登录程序,并执行与数据相关的操作;而访客只能浏览页面。在开始之前,我们先来了解如何将密码安全地存储到数据库中。安全储存密码把密码明文存储在数据库中是极其危险的,假如攻击者窃取了你的数据库,那么用户的账号和密码就会被直接泄露。更保险的方式是对每个密码进行计算生成独一无二的密码散列值,这样即使攻击者拿到了散列值,也几乎无法逆向获取到密码。

- 阅读剩余部分 -

在HTML页面中,我们可以使用表单来获取用户输入的数据。下面是一个典型的表单示例:<form method="post"> <label for="name">名字</label> <input type="text" name="name" id="name"><br> <label for="occupation">职业</label> <input type="text" name="occupation" id="occupation"><br> <input type="submit" name="submit" value="登录"> </form>在这段HTML代码中,我们使用<form>标签来定义一个表单,并通过method属性将提交方法设置为POST。<input>元素用于创建表单字段,其中type属性指定为"text"表示创建文本输入框,name属性定义了字段的名称,id属性指定了对应的标识符,用于与<label>元素进行关联。最后的<input>元素类型设置为"submit"表示创建提交按钮。

- 阅读剩余部分 -

在这个教程中,我们选择了SQLite作为数据库管理系统(DBMS)。SQLite是一种关系型数据库管理系统(RDBMS),它基于文件,不需要单独启动数据库服务器。SQLite适合在开发时使用,或者在数据库操作简单、访问量低的程序中使用。SQLite具有以下优点:简单易用:SQLite的设置和配置非常简单,无需复杂的服务器安装和配置过程。轻量级:SQLite数据库以单个文件的形式存储在磁盘上,占用空间小且资源消耗较少。无服务器:与其他关系型数据库管理系统相比,SQLite不需要独立运行的数据库服务器,可以直接与应用程序集成。跨平台:SQLite可在多个操作系统上运行,包括Windows、Mac和Linux等。

- 阅读剩余部分 -

静态文件(static files)是指那些不需要动态生成的文件,例如图片、CSS文件和JavaScript脚本等。在Flask中,我们需要创建一个名为static的文件夹来存放静态文件。这个文件夹应该与程序模块和templates文件夹处于同一目录层级。因此,在项目的根目录下创建static文件夹:$ mkdir static

- 阅读剩余部分 -

在一般的 Web 程序中,访问一个地址通常会返回一个包含各种信息的 HTML 页面。由于我们的程序是动态的,页面中的某些信息需要根据不同的情况进行调整,例如对登录和未登录用户显示不同的信息,因此页面需要在用户访问时根据程序逻辑动态生成。我们将包含变量和运算逻辑的 HTML 或其他格式的文本称为模板,而执行这些变量替换和逻辑计算的过程称为渲染。在本章中,我们将学习如何使用模板渲染引擎——Jinja2。根据默认设置,Flask 会从程序实例所在模块的同级目录中的 templates 文件夹中寻找模板。由于我们的程序目前存储在项目根目录的 app.py 文件中,所以我们需要在项目根目录创建该文件夹:

- 阅读剩余部分 -