《Python Web 开发从入门到实践(FastAPI+Bootstrap)》 课件全套 钱彬 第0-12章 课程介绍、Python概述-项目上线与部署_第1页
《Python Web 开发从入门到实践(FastAPI+Bootstrap)》 课件全套 钱彬 第0-12章 课程介绍、Python概述-项目上线与部署_第2页
《Python Web 开发从入门到实践(FastAPI+Bootstrap)》 课件全套 钱彬 第0-12章 课程介绍、Python概述-项目上线与部署_第3页
《Python Web 开发从入门到实践(FastAPI+Bootstrap)》 课件全套 钱彬 第0-12章 课程介绍、Python概述-项目上线与部署_第4页
《Python Web 开发从入门到实践(FastAPI+Bootstrap)》 课件全套 钱彬 第0-12章 课程介绍、Python概述-项目上线与部署_第5页
已阅读5页,还剩310页未读 继续免费阅读

下载本文档

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

文档简介

课程介绍《PythonWeb开发从入门到实践(FastAPI+Bootstrap)》AI时代下的编程新模式在自动化编程日益普及的浪潮下,坚实的技术基础不仅未被边缘化,反而是驾驭工具的关键。人类:试验、改进AI:编写代码人类:框架设计,提出思路课程目标以实战为核心,构建从理论到实践的完整知识体系。🚀编写初衷旨在为计算机爱好者提供一条从零开始、由浅入深、理论与实践深度融合的Web全栈开发路径,打破学习壁垒。🏢实战导向摒弃枯燥的API文档罗列,通过亲手构建一个具有实际业务价值的企业门户网站,在实战中掌握全栈技术链。🔗知识体系化将Python语法、FastAPI框架、数据库设计、前端工程化及服务器部署等零散知识点,有机串联成完整的工程视角。升级亮点核心框架、前端技术的全面革新,探索AI与自动化的前沿应用。1核心框架现代化全面拥抱异步编程,通过引入FastAPI详细阐述异步路由、依赖注入及Pydantic数据校验,显著提升并发能力与代码可维护性。2前端技术迭代采用Bootstrap5移除jQuery依赖,结合Jinja2模板引擎,构建响应式、美观且交互丰富的原生JavaScript用户界面。3智能化与自动化集成紧跟技术前沿,利用后台任务与OpenPyXL实现异步报表归档;集成OpenCV计算机视觉库与大模型API,实现二维码解析及智能客服功能,展示Python强大的生态整合力。内容组织与安排循序渐进,螺旋上升,三部分构建完整全栈能力。📘第一部分:基础篇第1-2章全书基石。从搭建开发环境开始,系统梳理Python核心语法与前端基础(HTML5/CSS3/JS/Bootstrap5)。通过“在线Web计算器”项目,快速体验前后端交互流程。💻第二部分:开发篇第3-11章核心实战。围绕“派森科技”门户网站,实战数据库建模、后台管理、富文本、复杂筛选、JWT认证及AI智能客服,完整覆盖企业级开发全流程。☁第三部分:部署篇第12章交付终点。详细演示WindowsServer环境下的Nginx反向代理搭建、域名解析与HTTPSSSL证书配置,实现Web应用的生产级安全上线。实例网址:/qianbin1989228/pythonweb或者/binghai228/pythonweb面向人群1Web开发初学者零基础读者2高校师生作为学习Web开发的基础教材3人工智能技术从业人员学习构建微服务应用感谢Python概述教材第1章Python概述与生态发展历程🐍起源:GuidovanRossum设计,1991年发布首版。特点是简洁易懂、完全开源。📈Web演进:早期:Zope(同步阻塞)经典:Django/Flask现代:FastAPI(异步非阻塞,高性能)生态优势💡跨领域整合:不仅仅是后端语言。无缝集成数据科学、AI模型与自动化运维,拓宽Web应用边界。📊TIOBE排名:约2022年超越Java/C成为全球最受欢迎语言。适合构建复杂的数据驱动型Web应用。“人生苦短,我用Python”PythonWeb主流框架对比特性/维度DjangoFlaskFastAPI设计哲学大而全,一站式解决方案极简轻量,核心功能+第三方扩展高性能+标准化,异步优先核心协议WSGI(同步阻塞)WSGI(同步阻塞)ASGI(异步非阻塞)核心优势内置ORM、表单验证、后台管理高度定制化,学习成本低高并发、自动数据验证、原生OpenAPI文档适用场景企业级CMS、全栈应用、快速开发小型服务、定制化高的轻量应用高并发API、微服务、AI模型部署、实时通信性能表现常规同步性能,满足通用场景同Django,依赖扩展优化接近Node.js/Go,低资源消耗处理海量并发总结:FastAPI在性能、开发效率和架构灵活性之间取得了极佳的平衡。它既具备媲美Node.js和Go的运行效率,又保留了Python的高开发效率,是构建现代化、高可靠性Web应用的首选方案本章核心任务在Windows操作系统下搭建规范统一的PythonWeb开发环境。Python安装与配置虚拟环境(venv)管理VSCode编辑器配置首个FastAPI应用离线SwaggerUI配置(选学)下载Python安装程序1.访问官网打开浏览器访问:/downloads/windows/2.选择版本为了获取最新特性与安全更新,推荐安装3.10以上版本。📍本书教学版本:Python3.13.73.下载文件点击下载Windowsinstaller(64-bit)📥WindowsInstaller(64-bit)StableReleases安装与PATH配置⚠️关键步骤:勾选PATH选项☑️Addpython.exetoPATH(务必在点击"InstallNow"之前勾选此项)为什么要勾选?这就好比在操作系统的“通讯录”里登记了Python的地址。勾选后,无论在任何目录下打开命令行,系统都能直接识别并执行`python`命令。否则,你必须输入冗长的完整安装路径。验证Python与pip安装完成后,需要通过命令行验证环境是否配置正确。C:\Users\User>python--versionPython3.13.7C:\Users\User>pip--versionpip23.0.1from...(python3.13)C:\Users\User>_💡提示:Win+R输入cmd即可打开命令提示符。创建虚拟环境为什么需要虚拟环境?Python虚拟环境=吃火锅的“一人一锅”模式不用虚拟环境:所有人吃一口大锅(全局Python环境),有人要清汤(依赖库1.0版),有人要特辣(依赖库2.0版),汤底混在一起,谁的需求都满足不了;用虚拟环境:每人一口独立小锅(虚拟环境),你想涮清汤就涮清汤,我想煮特辣就煮特辣,口味互不影响,各自吃得舒服。Python虚拟环境的作用为每个项目创建一个独立的python“工具箱”(venv)。确保项目间互不干扰,环境纯净。项目目录与切换首先,我们需要创建一个专门的文件夹作为项目根目录,并进入该目录。1.创建目录在D盘(或合适位置)新建文件夹PythonWeb2.切换命令D:

