PythonWeb全栈开发项目式教程(慕课版) 课件 项目1-4:搭建“古典文学网”的开发环境-“古典文学网”前端框架解析及开发_第1页
PythonWeb全栈开发项目式教程(慕课版) 课件 项目1-4:搭建“古典文学网”的开发环境-“古典文学网”前端框架解析及开发_第2页
PythonWeb全栈开发项目式教程(慕课版) 课件 项目1-4:搭建“古典文学网”的开发环境-“古典文学网”前端框架解析及开发_第3页
PythonWeb全栈开发项目式教程(慕课版) 课件 项目1-4:搭建“古典文学网”的开发环境-“古典文学网”前端框架解析及开发_第4页
PythonWeb全栈开发项目式教程(慕课版) 课件 项目1-4:搭建“古典文学网”的开发环境-“古典文学网”前端框架解析及开发_第5页
已阅读5页,还剩422页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目1搭建“古典文学网”的开发环境XXX202X-XX-XX

目录02.任务1:搭建项目后端开发环境05.任务4:开发“hivue”前端项目03.任务2:开发“hiflask”后端项目04.任务3:开发“hiflask”后端项目01.知识储备:全栈开发技术06.拓展任务

学习目标知识目标:

了解“古典文学网”项目需求,掌握其功能结构与设计理念;

了解“全栈开发”概念与特点,掌握其开发理念,并灵活运用于实践中;

了解“前后端分离技术”的原理与优势,掌握其技术栈及实际运用。能力目标:

通过学习“古典文学网”后端技术,能熟练搭建后端开发环境;

通过学习“古典文学网”前端技术,能够熟练搭建前端开发环境。素质目标:

培养软件工程师的系统思维,严格遵守行业规范和标准,提高软件质量和可靠性;

培养软件工程师的责任感、职业精神和团队精神,遵守职业道德。01项目描述

1.1.项目需求老袁对“古典文学网”项目进行了如下介绍:该项目是一个专注于高品质古典文学的在线阅读与交流平台,旨在推动中华文化的传承与发展。在这个平台上,用户可以欣赏到丰富的古典文学作品,参与书评讨论,并管理自己的个人中心。该项目采用全栈开发方式,运用前后端分离技术架构,使用Python、Flask、Vue.js、ElementPlus和MySQL等技术进行开发,旨在为用户提供一款功能强大、界面友好的Web应用。

1.2.项目WBS工作分解结构图小白认真听取了老袁对“古典文学网”项目的详细介绍,并结合项目需求文档,精心绘制了“古典文学网”项目的WBS工作分解结构图,如图所示。02知识储备

2.知识储备在“古典文学网”项目正式开发之前,老袁指导小白先初步了解项目所采用的技术框架,包括全栈开发、前后端分离技术等。

2.1.全栈开发

全栈开发是一种能提升开发效率和软件质量的开发模式。这种开发模式,需要开发人员具备多元化的技能和实践经验,能独立承担开发一个应用程序的全部工作,涵盖前端开发与后端开发、数据库管理以及系统架构设计等多个方面。全栈开发人员应熟练掌握HTML、CSS、JavaScript等前端技术,同时还应了解后端语言如Python、Node.js、Ruby等,并对数据库管理、系统设计以及性能优化等领域有所涉猎。

全栈开发的优势在于,它能提升开发效率和软件质量,同时降低沟通和协调成本。因为全栈开发人员具备全面的技能,所以他们能更深入地理解和掌握项目的整体架构和细节,从而更有效地完成开发工作。

2.2.前后端分离技术前后端分离技术是一种应用程序架构模式,它将前端(用户界面)和后端(服务器端)的开发任务明确区分,并通过预先定义的接口进行通信。这种架构模式的实施,使得前端和后端开发团队能够独立进行开发、测试和部署工作,从而极大地提高了软件开发的效率和质量。在前后端分离架构中,前端团队主要负责呈现数据以及实现用户交互,而后端团队则专注于处理业务逻辑和数据存储。前端团队可以利用各种前端技术和框架,创造出丰富、动态的用户界面,为用户提供流畅、直观的使用体验。同时,后端团队则可以利用后端技术和数据库管理系统,实现高效、稳定的数据处理和业务逻辑执行。前后端分离技术架构如图1.2所示。

2.2.前后端分离技术logo图1.2前后端分离技术架构图

2.3.Python开发技术Python的简介Python是由荷兰计算机科学家吉多范罗苏姆(GuidovanRossum)于1989年首次开发的编程语言,最初被设计为一种简单易学的脚本语言,主要用于编写自动化脚本。然而,随着计算机科学的不断发展,Python也逐步演变成为一种功能全面、用途广泛的编程语言。Python的应用领域非常广泛,无论是Web开发、数据科学、人工智能、机器学习,还是网络爬虫、系统自动化、游戏开发等领域,Python都发挥着重要的作用。Python的丰富库和框架,如Django、Flask、Pandas、NumPy、TensorFlow等,为开发者提供了强大的工具,使得Python成为许多领域的首选语言。Python语言的Logo图标如图所示。

pip包管理工具pip是Python的包管理工具,它提供了查找、下载、安装和卸载Python包的功能。自Python3.4+版本起,pip包管理工具已经被集成到Python中,使得在线安装依赖库变得非常方便。在Windows系统中,我们可以通过“命令行窗口”直接执行pip命令,或者在VisualStudioCode的终端窗口中执行。这使得在开发过程中管理Python包变得更加高效和便捷。

pip包管理工具

2.4.Flask框架Flask框架的简介Flask框架是一个用Python语言编写的轻量级Web应用框架(Microframework),它适合各种规模的Web项目,无论是小型个人网站还是大型企业级应用。此外,Flask框架的强大插件库为用户提供了实现个性化网站定制的可能性,使其非常适用于快速开发功能强大的Web应用程序和Web服务API。Flask框架的Logo图标如图所示。

2.4.Flask框架Flask框架的特点(1)轻量级和灵活Flask是一个轻量级的Web应用框架,它只包含核心功能,如路由、模板渲染等。这使得Flask非常灵活,开发者可以根据自己的需求自由添加和配置所需的功能。(2)易于扩展Flask采用扩展机制,开发者可以通过添加扩展来扩展其功能。Flask拥有强大的插件库,这些插件可以为Flask添加各种功能,如数据库管理、表单验证、用户认证等。(3)简洁的APIFlask的API非常简洁和易于理解,这使得开发者能够更快速地学习和使用Flask。同时,简洁的API也减少了开发者的学习成本和维护成本。(4)适用于各种应用Flask适用于各种规模和应用类型的Web项目,它的灵活性和可扩展性使得它能够应对各种复杂场景。

2.5.MySQL数据库MySQL数据库是一个开源的关系型数据库管理系统(RDBMS),它最初由瑞典的MySQLAB公司开发,而现在它是甲骨文公司(OracleCorporation)的一部分。由于其强大的性能和灵活性,MySQL已经成为最受欢迎的开源关系型数据库之一。MySQL数据库的Logo图标如图所示。

2.5.MySQL数据库MySQL支持多个操作系统,包括Linux、Windows、macOS等,因此它可以在各种不同的环境中运行。MySQL提供了高效、可靠、稳定的数据存储和管理服务。这使得它成为Web应用程序、企业应用程序和移动应用程序等领域的理想选择。

2.6.Vue开发技术Vue框架的简介Vue框架是一个构建用户界面的渐进式JavaScript框架,它的设计理念使得开发者可以灵活地将其应用于各种规模和复杂度的项目中。与其他大型框架不同,Vue被设计为可以自底向上逐层应用,这意味着开发者可以根据项目的实际需求逐步引入Vue的功能,从而实现平滑的过渡和扩展。Vue框架的Logo图标如图所示。

2.6.Vue开发技术Vue框架的简介Vue框架的核心库专注于视图层,这使得它易于上手,同时也便于与第三方库或已有项目整合。无论是简单的静态页面还是复杂的单页应用,Vue框架都能提供灵活而高效的解决方案。

2.6.Vue开发技术Vue框架的特点(1)轻量级与简单易学Vue的核心库专注于视图层,使得它相比于其他大型框架更为轻量级。同时,Vue采用了简洁的API设计,使得开发者可以快速上手并掌握其使用。(2)组件化开发Vue通过组件化的开发方式,将页面拆分为多个独立的组件,每个组件负责自己的逻辑和样式。组件间可以相互嵌套,使得开发者能够构建出复杂且富有层次感的界面。(3)响应式数据绑定Vue使用了响应式的数据绑定机制,当数据发生变化时,页面会自动更新以反映最新的数据状态。这种机制使得开发者无须手动操作DOM,大大简化了开发过程。03项目任务

3.1.搭建项目后端开发环境在项目的后端开发中,我们采用了Python语言、Flask框架、VisualStudioCode开发工具以及MySQL数据库等核心技术。在正式搭建开发环境之前,我们必须先确认项目电脑所使用的操作系统的版本,以确保兼容性和稳定性(本项目使用Windows64位操作系统)。随后,我们需下载与之兼容的开发工具。需求描述:

3.1.搭建项目后端开发环境任务步骤:1.安装Python开发环境2.安装Flask框架及扩展包3.安装VisualStudioCode开发工具4.安装MySQL数据库

3.1.搭建项目后端开发环境1.安装Python开发环境安装Python语言环境,需要下载Python安装包。我们通过浏览器访问其官方网站,选择适合自己操作系统版本的Python安装包,如图所示。(1)下载Python安装包

3.1.搭建项目后端开发环境下载Python安装包后,接下来进行安装。首先,使用鼠标左键双击下载的Python安装包,这将启动安装程序。安装程序通常会显示一个图形界面,其中包含几个步骤来引导用户完成安装过程,如图所示。1.安装Python开发环境(2)安装Python

3.1.搭建项目后端开发环境在上述界面勾选“Useadminprivilegeswheninstallingpy.exe”和“Addpython.exetoPATH”两项,并单击“Customizeinstallation”链接,按引导提示进行自定义安装,进入高级选项界面,如图所示。在上述的安装界面,勾选图示中的选项,并选中Python安装目录(请勿安装在ProgramFiles目录下)。单击“Install”按钮,完成安装。1.安装Python开发环境(2)安装Python

3.1.搭建项目后端开发环境首先,按下键盘上的Win+R快捷键,这将打开“运行”对话框。在对话框中,输入cmd命令,并单击“确定”或按回车键,以打开命令行窗口。接下来,在命令行窗口中,输入python命令,并按回车键,将显示Python的版本信息,即表示已经安装成功,如图所示。1.安装Python开发环境(3)验证Python

3.1.搭建项目后端开发环境由于一些客观原因,使用Python的pip包管理工具下载第三方库时速度很慢,这时可以使用镜像下载,提高下载速度。请在命令行窗口中输入以下命令,并按下“回车键”后,完成镜像的安装。pipconfigsetglobal.index-url

/pypi/simple1.安装Python开发环境(3)验证Python

3.1.搭建项目后端开发环境2.安装Flask框架及扩展包在进行项目的后端开发时,我们使用Flask框架作为主要开发技术。为此我们需要使用pip工具来安装Flask框架及相关扩展库。以下是在本项目中使用到的相关库及其安装命令的列表。

3.1.搭建项目后端开发环境安装Flask框架为例在此处,我们以安装Flask框架为例,展示如何使用pip工具安装Flask框架。首先,打开命令行窗口,在命令行窗口中,输入以下指令来安装Flask框架。pipinstallflask按下“回车键”后,pip将开始从Python软件包索引(PyPI)下载并安装Flask框架。2.安装Flask框架及扩展包

3.1.搭建项目后端开发环境3.安装VisualStudioCode开发工具安装VisualStudioCode(VSCode)开发工具,需要下载其安装包。我们通过浏览器访问VSCode的官方网站。在官方网站上,选择相应的VSCode安装包进行下载,如图所示。(1)下载VSCode安装包

3.1.搭建项目后端开发环境下载VSCode安装包后,接下来进行安装。首先,使用鼠标左键双击下载的VSCode安装包。这通常会启动安装向导,引导我们完成安装过程。VSCode的操作界面如图所示。3.安装VisualStudioCode开发工具(1)下载VSCode安装包