(切换到D盘)cdPythonWeb

(进入项目文件夹)创建venv在项目根目录下,执行以下命令来创建虚拟环境。python-mvenvvenv解析:•-mvenv:运行Python内置的venv模块•venv:指定创建的虚拟环境文件夹名称执行结果:PythonWeb/└──venv/(包含独立解释器与库)激活venv虚拟环境必须激活后才能使用。D:\PythonWeb>.\venv\Scripts\activate(venv)D:\PythonWeb>_✅看到(venv)前缀,说明你已成功进入独立的“工具箱”模式!安装FastAPI与Uvicorn⚡FastAPI核心Web框架,负责路由与业务逻辑。🦄Uvicorn高性能ASGI服务器,负责运行应用。#一次性安装所有依赖pipinstall"fastapi[all]"💡为什么使用"fastapi[all]"?自动安装fastapi框架本身自动安装uvicorn服务器自动安装常用可选依赖(如email-validator,pydantic-settings等)使用清华镜像源如果下载速度较慢,推荐使用国内镜像源加速安装。pipinstall"fastapi[all]"-i/simple🚀加速技巧后续安装任何Python库时,均可添加此参数。这能显著提升下载速度并避免因网络超时导致的安装失败。piplist检查安装完成后,验证核心库是否已正确安装。(venv)D:\PythonWeb>piplistPackageVersion

fastapi0.109.0pydantic2.6.0uvicorn0.27.0...✅确认fastapi与uvicorn在列表中,即表示环境就绪。安装编辑器VisualStudioCode(VSCode)

从命令行迈向现代化集成开发环境(IDE)。🆓开放生态微软开发,免费开源,跨平台支持。⚡高效内核轻量级架构,启动迅速,资源占用低。🧩强大扩展代码高亮、智能提示、断点调试一应俱全。下载与安装VSCode1.获取安装包访问官网下载最新稳定版:/2.安装建议在“选择附加任务”步骤,建议勾选所有选项,以便右键快速打开项目。SelectAdditionalTasks☑️Createadesktopicon☑️Add"OpenwithCode"action...☑️RegisterCodeasaneditor...☑️AddtoPATH(requiresrestart)安装Python与Pylance扩展核心扩展是VSCode成为强大PythonIDE的关键。🐍

Python

Microsoft必装基础扩展提供代码高亮、智能提示、格式化与调试等核心功能。⚡

Pylance

Microsoft高性能语言服务器通常自动随Python扩展安装。提供极致的类型检查与代码补全体验。推荐扩展与语言包🤖TraeAI基于大模型的AI编程助手,支持代码补全、解释与错误修复。🌏Chinese(Simplified)LanguagePack界面汉化。安装后需在命令面板配置DisplayLanguage为zh-cn。🎨MaterialIconTheme为文件和文件夹提供美观直观的图标,提升项目管理体验。选择虚拟环境解释器确保VSCode使用的是项目虚拟环境,而非全局Python。main.py...Python3.13.7('venv':venv)如何手动选择?1.按Ctrl+Shift+P打开命令面板。2.输入Python:SelectInterpreter。3.选择带有('venv':venv)标识的选项。终端环境一致性在VSCode集成终端中执行命令时,必须确保处于虚拟环境中。终端1:powershell(venv)D:\PythonWeb>pipinstall......⚠️注意:如果未出现(venv),请关闭终端重新打开,或手动激活。编写第一个FastAPI应用新建main.py,输入以下代码:fromfastapiimportFastAPIapp=FastAPI()@app.get("/")asyncdefread_root():return{"Hello":"World"}核心概念:1.导入与实例化:创建应用对象app。2.路由注册:@app.get("/")定义了根路径的处理方式。3.异步函数:asyncdef支持高并发处理。启动Uvicorn服务器代码编写完成后,需要启动服务器来运行应用。(venv)D:\PythonWeb>uvicornmain:app--reloadINFO:Uvicornrunningon:8000(PressCTRL+Ctoquit)命令解析:•main:Python文件名(main.py)•app:FastAPI实例对象名•--reload:热重载模式,代码修改后自动重启,开发神器!浏览器验证打开浏览器,访问:8000⚪⚪⚪____________________________________{"Hello":"World"}🎉恭喜!你的环境配置完全正确。局域网访问配置如何让手机访问?默认情况下,服务仅监听本地回环地址()。若需局域网访问,需监听。操作步骤1.Ctrl+C停止当前服务。2.执行命令:uvicornmain:app--reload--host3.手机浏览器访问电脑的局域网IP(如192.168.x.x:8000)。📡Router(局域网)💻