3.1.搭建项目后端开发环境为了进行项目开发,我们还需要安装一些支持Python的扩展插件。这些插件可以增强VSCode的功能,使其更好地支持Python语言。请按照以下步骤安装相关扩展插件:①

打开VSCode,单击左侧边栏的扩展图标(快捷键Ctrl+Shift+X)打开扩展面板。②

在搜索框中输入插件名称,然后在搜索结果中找到对应插件。③

单击插件旁边的“Install”按钮来安装插件。3.安装VisualStudioCode开发工具(2)VSCode扩展插件安装

3.1.搭建项目后端开发环境3.安装VisualStudioCode开发工具表1.3后端项目所使用到的VSCode扩展库

3.1.搭建项目后端开发环境我们通过浏览器访问MySQL的官方网站。在官方网站上,选择相应的MySQL安装包进行下载,如图所示。4.安装MySQL数据库(1)下载MySQL安装包

3.1.搭建项目后端开发环境下载MySQL安装包后,请使用鼠标左键双击MySQL安装包。这通常会启动安装向导,在安装引导界面,我们勾选“Full”选项,安装MySQL数据库,如图所示。4.安装MySQL数据库(2)安装MySQL数据库

3.1.搭建项目后端开发环境当我们单击“Next”按钮后,安装程序将开始检查我们的安装环境,如果在检查安装环境的过程中,提示缺少VC库(VisualC++库),请先安装VC库。单击“Next”按钮,进入安装确认界面,如图所示。在上述界面中,单击“Execute”按钮后,开始进行安装。4.安装MySQL数据库(2)安装MySQL数据库

3.1.搭建项目后端开发环境在安装完成界面,单击“Next”按钮后,安装程序会进入MySQL配置界面。在该配置过程中,可以配置MySQL的端口、登录账号及密码等配置信息,请按提示完成安装。4.安装MySQL数据库(2)安装MySQL数据库

3.2.开发“hiflask”后端项目为了确保开发环境能够正常运行,我们将开发一个简单的Flask项目进行测试。需求描述:

3.2.开发“hiflask”后端项目任务步骤:1.创建“hiflask”项目2.开发“hiflask”项目3.运行“hiflask”项目

3.2.开发“hiflask”后端项目1.创建“hiflask”项目首先,在磁盘中新建一个名为“hiflask”的文件夹,作为项目存放目录。接下来启动VSCode开发工具,单击菜单栏中的“File”选项,然后在下拉菜单中选择“OpenFolder”命令,打开刚才创建的“hiflask”文件夹,如图所示。

3.2.开发“hiflask”后端项目2.开发“hiflask”项目在“hiflask”项目中,请在VSCode的菜单栏中,单击“File”菜单,然后在下拉菜单中选择“NewFile...”子菜单,新建一个名为App.py的文件,并输入以下代码:#引入Flask框架fromflaskimportFlask#创建Flask框架引用app=Flask(__name__)#定义一个请求方法,用于输出文字@app.route("/")defhello_flask():

return"HelloFlask"#启动Flask程序if__name__=="__main__":

app.run(debug=True)

3.2.开发“hiflask”后端项目3.运行“hiflask”项目请打开“App.py”文件,在VSCode菜单栏中,选中“Run”菜单,然后在下拉菜单中选择“StartDebugging(F5快捷键)”子菜单,启动该项目(选中“PythonFileDebug……”),如图所示。

3.2.开发“hiflask”后端项目3.运行“hiflask”项目通过上面的操作,VSCode将启动“hiflask”项目,并在VSCode的Terminal终端出现如图所示文字,即启动成功。

3.2.开发“hiflask”后端项目运行“hiflask”项目在浏览器中输入上图中红框部分的URL,即可查看运行效果,如图所示。注意:在Terminal终端,可通过快捷键Ctrl+C,可以停止项目运行。

3.3.搭建项目前端开发环境在前端开发中,我们采用了Note.js、Vue.js、Postman等开发工具。在正式搭建开发环境之时,我们需下载与电脑操作系统兼容的开发工具。需求描述:

3.3.搭建项目前端开发环境任务步骤:1.安装Note.js环境2.安装Vue开发插件3.安装Postman开发工具

3.3.搭建项目前端开发环境1.安装Note.js环境安装Vue.js框架,需要下载Note.js安装包。我们通过浏览器访问Node.js的官方网站,选择相应的Node.js安装包进行下载,如图所示。下载Node.js安装包后,使用鼠标左键双击Node.js安装包,启动安装向导,引导我们完成安装。

3.3.搭建项目前端开发环境1.安装Note.js环境Node.js安装完成后,打开命令行窗口,输入“node–v”命令,并按回车键。如果Node.js已经成功安装,会出现Node.js的版本信息,如图所示。

3.3.搭建项目前端开发环境1.安装Note.js环境在进行Vue程序开发时,经常会使用到npm(NodePackageManager)包管理工具,用于安装、更新和管理Node.js的各种模块和包。但是由于一些客观原因,使用npm包工具下载模块和包速度很慢,这时可以使用“cnpm”(中国镜像的npm)包管理工具代替“npm”。打开命令行窗口,在命令行窗口中输入以下命令,并按下回车键后,完成镜像的安装。npminstall-gcnpm--registry=在后续的项目开发过程中,就可以使用它来安装和管理Node.js项目的依赖包。cnpm的使用方式和npm的是一样的,只需将npm的命令换成是cnpm就可以了。

3.3.搭建项目前端开发环境2.安装Vue开发插件Vue官方推荐使用的集成开发环境(IDE)是VisualStudioCode(VSCode),并建议配合Vue语言特性插件Vue-Official使用。我们需要在VSCode中安装一系列扩展插件,具体安装步骤参考本项目中“1.3.1.搭建项目后端开发环境”小节中的“VSCode扩展插件安装”内容。

3.3.搭建项目前端开发环境3.安装Postman开发工具在开发“古典文学网”项目时,前后端采用API接口的方式进行数据交互。为此,我们选择了Postman测试工具进行后端API接口测试。我们通过浏览器访问Postman的官方网站,选择相应的Postman安装包进行下载,如图所示。

3.3.搭建项目前端开发环境3.安装Postman开发工具下载Postman安装包后,请使用鼠标左键双击Postman安装包,通过安装向导,引导我们完成安装。首次使用Postman时,我们需要注册一个账号,并使用账号登录后,即可使用其全部功能。Postman的操作界面,如图所示。

3.4.开发“hivue”前端项目现在,我们已经搭建好“古典文学网”项目的前端开发环境,接下来将开发一个简单的Vue项目进行测试。需求描述:

3.4.开发“hivue”前端项目任务步骤:1.创建“hivue”项目2.开发“hivue”项目3.运行“hivue”项目

3.4.开发“hivue”前端项目1.创建“hivue”项目首先,确保我们安装了最新版本的Node.js,并确定项目工作目录。打开命令行窗口,通过cd命令进入项目工作目录,然后输入以下命令,并按回车键。cnpmcreatevue@latest

3.4.开发“hivue”前端项目1.创建“hivue”项目该命令将会创建一个Vue项目。在此过程中,我们将会看到一些诸如TypeScript和测试支持之类的可选功能提示,可通过左右选择按键选择是否引入可选功能,按下回车键确认,如图所示。

3.4.开发“hivue”前端项目2.开发“hivue”项目启动VSCode开发工具,打开刚才创建的“hivue”项目。如图所示。

3.4.开发“hivue”前端项目2.开发“hivue”项目打开“hivue”项目后,需要在VSCode里面进行换行符(eol)配置。单击左侧边栏的设置图标

打开设置面板,在搜索框输入eol关键字,将其配置为“\n”。如图所示。

3.4.开发“hivue”前端项目3.运行“hivue”项目首先,在VSCode单击菜单栏中的“Terminal”选项,接着在下拉菜单中选择“NewTerminal”命令,以打开一个新的Terminal终端窗口(确保在项目的根目录下打开Terminal)。然后,在Terminal终端窗口中,输入并运行以下的启动指令,即可启动“hivue”应用。cnpminstallcnpmrundev

3.4.开发“hivue”前端项目3.运行“hivue”项目通过上面的操作,VSCode将启动“hivue”项目,并在VSCode的Terminal终端出现如图所示文字,即启动成功。

3.4.开发“hivue”前端项目3.运行“hivue”项目在浏览器中输入上图中红框部分的URL,即可查看运行效果,如图所示。

3.4.开发“hivue”前端项目3.运行“hivue”项目注意:在VSCode的Terminal终端中首次尝试运行cnpm命令时,可能会遇到“cnpm无法加载文件……”之类的错误提示。为了解决这个问题,我们需要以管理员身份运行“WindowsPowerShell”命令行窗口,并在其中执行以下指令,将脚本的执行策略设置为“RemoteSigned”。set-ExecutionPolicyRemoteSigned04项目总结

4.项目总结在老袁的指导下,小白学习了“古典文学网”项目的技术框架和知识。他努力搭建了完整的前后端开发环境,更深入地理解了技术架构和技术栈,并能运用到实际开发中。这个重要的成果为项目的顺利推进打下了基础。我们期待小白在未来工作中表现出色,为项目成功贡献力量。05拓展任务

5.拓展任务我们也幸运地加入一家软件公司,需要开发一个名为“红影赏析”的项目。现在我们需要和小白一样完成该项目的开发。请完成以下项目任务。

5.1.绘制“红影赏析”项目的WBS工作分解结构图项目简介:“红影赏析”项目是一个专注于高品质红色电影的在线浏览与交流平台,其主要目标是推动红色精神的广泛传承与发展。在该项目中,用户将能够欣赏到丰富多样的红色电影作品,并参与热情洋溢的影评讨论,同时还能轻松管理自己的个人中心。请参考“古典文学网”项目,绘制出“红影赏析”项目的WBS工作分解结构图,可参考下图图。需求描述:

5.2.搭建PythonWeb开发环境请搭建“红影赏析”项目的前后端开发环境,以确保自己顺利地完成这项任务,为“红影赏析”项目的后续开发打下坚实的基础。需求描述:谢谢项目2:“古典文学网”后端框架解析与开发

目录01.06.拓展任务02.知识储备04.技能拓展项目描述03.项目任务05.项目总结

学习目标知识目标:了解Flask项目结构及特点,掌握Flask项目的整体框架结构;熟悉Flask的请求和响应,掌握如何处理请求并返回响应;熟悉Flask的路由和蓝图,掌握项目模块化开发的理念及应用。能力目标:通过学习Flask项目结构,能够开发“古典文学网”的后端项目框架;通过学习Flask的请求和响应,能够开发“注册”“登录”API接口;通过学习Flask的路由和蓝图,能够模块化管理项目中的程序路由。素质目标:培养软件工程师的系统思维,严格遵守行业规范和标准,提高软件质量和可靠性;培养软件工程师的责任感、职业精神和团队精神,遵守职业道德。01项目描述

1.项目描述

小白已经搭建了“古典文学网”项目的开发环境,接下来他计划对Flask框架技术进行深入研究,以设计出后端项目的整体架构,并基于这一框架,顺利完成项目的“注册”“登录”API接口的开发,为项目的顺利推进奠定坚实基础。02知识储备

2.知识储备

为了项目的顺利开发,小白需要系统地学习Flask框架的项目布局,掌握Flask框架的核心技术,包括路由和蓝图等关键组件,为后续的编码工作做好了充分的准备。

2.1.Flask程序框架解析1.Flask项目框架

Flask作为一款高度灵活且轻量级的Web框架,其项目结构并不拘泥于固定的模式,而是赋予了开发者充分的自由,允许他们根据自己的喜好进行设计。以下展示的是一个典型的Flask项目框架布局,然而在实际应用中,项目的具体结构可能会因项目的独特需求以及团队的个性化偏好而有所差异。D:/Projects/hi_svr├──app/│├──__init__.py│├──models.py│├──config.py│├──view.py│├──api/│├──templates/│└──static/├──tests/├──.venv/└──app.py