↔️

📱下载SwaggerUI资源我们需要获取SwaggerUI的静态文件包。1.访问GitHubRelease页面/swagger-api/swagger-ui/releases2.下载源码包下载最新的zip压缩包(如swagger-ui-5.28.0.zip)。3.提取核心文件解压后,找到dist文件夹。我们将只使用这个文件夹里的内容。组织static目录将dist内容复制到项目的静态资源目录中。PythonWeb/├──venv/├──main.py└──static/└──swagger-ui/├──swagger-ui.css├──swagger-ui-bundle.js└──...(fromdist)📂操作步骤1.新建static文件夹。2.在其中新建swagger-ui文件夹。3.将dist内所有文件粘贴进去。SwaggerUI离线化概述默认情况下,FastAPI的交互式文档依赖互联网CDN。为了稳定性,我们将其离线化。☁️默认模式(Online)依赖CDN加载CSS/JS。网络受限或断网时,文档无法加载。💾离线模式(Local)静态资源本地托管。无论是否有网,文档稳定可用。main.py离线文档代码修改main.py,加载本地静态文件。#1.禁用默认文档app=FastAPI(docs_url=None,redoc_url=None)#2.挂载静态目录app.mount("/static",StaticFiles(directory="static"),name="static")#3.自定义文档路由@app.get("/docs",include_in_schema=False)asyncdefcustom_swagger_ui_html():returnget_swagger_ui_html(openapi_url=app.openapi_url,title=app.title+"-SwaggerUI",swagger_js_url="/static/swagger-ui/swagger-ui-bundle.js",swagger_css_url="/static/swagger-ui/swagger-ui.css",)关键点:1.StaticFiles:用于托管静态文件。2.app.mount:将URL路径/static映射到本地static文件夹。3.本地路径:明确指定JS/CSS从/static/...加载。规范要点小结稳固的环境是高效开发的前提。✅

统一版本

(Python3.10+,本书使用3.13.7)✅

依赖隔离

(始终使用虚拟环境venv)✅

严格纪律

(按教材路径排查问题,不随意更换版本)离线文档访问测试⚪⚪⚪:8000/docs_______________________________________________________FastAPI-SwaggerUIGET/ReadRoot👆验证交互点击"Tryitout"->"Execute"进入下一步🏁Chapter1环境搭建与验证

VSCode配置🚧Chapter2语法基础