2.1.Flask程序框架解析1.Flask项目框架项目布局中的一些关键目录及文件,具体如表所示。目录/文件说明app/一个包含应用代码和文件的Python包app/api/一个存放后端Api接口的Python包,包括路由定义、数据处理等app/templates/用于存放HTML模板的文件夹。这些模板用于渲染视图app/static/用于存放静态文件的文件夹,如CSS、JavaScript、图片等app/models.py一个用于定义数据库模型的源文件app/views.py一个用于定义视图函数的源文件,处理请求并返回响应app/__init.py__一个用于初始化Flask应用的源文件,并导入其他模块tests/一个包含测试模块的文件夹venv/Python虚拟环境,用于安装Flask和其他依赖的包app.py一个项目程序入口源文件,用于启动项目

2.1.Flask程序框架解析2.Flask应用设置创建Flask应用时,最简单的方法是开始时就初始化一个全局的Flask实例。但项目变大变复杂后,这方法可能不够用。所以,我们可以在函数里创建Flask实例,这样的函数叫“应用工厂”。在应用工厂里,我们完成应用的配置、注册等设置,然后返回实例。这样做让代码更易维护、灵活,项目结构也更清晰和模块化。

2.1.Flask程序框架解析(1)创建应用工厂在app/__init__.py源文件中,我们定义了应用工厂函数,其代码实现如下:fromflaskimportFlaskdefcreate_app():#构建appapp=Flask(__name__)returnapp在上述代码中,我们定义了一个应用工厂函数create_app(),在后续的项目开发中,它能够执行一系列关键操作,如创建Flask实例、加载配置文件以及注册蓝图等。2.Flask应用设置

2.1.Flask程序框架解析(2)运行应用接下来,在app.py文件中,可通过create_app()函数来创建Flask实例。参考代码实现如下:#引入应用工厂函数fromappimportcreate_app#调用工厂,创建appapp=create_app()#一个输出hello的方法@app.route('/')defhello(): return'Hello,World!'#启动Flask程序if__name__=="__main__":app.run()在上述代码中,我们通过app=create_app()

代码创建了一个Flask实例app。2.Flask应用设置

2.2.Flask的路由

在Flask应用中,路由就是连接用户请求的URL和视图函数的方式。Flask会根据HTTP请求的URL在路由表中找到匹配的规则,然后调用相应的视图函数,并把结果返回给用户。

2.2.Flask的路由1.注册路由

Flask使用route()装饰器或add_url_rule()函数来创建URL规则,将函数绑定到URL上,实现路由的注册。一旦路由被注册,当用户访问相应的URL时,就会触发对应的视图函数,并返回该函数的结果作为响应。

2.2.Flask的路由(1)route()装饰器注册路由

在Flask中,route()装饰器的语法相对简单且直观。它用于将一个URL路径映射到一个视图函数上。以下是route()装饰器的基本语法:@app.route(path,methods=['GET','POST',...],**options)defview_function():#函数体returnresponse1.注册路由

2.2.Flask的路由route()装饰器中参数含义如下:path:必选参数,一个字符串,表示URL路径模式。该字符串必须以“/”开头;methods:可选参数,包含HTTP方法的列表,指定HTTP请求方法,默认为['GET'];**options:可选参数,用于进一步定制路由的行为。1.注册路由

2.2.Flask的路由

接下来,我们将展示如何使用route()装饰器来注册路由,实现视图函数与URL之间的映射。以下代码定义了一个register()函数,用以输出一段文字。fromflaskimportFlaskapp=Flask(__name__)#通过route()方法注册路由,URL规则为:/register@app.route('/register',methods=['POST'])defregister():return'这是register()函数!'#启动Flask程序if__name__=="__main__":app.run()1.注册路由

上述代码中,我们定义了一个名为register()的视图函数,然后使用装饰器@app.route('/register',methods=['POST'])注册路由,将URL“/register”与视图函数register()进行映射关联,HTTP请求方法为POST。

2.2.Flask的路由

项目启动后,我们使用Postman测试工具对其进行测试,访问的URL为“:5000/register”,测试结果如图所示。1.注册路由

2.2.Flask的路由(2)add_url_rule()函数注册路由

在Flask中,add_url_rule()函数是另一种注册路由的方式,它提供了更多的灵活性和控制。该函数通常用于在创建Flask应用实例后动态地添加路由规则。下面是add_url_rule()函数的基本语法:app.add_url_rule(rule,endpoint=None,view_func=None,methods=None,

strict_slashes=None,**options)1.注册路由

2.2.Flask的路由add_url_rule()函数中参数含义如下:rule:必选参数,一个字符串,表示URL规则;endpoint:可选参数,与视图函数相关联的端点名;view_func:可选参数,当URL被请求时调用的视图函数。methods:可选参数,包含HTTP方法的列表,指定HTTP请求方法,默认为['GET'];strict_slashes:可选参数,如果为True,则URL必须是严格的,即如果规则中有斜杠,则URL中也必须包含斜杠。默认为None,意味着使用app的配置值;**options:其他可选参数,用于进一步定制路由的行为。1.注册路由

2.2.Flask的路由下面,我们使用add_url_rule()函数来注册路由,代码参考如下。fromflaskimportFlaskapp=Flask(__name__)deflogin():return'这是login()函数!'#add_url_rule()方法注册路由,URL规则为:/login,视图函数为:login()app.add_url_rule(rule="/login",view_func=login)#启动Flask程序if__name__=="__main__":app.run()1.注册路由

上述代码中,我们定义了一个名为login()的视图函数,然后使用app.add_url_rule()函数注册路由,将URL“/login”与视图函数login()进行映射关联,HTTP请求方法默认为GET。

2.2.Flask的路由

项目启动后,我们使用Postman测试工具对其进行测试,访问的URL为“:5000/login”,测试结果如图所示。1.注册路由

2.2.Flask的路由2.变量规则

为了给URL链接增加变量,我们可以定义路由规则,把变量部分用特定的字段标记成<variable_name>,其作为关键字参数传递给关联的视图函数。下面这个例子展示了通过URL传递变量,并显示该变量的功能,参考代码如下所示。fromflaskimportFlaskapp=Flask(__name__)#通过<variable_name>标记,传递变量,URL规则为:/user/小白@app.route('/user/<name>',methods=['GET','POST'])defshow_name(name):returnname+'欢迎您!'#启动Flask程序if__name__=="__main__":app.run()

2.2.Flask的路由2.变量规则