前端入门万事俱备,我们已经为后续的Web开发之旅打下了坚实的基础。感谢Python基础教材第2章(2.1—2.8)范围与目标承接第1章的环境搭建,本章将聚焦于构建Web应用所需的底层语法逻辑。🎯学习目标掌握2.1—2.8节的核心语法与工程规范,为后续FastAPI项目构建完整实用的知识图谱。🚧内容边界严格依据教材第2章的事实与代码进行讲解,不做过度臆测或发散,确保知识的准确性。📝输出要求代码示例与命令将逐字遵循教材,保持语言严谨,扫清后续实战中的技术障碍。2.1数值运算与优先级Python提供了直观的数学运算语法,掌握基础运算符与优先级是编程的第一步。基础运算符+-*/:加减乘除//:整除(向下取整)%:取余(求模):幂运算(例如3**4)优先级规则先幂运算,后乘除,最后加减使用()改变运算顺序#基础运算result_divide=9/2#4.5result_floor=9//2#4result_modulo=9%2#1result_power=3**4#81#优先级p1=5+2*3#11p2=(5+2)*3#212.1代码规范:注释与缩进规范的代码不仅是可运行的,更是可读的。Python通过强制缩进来保证代码结构。1.注释(Comments)单行注释:使用#多行注释:使用'''或"""#这是单行注释name="派森科技"#行末注释"""多行注释:解释复杂逻辑"""2.缩进(Indentation)强制要求:使用缩进划分代码块,无{}标准:4个空格错误会导致IndentationErrorifis_vip:#缩进4空格,属于if内部print("尊贵的VIP用户")#无缩进,不属于ifprint("结算完成")2.1代码规范:断行当单行代码过长时,合理的断行能显著提升代码的可读性。✅隐式断行(推荐)在()[]{}内部自动识别换行。容错率高,方便注释。total=(500000+300000+#注释20000)⚠️显式断行(不推荐)使用反斜杠\。后面严禁跟空格,容易引发SyntaxError。url="https://api..."+\"v1/products"2.2数据类型总览程序处理的对象是数据。Python将数据归纳为不同的“类型”,其中序列类型具有通用的访问特性。核心数据类型数值:int,float布尔:bool(True/False)文本:str(序列)集合:list,tuple,dict空值:None序列(Sequence)共性适用于str,list,tuple有序:内容按顺序排列索引:通过index访问元素切片:获取子序列长度:使用len()获取元素个数print(type(100))#<class'int'>2.2数值与常量整数、浮点数与内置常量构成了程序数据的基石。数值(Numeric)int(整数)count=100float(浮点数)price=88.88rate=.88#省略0布尔(Boolean)逻辑判断的基础True(真)False(假)is_vip=True空值(None)表示“无”或“未定义”它是一个独立的数据类型email=None#<class'NoneType'>2.2字符串与格式化字符串是文本数据的载体。推荐使用f-string进行高效、直观的格式化。字符串创建name='派森科技'#单引号url="https://..."#双引号intro="""跨越多行的字符串"""#三引号(多行)格式化(f-string推荐)在字符串前加f,直接嵌入变量。比+号拼接更清晰高效。port=8000info=f"服务器运行在:{port}"#输出:服务器运行在:80002.2字符串索引与切片字符串是有序序列,可以通过索引访问单个字符,或通过切片获取子串。索引(Indexing)s="FastAPI"s[0]#'F'(首字符)s[-1]#'I'(末字符)切片(Slicing)s[0:4]#'Fast'(不含end)s[:4]#'Fast'(省略start)s[4:]#'API'(省略end)2.2列表(List)列表是有序且可变的集合,是Python中最常用的数据结构之一。#1.创建products=["网站开发","数据分析"]#2.访问与修改print(products[0])#"网站开发"products[1]="可视化"#3.追加products.append("办公自动化")#4.长度count=len(products)#3核心特性有序:保持插入顺序可变:内容可以修改动态:长度随意伸缩混合:可存不同类型数据2.2元组(Tuple)元组是不可变的序列,一旦创建就不能修改。这种稳定性使其适合存储配置数据。#1.创建(使用圆括号)colors=(255,0,0)#2.访问(同列表)r_val=colors[0]#255#3.尝试修改(报错)#colors[0]=128#TypeError:tupledoesnotsupportitemassignment适用场景固定配置参数地理坐标(x,y)RGB颜色值函数返回多个值2.2字典(Dictionary)字典是键值对(Key-Value)的集合,通过键来快速查找值,如同查阅字典。#1.创建(使用花括号)employee={"name":"张三","position":"工程师"}#2.访问(使用键)name=employee["name"]#"张三"#3.修改与添加employee["position"]="高级工程师"employee["dept"]="研发部"序列vs字典序列(List,Tuple,Str)有序通过整数索引访问(0,1...)字典(Dict)Python3.7+保持插入顺序通过键(Key)访问键必须唯一且不可变2.2比较运算符比较运算符用于判断两个值之间的关系,结果永远是布尔值(True或False)。运算符列表==:等于(注意是两个等号)!=:不等于>:大于<:小于>=:大于等于<=:小于等于stock_price=120.5target_price=100print(stock_price>target_price)#Output:Trueinput_pwd="123"real_pwd="abc"print(input_pwd==real_pwd)#Output:False2.2逻辑运算符逻辑运算符用于组合多个条件,构建更复杂的判断逻辑。and(与)全真才为真age>18andis_vip两者必须同时满足or(或)一真即为真age>60oris_vip满足其中一个即可not(非)取反notis_online真变假,假变真2.3控制语句总览控制语句赋予了程序逻辑判断与重复执行的能力,是代码的“指挥官”。🔀条件判断决定是否执行ifelifelse🔁循环执行重复执行任务for(遍历)while(条件)🛑流程干预微调循环逻辑breakcontinuepass2.3条件控制(if)根据条件真假,执行不同代码分支。单分支(if)temp=35iftemp>30:print("炎热")条件成立才执行双分支(if-else)ifscore>=60:print("通过")else:print("补考")二选一必执行多分支ifs>=90:...elifs>=80:...else:...从上到下匹配2.3循环:for与rangefor循环主要用于遍历序列,配合range()函数可实现固定次数循环。遍历序列(List)逐个取出元素进行操作products=["Web","AI"]forpinproducts:print(f"服务:{p}")#Output:#服务:Web#服务:AI计数循环(range)生成0到n-1的整数序列foriinrange(3):print(f"第{i+1}次")#Output:#第1次#第2次#第3次2.3循环:whilewhile循环适用于“当满足条件时持续执行”的场景,必须注意条件的更新。#初始化count=1#条件判断whilecount<=5:print(f"循环次数:{count}")#⚠️必须更新条件,否则死循环count+=1print("结束")执行机制检查条件是否为True执行代码块更新状态重复步骤1警告:遗漏更新会导致程序卡死(无限循环)2.3循环控制语句break,continue,pass提供了对循环流程的精细化控制。break(终止)彻底跳出循环forfinfruits:iff=="橘子":breakprint(f)找到即停止continue(跳过)跳过本次,进下一次foriinrange(5):ifi%2==0:continueprint(i)只打印奇数pass(占位)什么也不做ifis_admin:#TODOpass保持语法完整2.4函数(Function)函数是组织代码、实现复用的基础单元。defcalc_area(width,height):"""计算矩形面积"""area=width*heightreturnareadef:定义关键字|参数:输入数据|文档字符串:功能说明|return:返回结果(默认None)2.4参数进阶Python提供了灵活的参数机制,能够处理不确定数量的输入。args(可变位置)接收多余位置参数打包成元组(Tuple)defsum(*nums):#numsistuplepasssum(1,2,3)默认参数提供默认值简化调用defuser(role="Guest"):passuser()#role="Guest"user("Admin")kwargs(关键字)接收多余关键字参数打包成字典(Dict)defbuild(**info):#infoisdictpassbuild(k="v",a=1)2.5面向对象(OOP)将数据(属性)与操作(方法)封装为对象,通过类(Class)构建蓝图。类与对象classStudent:#初始化方法(构造函数)def__init__(self,name):=name#属性s1=Student("小明")#实例化print()继承(Inheritance)代码复用与扩展classPerson:deftalk(self):...#继承自PersonclassAthletes(Person):defswim(self):...p=Athletes()p.talk()#复用父类方法2.6模块与包随着项目规模扩大,通过模块(Module)和包(Package)组织代码至关重要。项目结构project/utils.py

(模块)services/

(包)__init__.py

(标识)user.pyapp.py

(入口)导入方式#1.导入整个模块importutilsutils.func()#2.导入特定成员fromservicesimportuser#3.使用别名importutilsasu2.7装饰器(Decorator)装饰器允许在不修改原函数代码的前提下,动态增强其功能(如日志、计时)。核心概念闭包(Closure)内部函数记住外部变量@语法糖@timerdeffunc():...等价于func=timer(func)#通用装饰器模板deftimer(func):defwrapper(*args,**kwargs):start=time.time()#执行原函数result=func(*args,**kwargs)print(f"耗时:{time.time()-start}")returnresultreturnwrapper2.8SQLite数据库操作SQLite是Python内置的轻量级数据库,是理解数据持久化流程的最佳起点。Connect➔Cursor➔Execute(SQL)➔Commit➔Closeimportsqlite3conn=sqlite3.connect('company.db')cursor=conn.cursor()#安全查询(参数化)sql="INSERTINTOproductsVALUES(?,?)"cursor.execute(sql,("Web",5000))mit()安全警示防止SQL注入❌禁止字符串拼接SQL✅必须使用?占位符感谢前端基础教材第2章(2.9—2.11)范围与目标📚覆盖章节2.9HTML与CSS基础

2.10JavaScript基础

2.11Bootstrap5基础🎯学习目标掌握页面结构搭建

外观样式设计

交互逻辑实现

使用UI框架快速开发HTML概念与结构💀结构骨架HTML(超文本标记语言)是网页的基石,如同建筑的钢筋水泥。核心作用:定义页面元素(标题、段落、图片)构建内容层级与逻辑结构提供无样式的静态内容🏗️基本结构<!DOCTYPEhtml><html><head>...</head><body>...</body></html>浏览器解析这些标签,将其渲染为用户可见的页面。HTML示例:demo.html<body><!--主标题--><h1>欢迎来到派森科技</h1><!--段落--><p>这是一个静态页面骨架...</p><!--分割线--><hr><!--列表与图片--><ul><li>Python3.13</li></ul><imgsrc="logo.png"alt="Logo"></body>📄页面骨架解析<h1>:页面主标题,最重要的内容<p>:普通文本段落<hr>:水平分割线,视觉分隔<ul>/<li>:无序列表,展示技术栈<img>:引入图片资源注:此时页面无样式,仅呈现内容结构。head与meta要点<htmllang="zh-CN"><head><metacharset="UTF-8"><title>HTML基础示例-派森科技</title></head>🌐语言属性lang="zh-CN"声明网页语言为简体中文,有助于搜索引擎索引和浏览器翻译提示。🔣字符编码charset="UTF-8"设置万国码编码,确保中文等字符正确显示,防止乱码。🏷️网页标题<title>...</title>定义显示在浏览器标签页上的文字,也是搜索引擎搜索结果的标题。常用HTML标签Header

<h1>-<h6>标题层级标签h1通常为页面唯一主标题,h2-h6依次表示子标题,构建内容层级。Paragraph

<p>段落标签用于包裹普通文本内容,浏览器会自动在段落前后添加一定的间距。Anchor

<a>超链接标签href:跳转目标URL

target="_blank":在新标签页打开Image

<img>图片标签(单标签)src:图片路径

alt:图片无法显示时的替代文本