上述代码中,我们定义了一个show_name(name)视图函数,该函数会接收一个名为name的变量,在“/user/<name>”路由规则中,通过<name>标记传递字符串数据给视图函数,HTTP请求方法为GET和POST。项目启动后,我们使用Postman测试工具对其进行测试,访问的URL为“:5000/user/小白”,测试结果如图所示。

2.2.Flask的路由2.变量规则

在上面的示例中,我们使用了默认的string转换器,传递字符串数据。对于其他类型的数据,我们可以使用<converter:variable_name>标记,在URL中选择性地加上一个转换器,为变量指定规则。Flask常用的转换器见下表。转换器说明示例string(缺省值)接受任何不包含斜杠的文本route('/user/<name>')int接受正整数route('/user/<int:num>')float接受正浮点数route('/user/<float:num>')path接收字符串路径,似string,但可以包含斜杠route('/user/<path:mypath>')uuid接受UUID字符串route('/uuid/<uuid:myuuid>')

2.2.Flask的路由3.URL构建

url_for()是Flask框架中一个非常有用的函数,它用于动态地构建URL。它可以帮助我们生成应用程序内的URL,并确保URL的正确性和安全性。它接受一个或多个参数,其中第一个参数通常是视图函数的名称,其他参数则对应于该视图函数的路由规则中的变量。以下是url_for()函数的基本语法:

url=url_for('视图函数名',参数1=值1,参数2=值2,...)

url_for()方法中参数含义如下:“视图函数名”是生成URL的视图函数的名称。“参数1=值1,参数2=值2,...”是可选参数,对应于视图函数的路由规则中的变量。

2.2.Flask的路由3.URL构建

接下来,我们将展示如何使用url_for()方法生成视图函数的URL的程序。以下是具体的代码示例:fromflaskimportFlask,url_forapp=Flask(__name__)@app.route('/myindex',methods=['GET','POST'])defindex():return'这是首页函数!'#URL构建@app.route('/urlfor',methods=['GET'])defurlfor():#生成index视图函数的URL

index_url=url_for("index")return"URL构建:"+"首页的url="+index_url#启动Flask程序if__name__=="__main__":app.run()

2.2.Flask的路由3.URL构建

上述代码中,我们定义了一个index()视图函数,它的路由是/myindex,同时在urlfor()视图函数中利用url_for()方法生成index()视图函数的URL。项目启动后,我们使用Postman测试工具对其进行测试,访问的URL为“:5000/urlfor”,测试结果如图所示。

2.3.Flask的请求1.Flask请求方式

在Flask中,处理请求通常涉及接收和解析客户端发送的数据。Flask支持多种请求方式,其中最常见的是GET和POST请求。除了GET和POST请求,Flask还支持其他HTTP请求方法,如PUT、DELETE等,但它们在Web开发中的使用相对较少。Flask常见请求方式见下表。请求方式说明GET默认的请求方式,通常用于从服务器获取资源。POST用于向服务器提交数据或文件,请求的数据是隐藏发送的,因此比GET请求更安全。PUT用于向服务器上传或更新资源。DELETE用于请求服务器删除指定的资源。

2.3.Flask的请求1.Flask请求方式

在注册路由时,可以通过methods参数,指定路由的请求方式,以下代码展示了设置register()视图函数的请求方式为POST请求。#通过route()注册路由,URL规则为:/register@app.route('/register',methods=['POST'])defregister():

return'这是register()函数!'

2.3.Flask的请求2.Flask请求钩子

在Flask中,请求钩子(RequestHooks)是一组特殊的函数,它们在请求处理的不同阶段被自动调用。Flask提供了四种请求钩子,它们可以帮助我们在请求处理流程中执行一些必要的操作,比如认证、权限检查、数据库连接管理等。Flask的常用请求钩子见下表。命令命令说明before_first_request这个钩子在整个应用程序的生命周期中只会被调用一次,且在处理第一个请求之前被调用。它通常用于执行一些只需要在应用程序启动时执行一次的初始化操作。(Flask2.2及以上版本不再支持该请求钩子)before_request这个钩子在每次请求处理之前被调用。它通常用于执行一些每次请求都需要执行的操作,比如检查用户认证状态、记录请求日志等。after_request这个钩子在视图函数处理完请求之后,但在响应返回给客户端之前被调用。它通常用于执行一些后处理操作,比如修改响应等。teardown_request这个钩子在每次请求处理完之后被调用,无论是否发生异常。它通常用于执行一些清理操作,比如关闭数据库连接、释放资源等。

2.3.Flask的请求2.Flask请求钩子

在Flask程序中,请求钩子使用装饰器实现,接下来我们编写代码模拟Flask程序进行用户认证、记录操作日志和释放资源的操作,具体代码如下所示。fromflaskimportFlaskapp=Flask(__name__)#用户的Token,当token=""ortoken="user"判断用户是否有操作权限token=""@app.before_requestdefcheck_auth():

#检查用户是否已认证iftokenisNoneortoken=="":print("用户未认证,没有操作权限!")return"用户未认证,没有操作权限!"else:print("用户已认证,拥有操作权限!")pass

2.3.Flask的请求@app.after_requestdefadd_log(response):#给响应添加一些头信息

print("用户操作成功,记录操作信息!")returnresponse@app.teardown_requestdefclose_db_connection(exception):#关闭数据库连接print("关闭数据库连接,释放资源!")pass@app.route('/index',methods=['GET','POST'])defindex():print("欢迎访问古典文学网!")return'这是首页函数!'#启动Flask程序if__name__=="__main__":app.run()接上页2.Flask请求钩子

2.3.Flask的请求

上述代码中,我们为check_auth()函数添加了before_request请求钩子,该函数会在每次请求前被自动执行,它的核心功能是通过token的判断,从而验证用户是否具备相应的操作权限。

在程序中,我们为token设置不同的值(token=""或token="user"),然后启动项目。通过访问“:5000/index”,即可在VSCode的Terminal终端中查看运行结果。具体的运行效果如图所示。2.Flask请求钩子

2.3.Flask的请求3.重新定向

在Flask中,重定向(Redirect)是一种将用户从当前URL导向到另一个URL的机制。这通常用于在用户完成某项操作后,将他们导向到另一个页面,或者当用户尝试访问不存在的页面时,将他们导向到首页或其他合适的页面。