width:显示宽度CSS概念与语法🎨核心职责CSS(CascadingStyleSheets)负责网页的“装修”,定义颜色、字体、布局等外观。关键优势:结构与表现分离提高代码可读性便于维护与复用📝基本语法h1{color:blue;}选择器(Selector):指向HTML元素(h1)声明块(Declaration):{属性:值;}CSS内部样式示例<head><style>/*标签选择器*/body{background-color:#f4f4f9;}h1{color:#2c3e50;text-align:center;border-bottom:2pxsolid#3498db;}a{text-decoration:none;color:#3498db;}</style></head>📐内部样式表将CSS代码写在HTML头部的<style>标签内。代码解析:body:设置浅灰背景,统一页面基调h1:深蓝文字、居中、底部蓝色边框a:去除下划线,设置链接色适用于简单页面或快速测试,能迅速美化页面外观。样式属性与伪类✨常用属性color:字体颜色(#hex,rgba)font-size/family:字体大小与族padding/margin:内外边距border-radius:圆角效果box-shadow:阴影立体感🖱️伪类交互伪类选择器用于定义元素的特殊状态。a:hover{...}定义鼠标悬停在链接上时的样式。示例效果:悬停时变为红色并显示下划线,增强用户交互反馈。外部样式表概念<linkrel="stylesheet"href="style.css">在HTML文档<head>中引入独立的CSS文件🔄代码复用一个样式文件可被多个页面引用,保证风格统一。🛠️维护高效结构与表现分离,修改一处即可更新全站样式。🚀性能优化浏览器会缓存外部CSS文件,加快页面加载速度。外部样式表示例📄style.css/*仅包含样式规则*/body{background-color:#f4f4f9;font-family:"MicrosoftYaHei";}h1{color:#2c3e50;text-align:center;}🌐demo.html<!DOCTYPEhtml><html><head><!--引入样式文件--><linkrel="stylesheet"href="style.css"></head><body><h1>欢迎来到派森科技</h1></body></html>JavaScript概念与引入JavaScript:赋予网页“生命”Web开发中唯一的浏览器端编程语言,负责用户交互、DOM操作与异步通信。🔍获取元素document.getElementById()找到页面上的标签对象👂监听事件addEventListener()捕获用户行为(点击、输入等)✏️修改元素innerText/style改变内容或样式,实现动态效果JS示例:页面结构📄js_demo.html<body><divclass="container"><!--状态文本,id用于JS获取--><h2id="status-text">当前状态:静止</h2><!--操作按钮,id用于JS获取--><buttonid="action-btn">点击执行操作</button></div></body>🖥️页面预览当前状态:静止[点击执行操作]关键点:id属性是JS识别元素的唯一标识JS示例:事件与样式const

statusEl

=

document.getElementById('status-text');const

btn

=

document.getElementById('action-btn');btn.addEventListener('click',function(){//1.修改文本statusEl.innerText

=

"状态:已激活";//2.修改样式const

newColor

=

getRandomColor();statusEl.style.color

=

newColor;});💡逻辑解析1.获取DOM使用getElementById拿到HTML元素的引用。2.绑定事件监听'click'点击事件,传入回调函数。3.动态修改.innerText修改文字内容.style.color修改样式属性JS代码解析要点📦变量声明const

vs

letconst用于常量(对象引用),let用于可变变量。避免使用老旧的var。📝属性操作innerText

vs

innerHTML推荐使用innerText处理纯文本,安全且高效。🎨样式命名camelCaseCSS属性background-color在JS中需写为backgroundColor。🐞调试技巧console.log()利用浏览器控制台(F12)输出日志,排查逻辑错误。Bootstrap5概念📱移动优先设计之初即考虑移动设备体验,自动适应从小屏到大屏。⚡快速开发预置大量CSS类和JS组件,无需从零编写样式。🧩组件丰富提供导航栏、卡片、按钮、模态框等成熟UI组件。下载与项目结构📥获取资源1.访问官网:2.下载"CompiledCSSandJS"3.解压获得css和js文件夹推荐理由:本地集成比CDN更稳定,适合离线开发环境。project_root/├──bootstrap/├──css/├──bootstrap.min.css└──...└──js/├──bootstrap.bundle.min.js└──...└──demo.html引入Bootstrap示例<!DOCTYPEhtml><html><head><!--1.引入CSS(在head中)--><linkrel="stylesheet"href="./bootstrap/css/bootstrap.min.css"></head><body><h1>Hello,Bootstrap!</h1><!--2.引入JS(在body结束前)--><scriptsrc="./bootstrap/js/bootstrap.bundle.min.js"></script></body></html>💡关键点CSS位置必须放在<head>中,优先加载样式,防止页面闪烁。JS位置推荐放在<body>结束标签前,确保DOM元素已加载完毕,提高渲染性能。网格系统概念🏗️布局容器.container固定宽度,居中,随屏幕阶梯变化。.container-fluid100%宽度,始终占据整个视口。📐12列网格.row行容器,必须包裹列。.col-*列定义,数字代表占据12份中的多少份。12ColumnGridSystemVisualizedcol-4col-4col-4网格示例:三栏布局<divclass="container"><divclass="row"><!--第一列:占4/12--><divclass="col-4">第一列</div><!--第二列:占6/12--><divclass="col-6">第二列</div><!--第三列:占2/12--><divclass="col-2">第三列</div></div></div>🖥️布局效果总宽度=12462组件概览🛠️核心组件Card(卡片)灵活的内容容器,包含页眉、页脚、内容区。Button(按钮)预定义样式的按钮(.btn-primary,.btn-success)。Grid结合col-md-4:中等屏幕以上每行显示3个卡片。👀组件预览CardTitleSomeexampletext...Button组件示例:卡片1<divclass="col-md-4"><divclass="card"><imgsrc="..."class="card-img-top"><divclass="card-body"><h5class="card-title">网站开发</h5><pclass="card-text">...</p><aclass="btnbtn-primary">了解详情</a></div></div></div>PreviewImage网站开发提供现代化、高性能网站解决方案。了解详情组件示例:卡片2<!--数据分析卡片--><divclass="card"><img...alt="数据分析"><divclass="card-body"><h5class="card-title">数据分析</h5><pclass="card-text">...</p><!--绿色成功按钮--><aclass="btnbtn-success">查看案例</a></div></div>PreviewImage数据分析运用Python生态,从数据中挖掘价值。查看案例组件示例:卡片3<!--人工智能卡片--><divclass="card"><img...alt="人工智能"><divclass="card-body"><h5class="card-title">人工智能</h5><pclass="card-text">...</p><!--描边信息按钮--><aclass="btnbtn-outline-info">联系我们</a></div></div>PreviewImage人工智能集成先进的AI模型,实现自动化与创新。

联系我们工具类与断点🛠️实用工具类Spacing(间距)mt-*:margin-top(mt-4)mb-*:margin-bottom(mb-4)p-*:padding(p-3)Text(文本)text-center:文本居中bg-light:浅色背景📏响应式断点Bootstrap根据屏幕宽度自动调整布局xs(<576px)sm(≥576px)md(≥768px)lg(≥992px)小结与实践建议💀HTML负责页面结构与内容骨架。🎨CSS负责外观样式,推荐外部样式表。⚡JavaScript负责动态交互,监听与修改DOM。📱BootstrapUI框架,快速构建响应式界面。感谢实战项目:在线Web计算器教材第2章·2.12项目目标与场景在掌握了Python基础与Web前端技术后,我们将这些离散的知识点熔铸于一个完整的实战应用中,打通前后端交互的全链路。🎯知识融合将教材2.1至2.11节的Python语法、HTML布局、CSS样式与JS交互逻辑有机整合,构建完整的Web应用。🧮交互流程用户在前端点击按钮输入表达式,通过网络请求发送至后端,FastAPI计算后返回结果并在屏幕显示。📏严格规范严格遵循教材2.12节定义的目录结构与代码实现,保持工程规范性,为后续大型项目打下严谨基础。目录结构总览在开始编码之前,首先构建清晰的项目骨架,分离静态资源、模板与应用代码。📂核心组成static/

存放CSS、JS等静态资源文件templates/

存放index.html等前端模板main.py

FastAPI应用入口与路由定义project_root/├──static/│└──bootstrap/│├──css/││└──bootstrap.min.css│└──js/│└──bootstrap.bundle.min.js├──templates/│└──index.html└──main.py模板与渲染前端页面通过模板文件承载,后端负责配置渲染引擎,二者协同工作。UI结构templates/index.html作为用户交互的唯一入口引入Bootstrap构建布局包含容器(Container)、卡片(Card)与网格(Grid)渲染配置main.py使用Jinja2Templates引擎指定目录directory="templates"通过TemplateResponse返回页面templates=Jinja2Templates(directory="templates")静态资源与挂载本地化管理静态资源能提高应用的加载速度与稳定性,我们需要正确配置其挂载路径。📦资源组织将Bootstrap下载到本地,避免外部CDN依赖。/static/bootstrap/css/

bootstrap.min.css/static/bootstrap/js/

bootstrap.bundle.min.js🔗代码挂载在main.py中配置静态文件服务:fromfastapi.staticfilesimportStaticFiles#...app.mount("/static",StaticFiles(directory="static"),name="static")index.html:head区域Head区域定义了页面的元数据与样式引用,是响应式布局的基石。<head><metacharset="UTF-8"><!--移动优先的关键设置--><metaname="viewport"content="width=device-width..."><title>在线Web计算器</title><!--引入本地BootstrapCSS--><linkrel="stylesheet"href="/static/bootstrap/css/..."></head>关键配置Viewport设置确保页面宽度跟随设备屏幕宽度,实现移动端适配。CSS引用指向/static路径下的本地Bootstrap文件,而非外部CDN链接。index.html:容器与卡片利用Bootstrap的经典组件结构,快速搭建出计算器的主体框架。.container.card.calculator.card-body(承载显示屏与按钮)<divclass="container"><divclass="cardcalculator"><divclass="card-body"><!--内容区域--></div></div></div>显示屏控件设置显示屏是一个禁用的输入框,用于展示用户的输入表达式及计算结果。12+56_显示屏效果预览⚙️关键属性id="display"JavaScript获取元素的唯一标识。class="form-controlform-control-lg"Bootstrap样式,lg表示大号控件,显示更清晰。disabled禁用键盘输入,强制用户通过点击按钮交互。按钮区域网格合理的布局将按钮区分为两大功能块,使用网格系统轻松实现对齐与间距控制。.row.gx-2.mt-3.col-9数字/功能区.col-3运算区📐布局逻辑GridGap(gx-2)设置水平方向的列间距,避免按钮紧贴,增加呼吸感。MarginTop(mt-3)在按钮区顶部增加外边距,与上方的显示屏拉开视觉距离。9:3黄金比例左侧占据3/4宽度容纳密集按键,右侧1/4放置主要操作符。左侧按钮布局利用row-cols-3属性,让12个按钮自动整齐排列,无需手动计算宽度。C/789...自动换行排列...✨实现细节class="rowrow-cols-3"父容器设置,强制子元素每行显示3个,自动换行。btn-secondary灰色背景,用于第一行的功能键(C,/,*),区分层级。btn-light浅色背景,用于数字键,突出内容主体。右侧按钮布局利用Flexbox的强大能力,轻松实现非等高按钮的垂直对齐与填充。-+=自适应填充🚀Flexbox魔法d-flexflex-columnh-100启用垂直方向的Flex布局,并强制高度占满父容器(与左侧等高)。flex-grow-1应用于(+)和(=)按钮,使它们自动伸展,平分剩余垂直空间。btn-primary为等号设置主色调(蓝色),强调它是最终触发计算的关键动作。自定义样式要点Bootstrap提供了坚实的基础,而自定义CSS则赋予了计算器独特的拟物风格与交互体验。body{/*浅灰背景突出卡片*/background-color:#f0f2f5;}.calculator{/*悬浮立体阴影*/box-shadow:08px16pxrgba(...);max-width:400px;}.btn{/*增大触控面积*/height:80px;font-size:1.5rem;}🎨设计意图沉浸式背景使用#f0f2f5浅灰色背景,避免纯白背景的刺眼,同时让白色计算器卡片形成鲜明对比。拟物化阴影通过较深的box-shadow营造悬浮感,模拟真实计算器的物理存在。移动端适配将按钮高度设为80px并增大字号,确保在手机屏幕上也能轻松点击。引入Bootstrap脚本遵循最佳实践,在页面底部引入脚本,确保页面渲染不受阻塞。<!--放在body标签结束前--><scriptsrc="/static/bootstrap/js/bootstrap.bundle.min.js"></script>Bundle版本内含Popper.js,支持下拉菜单等交互组件。本地引用路径指向/static,不依赖外部网络。底部加载优先显示HTML内容,提升首屏速度。JS交互框架前端脚本的核心任务是监听用户的每一次点击,并根据按钮内容分发处理逻辑。//1.获取DOM元素constdisplay=document.getElementById('display');constbuttons=document.querySelectorAll('.btn');//2.批量绑定事件buttons.forEach(button=>{button.addEventListener('click',()=>{consttext=button.textContent;//3.业务分支...});});⚡逻辑流Select使用querySelectorAll('.btn')选中页面上所有按钮。Listen遍历按钮集合,为每一个按钮添加click监听器。Dispatch获取被点击按钮的文本内容,进入if/else分支判断。事件分支:清空与追加基础交互逻辑:处理用户输入与重置操作,构建数学表达式。constbuttonText=button.textContent;if(buttonText==='C'){//1.清空逻辑display.value='';}elseif(buttonText==='='){//(下一页讲解计算逻辑)}else{//2.追加字符display.value+=buttonText.trim();}🔘逻辑分支Clear(C)重置输入框的值为空字符串,允许用户重新开始。Append(Other)将数字和运算符依次拼接到display.value后,形成完整的数学表达式字符串。注:使用trim()去除可能存在的空白。事件分支:触发计算当表达式构建完成,等号键不仅意味着结束输入,更触发了与后端的关键交互。elseif(buttonText==='='){//仅当显示屏有内容时才发送请求if(display.value){sendForCalculation(display.value);}}1.Check验证display.value是否非空。2.Call调用异步函数执行fetch请求。sendForCalculation实现使用现代FetchAPI发起异步请求,实现无刷新计算体验。asyncfunctionsendForCalculation(expression){constresponse=awaitfetch('/calculate',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({expression})});constdata=awaitresponse.json();if(data.error)display.value=data.error;elsedisplay.value=data.result;}📡关键实现Method:POST向/calculate接口发送数据。Content-Type声明发送的是JSON格式数据。Async/Await优雅处理异步网络请求,等待结果返回后再更新UI。main.py:应用与静态/模板后端服务的基石:初始化FastAPI应用,挂载资源,配置模板引擎。app=FastAPI()#挂载静态文件app.mount("/static",StaticFiles(directory="static"),name="static")#配置模板引擎templates=Jinja2Templates(directory="templates")🛠️初始化配置StaticFiles使/static路径可被访问,服务于CSS和JS文件。Jinja2Templates绑定templates目录,为后续渲染HTML页面做好准备。main.py:模型与首页定义数据规范,并设置应用的入口路由。📦数据模型classCalculationRequest(BaseModel):expression:str使用Pydantic确保前端传来的数据包含字符串类型的expression字段,自动处理数据校验。🏠首页路由@app.get("/")asyncdefread_root(request:Request):returntemplates.TemplateResponse("index.html",{"request":request})当用户访问根路径时,渲染并返回index.html页面。main.py:计算路由核心业务逻辑:接收表达式,执行计算,并安全地返回结果。@app.post("/calculate")asyncdefcalculate(data:CalculationRequest):try:#核心计算result=eval(data.expression)return{"error":"","result":str(result)}exceptException:return{"error":"无效的表达式","result":""}⚡执行流程Execute使用Python内置的eval()函数解析并执行字符串表达式。Catch捕获所有异常(如除以零、语法错误),防止服务崩溃。Response返回统一结构的JSON对象,包含result或error字段。运行与验证完成所有代码编写后,启动服务并访问页面,见证全栈应用的即时反馈。$uvicornmain:app--reloadINFO:Uvicornrunningon:8000(PressCTRL+Ctoquit)INFO:Startedserverprocess[12345]:8000🚀启动步骤Command在项目根目录下运行uvicorn命令。--reload确保代码修改后自动重启服务。Access打开浏览器访问本地地址,即可看到计算器界面。效果与闭环不仅仅是页面展示,更重要的是打通了从用户点击到服务器计算的完整数据闭环。🖱️FrontendButtonClickJSON⚙️BackendCalculateResult🖥️UIUpdateShowResult规范与一致性严格遵守工程规范,是项目可维护性与可扩展性的保障。资源路径📂本地优先所有静态资源严格存放在/static目录,禁止混乱引用,确保离线可用。样式统一🎨Bootstrap最大化利用Bootstrap工具类(如mt-3,d-flex),减少自定义CSS,保持风格统一。代码基准📘教材为准严格遵循教材2.12节的代码实现与命名规范,避免私自改写导致的问题。实践延伸与注意虽然项目已闭环,但作为实战起点,我们仍需保持对潜在改进方向的敏锐认知。🔍扩展方向在真实业务中,我们还可以:增加前端表单校验后端使用更安全的解析库替代eval()优化错误提示的UI交互📌本次重点作为入门项目,我们的首要任务是:跑通前后端数据链路严格还原教材2.12代码建立Web开发的全局观感谢项目框架设计教材第3章设计思路三原则🔄前后端职责分离后端(FastAPI)专注业务逻辑与数据接口;前端(Bootstrap/Jinja2)负责页面结构与交互体验。🧩模块化开发按功能拆分独立模块(如产品、新闻),每个模块拥有独立的路由与模板,便于维护与扩展。💾数据驱动内容告别硬编码,内容由数据库统一管理。通过后台系统灵活配置前台展示,实现真正的动态网站。项目概述本章作为门户网站实战的起点,旨在完成顶层架构蓝图的设计、功能模块的划分以及核心技术的选型。我们将搭建一个规范化的项目骨架,能够支撑后续所有业务模块的开发。🎯核心目标顶层架构蓝图规划业务功能模块划分技术选型与规范确立搭建可扩展项目骨架🔗在线资源体验获取完整源码与配套资源:GitHub:qianbin1989228/pythonwebGitee:binghai228/pythonweb功能模块总览“派森科技”门户网站包含8大核心功能模块,各模块间数据互通,构成完整生态。🏠首页门户与聚合中心🏢公司简介信息展示基础📦产品中心分类/展示/搜索📰新闻动态文章管理与发布👥人才招聘岗位与简历投递🔐认证系统注册/登录/权限🛠️服务支持在线工具与API⚙️后台管理数据统一维护➜所有模块共享用户认证体系与后台管理系统首页与公司简介🏠首页模块功能定位:网站的门户入口与内容聚合中心。核心特性:动态展示最新动态精选产品/服务推荐高性能服务端缓存集成大模型智能客服🏢公司简介模块功能定位:展示基本信息、发展历程与企业文化。工程意义:首个实战整合模块FastAPI+Jinja2+B

温馨提示

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

评论

0/150

提交评论