在Flask中,我们可以使用redirect()函数,进行重新定向,参考代码如下所示。fromflaskimportFlask,redirect,url_forapp=Flask(__name__)@app.route('/')defindex():#将用户重定向到'/hello'路由

returnredirect(url_for('hello'))@app.route('/hello')defhello():return'Hello,World!'if__name__=='__main__':app.run()

2.3.Flask的请求3.重新定向

在上述代码中,index()视图函数通过redirect()函数重定向到“/hello”路由。此处使用了url_for()函数用于动态地生成“/hello”路由。项目启动后,可以通过“:5000”进行访问,测试结果如图所示。

2.4.Flask上下文

在Flask框架中,上下文(Context)是一个至关重要的概念。它赋予了开发者在请求处理过程中便捷地访问和操作特定对象的能力,如当前请求对象、应用对象等。

在Flask中,请求上下文扮演着举足轻重的角色,它主要由request对象和session对象组成。

2.4.Flask上下文1.请求上下文(1)request对象

request对象作为Flask框架中的核心组件,汇聚了HTTP请求的所有关键信息。这些信息包括但不限于请求的URL地址、请求头部字段、请求所使用的方法(如GET、POST等)、查询参数、表单提交的数据以及上传的文件等。request对象的常用属性和方法已详细列于下表。request对象的常用属性表属性说明args获取Url中的请求参数method获取请求的HTTP方式cookies获取包含Cookie名称和值的字典对象data获取字符串形式的请求数据form获取解析后的表单数据values包含form和args全部内容的CombineMultiDictheaders获取请求user_agent获取浏览器标识信息

2.4.Flask上下文request对象的常用方法表方法说明close()关闭当前请求get_data()获取请求中的数据get_json()进行JSON解析并返回数据make_from_data_parse()创建表单数据解析器1.请求上下文

2.4.Flask上下文

接下来,我们将模拟一个登录程序。这个程序的主要任务是接收用户的登录请求,并获取用户输入的账号及密码并输出。具体代码如下所示。fromflaskimportFlask,requestapp=Flask(__name__)@app.route('/login',methods=['POST'])deflogin():#获取登录账号及密码

uname=request.form.get("uname")upwd=request.form.get("upwd")return'您的登录账号:'+uname+",密码:"+upwd#启动Flask程序if__name__=="__main__":app.run()1.请求上下文

在上述代码中,我们定义了login()视图函数,模拟用户登录。在该函数中,通过request.form属性来解析用户提交的表单数据,从而获取登录账号和密码,并将其输出。

2.4.Flask上下文

当项目启动后,我们可以通过访问“:5000/login”来触发这个登录功能,在过程中,登录账号和密码需要以表单的形式进行提交。测试结果如图所示。1.请求上下文

2.4.Flask上下文(2)session对象

Flask的session对象基于cookie机制实现,其键值对通常存储在服务端,形式类似{随机字符串:'xxxxxx'}。与此同时,浏览器端的cookie中也保存了相同的随机字符串,以确保在后续请求时能够进行验证。

在使用session对象之前,我们需进行一项重要的配置:设置SECRET_KEY。由于session是通过加密后存储在cookie中的,SECRET_KEY便扮演着加密和解密的关键角色。1.请求上下文

2.4.Flask上下文以下是一个简单的示例,展示了如何使用session对象存储和获取数据。fromflaskimportFlask,sessionapp=Flask(__name__)app.secret_key='your_secret_key'#配置SECRET_KEY@app.route('/')

defindex():

#设置session值

session['user']='小白'

return'保存用户到session!'@app.route('/get_session')defget_session():

#获取session值

user=session.get('user')return'session中保存的用户是:'+user#启动Flask程序if__name__=="__main__":app.run()1.请求上下文

2.4.Flask上下文

在上述代码中,我们通过Flask应用实例app设置了SECRET_KEY,以确保session的安全性。随后,我们定义了两个视图函数:index()和get_session()。在index()函数中,我们为session的user键设置了值小白,用于存储用户的标识信息。而在get_session()函数中,我们则通过session.get('user')来检索并返回session中user键所对应的值。

项目启动后,可以通过访问“:5000/”和“:5000/get_session”来分别触发index()和get_session()函数。测试结果如图所示。1.请求上下文

2.4.Flask上下文2.应用上下文

在Flask应用中,应用上下文(ApplicationContext)主要负责在应用层面执行一系列操作,如访问配置信息、加载扩展等。

2.4.Flask上下文(1)current_app对象

在开发过程中,我们有时需要在应用的各个角落使用app实例,然而直接导入可能会显得不太方便。此时,current_app便作为全局代理应运而生,它允许我们在应用的任何位置都能轻松地访问当前的Flask应用实例。以下示例展示了如何利用current_app对象来获取程序中配置的密钥。代码如下所示。fromflaskimportFlask,current_app

app=Flask(__name__)#假设我们在Flask应用的配置中设置了一个密钥

app.secret_key='your_secret_key'#配置SECRET_KEY

@app.route('/')defindex():#使用current_app对象来获取配置的密钥

secret_key=current_app.secret_keyreturn'配置的密钥为:'+secret_keyif__name__=='__main__':app.run()2.应用上下文

上述代码中,我们在index()视图函数中,通过current_app.secret_key的方式获取了之前配置的secret_key密钥值,并将其作为响应返回。

2.4.Flask上下文

项目启动后,可以通过“:5000”进行访问,测试结果如图所示。2.应用上下文

2.4.Flask上下文

(2)g对象

g对象在应用上下文中作为全局的一个临时变量存在,充当中间媒介的作用。在处理一个请求的过程中,g对象可以用来存储一些临时信息,这些信息在请求的生命周期内都是有效的,但在请求结束后会被清除。

以下示例展示了如何利用g对象来存储和获取临时数据。代码如下所示。fromflaskimportFlask,g

app=Flask(__name__)@app.route('/')defindex():#在应用上下文中使用g对象存储临时信息

g.some_data='我是临时数据!'returng.some_data

if__name__=='__main__':app.run()2.应用上下文

在上述代码中,我们在定义的路由处理函数index()中,通过g对象存储了一个临时字符串,并输出了它的值。

2.4.Flask上下文

项目启动后,可以通过“:5000”进行访问,测试结果如图所示。2.应用上下文

2.5.Flask的响应在Flask中,为了向客户端返回数据,我们需要利用Flask的响应机制。

2.5.Flask的响应1.响应报文

在Flask中,响应(Response)扮演着服务器向客户端传递数据的关键角色,它负责承载着服务器对客户端请求的处理结果。每当Flask的视图函数被调用并返回一个值时,Flask会自动将其转化为响应对象(Response对象),然后将其发送给客户端。响应报文主要由以下几个核心部分组成。状态码,表示请求的处理结果。例如,200表示请求成功,404表示资源未找到等;响应头,包含关于响应的元数据,如内容类型、缓存指令等;响应体,这是响应的主要内容,通常是客户端所期望的数据。它可以是HTML、JSON、XML或其他格式的数据,具体取决于客户端的请求和服务器的处理逻辑。

2.5.Flask的响应2.生成响应

当Flask的视图函数被调用并返回一个值时,会将其转化为响应对象(Response对象)。如果我们需要在程序中主动生成响应,那么可以借助于Response类的构造方法或make_response()函数。接下来,我们将对这两种方式进行详细介绍。

2.5.Flask的响应(1)Response类的构造方法我们先来看下Response类的构造方法的语法,其语法格式如下:

fromflaskimportResponseresponse=Response(response,status,headers,mimetype,content_type,direct_passthrough)上述构造方法中常用参数的含义如下。response,响应内容,可以是字符串、字节串或其他可迭代对象;status,HTTP状态码,默认为200;headers,响应头,是一个字典或类似字典的对象mimetype,内容的MIME类型,如'text/html'或'application/json';content_type,与mimetype相同,用于设置内容类型。2.生成响应

2.5.Flask的响应

接下来,我们将通过Response类的构造方法来生成响应并将其返回给客户端。具体的实现代码如下所示:fromflaskimportFlask,Response

app=Flask(__name__)@app.route('/')defindex():

returnResponse('Hello,Flask!',status=201,content_type='text/plain')if__name__=='__main__':app.run()2.生成响应

上述代码中,我们通过Response类的构造方法生成响应,并通过传入response、status和content_type等参数,分别代表了响应体内容、响应状态码、响应类型。

2.5.Flask的响应

项目启动后,可以通过“:5000”进行访问,测试结果如图所示。2.生成响应

2.5.Flask的响应(2)make_response()函数

在Flask中,make_response()函数用于创建和修改响应对象。它具备强大的兼容性,能够接收多种类型的参数,如字符串、元组、字典以及Response对象等,并统一转化为Response对象返回。

接下来,我们将通过make_response()函数来生成响应并将其返回给客户端。具体的实现代码如下所示:fromflaskimportFlask,make_response

app=Flask(__name__)@app.route('/')defindex():response=make_response(('Hello,Flask!',201))response.headers['content-type']='text/plain'returnresponseif__name__=='__main__':

app.run()2.生成响应

2.5.Flask的响应上述代码中,我们在视图函数index()中调用make_response()函数生成响应,并通过传入response、status和content-type参数的值依次设置了响应体内容、响应状态码、响应类型。项目启动后,可以通过“:5000”进行访问,测试结果如图所示。2.生成响应

2.5.Flask的响应(3)生成JSON类型的响应

在项目后端API开发中,当需要返回JSON格式的响应体时,可使用jsonify()函数创建JSON响应。它会将传入的参数转换为JSON格式,并自动设置正确的content-type为application/json,确保客户端能够正确解析响应内容。

接下来,我们将返回一个JSON响应给客户端。参考代码如下所示:fromflaskimportFlask,jsonifyapp=Flask(__name__)@app.route('/')defbasic_json():

data={'name':'小白','age':30}returnjsonify(data)

if__name__=='__main__':app.run()2.生成响应

2.5.Flask的响应

上述代码中,我们在视图函数index()

中将data字典被传递给jsonify()函数,它返回一个包含JSON数据和正确content-type的响应。

项目启动后,可以通过“:5000”进行访问,测试结果如图所示。2.生成响应

2.6.Flask的蓝图

随着Flask项目的规模逐渐扩大,对程序进行模块化的处理显得尤为重要。幸运的是,Flask内置了一个强大的模块化处理工具——蓝图(Blueprint)。通过蓝图,开发者能够将大型应用拆分成更小、更易于管理的模块,从而实现应用的模块化。Flask的蓝图应用场景主要聚焦于构建大型、复杂的Flask应用、API开发、插件化开发等。

下面我们将通过一个“用户管理”案例来展示其实际应用。在这个案例中,我们利用蓝图将程序划分为了管理员和普通用户两个独立运行的模块。使用蓝图前后的程序结构对比。

2.6.Flask的蓝图

在图(a)中,由于没有使用蓝图,所有视图函数都集中在app.py文件中,这不仅使得程序的开发过程变得烦琐,也给后续的运维工作带来了诸多不便。然而,在图(b)中,程序通过注册两个蓝图——普通用户蓝图和管理员蓝图,实现d了功能的模块化划分,从而有效地优化了程序结构,使开发更为清晰有序,同时也方便了后续的维护和扩展。

2.6.Flask的蓝图

接下来,我们将借助蓝图来开发图(b)中展示的案例,请参考如下步骤。

2.6.Flask的蓝图1.创建蓝图Flask提供了Blueprint类,可使用其构造方法创建蓝图,Blueprint类的构造方法的语法如下所示。blueprint_name=Blueprint('blueprint_name',__name__)上述构造方法中常用参数的含义如下。blueprint_name是蓝图的名称,用于在应用内部唯一标识蓝图;__name__是当前模块的名称,用于定位资源文件。

2.6.Flask的蓝图1.创建蓝图admin.py文件的代码如下所示:fromflaskimportBlueprint#创建蓝图admin_blueprint=Blueprint("admin",__name__)#注册路由@admin_blueprint.route('/register')defregister():return'管理员注册操作!'#登录路由@admin_blueprint.route('/login')deflogin():return'管理员登录操作!'

2.6.Flask的蓝图1.创建蓝图user.py文件的代码如下所示:fromfla

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论