一、概述Web开发本质浏览器客户端和服务器通过HTTP协议通信Python这边接收请求、处理逻辑、返回页面/数据。 学习顺序HTTP → HTML基础 → WSGIPython Web底层规范→ Web框架 → 模板渲染。二、HTTP协议HTTP 是无状态、基于请求-响应模型的应用层协议默认端口80HTTPS为443。1. 请求Request由请求行、请求头、空行、请求体四部分组成请求行方法 路径 HTTP版本例如GET /index HTTP/1.1常用请求方法GET获取资源参数放在URL可缓存、长度有限POST提交数据参数放请求体用于登录、表单提交PUT / DELETE修改、删除资源REST风格请求头Host、User-Agent、Cookie、Content-Type等2. 响应Response状态行 响应头 空行 响应体状态码200 OK成功301/302重定向400 参数错误404 Not Found资源不存在500 Internal Server Error服务端代码异常响应头Content-Type告诉浏览器返回内容类型text/html/application/json无状态服务器默认不记住上一次是谁访问的靠 Cookie / Session / Token 维持登录状态。简单理解流程浏览器发起HTTP请求 → 服务器接收 → 处理业务 → 返回HTTP响应 → 浏览器渲染页面三、HTML简介HTML 是标记语言用来描述网页结构不是编程语言。浏览器解析HTML渲染页面。!DOCTYPE html html head meta charsetutf-8 title页面标题/title /head body h1一级标题/h1 p段落文字/p a href/login跳转链接/a /body /html作用作为服务器返回给浏览器的文本内容局限纯HTML是静态页面所有用户看到内容一模一样想要动态内容比如显示用户名需要后端填充数据也就是模板。配合CSS美化、JS做前端交互。四、WSGI接口WSGIWeb Server Gateway InterfacePython Web的统一接口规范。 作用隔开Web服务器gunicorn、uWSGI和Web应用Flask/Django。只要遵循WSGI规范应用可以在任意兼容WSGI的服务器上跑。WSGI标准函数签名def application(environ, start_response): environ字典包含所有HTTP请求信息请求路径、header、方法等 start_response回调函数用来设置响应状态码和响应头 返回值bytes 类型的可迭代对象就是响应体 status 200 OK headers [(Content-Type, text/html;charsetutf-8)] start_response(status, headers) body h1Hello WSGI/h1.encode(utf-8) return [body]原生Python内置wsgiref可以测试运行仅用于学习不能线上使用from wsgiref.simple_server import make_server server make_server(127.0.0.1, 8000, application) print(服务器运行在 [http://127.0.0.1:8000](http://127.0.0.1:8000)) server.serve_forever()访问 127.0.0.1:8000 就能看到页面。✅ WSGI核心要点只是接口标准不是服务器也不是框架所有Flask、Django底层都实现了WSGI生产环境Nginx反向代理 GunicornWSGI服务器五、使用Web框架手写WSGI、自己解析路由、处理请求非常繁琐所以使用Web框架。 Python主流Web框架Flask轻量微型框架灵活、插件化适合小型项目、接口开发Django全栈重型框架自带ORM、后台管理、表单、权限适合大型业务系统下面示例以Flask演示上手最简单1. 安装pip install flask2. 基础路由示例from flask import Flask # 实例化app app Flask(__name__) # 路由访问路径和处理函数绑定 app.route(/) def index(): return h1首页/h1 app.route(/about) def about(): return h1关于我们/h1 if __name__ __main__: app.run(host127.0.0.1, port5000, debugTrue)debugTrue代码修改自动重启开发用上线必须关闭访问/、/about触发对应函数return的字符串就是HTTP响应体动态路由app.route(/user/name) def user(name): return f你好{name}六、使用模板直接在Python代码里拼接HTML字符串极其丑陋、不安全。模板引擎实现「HTML和Python代码分离」HTML模板文件里写占位符后端传入数据框架自动渲染成最终HTML。 Flask 默认模板引擎Jinja2目录结构app.py templates/ index.htmltemplates/index.html!DOCTYPE html html head meta charsetutf-8 title模板页面/title /head body h1欢迎{{ username }}/h1 ul {% for item in list_data %} li{{ item }}/li {% endfor %} /ul {% if age 18 %} p成年人/p {% else %} p未成年/p {% endif %} /body /htmlJinja2语法{{ 变量 }}输出变量{% %}控制语句 for / if{# 注释 #}模板注释不会输出到页面app.py 渲染模板代码from flask import Flask, render_template app Flask(__name__) app.route(/) def index(): data { username: 小明, age: 20, list_data: [苹果, 香蕉, 橙子] } # render_template 读取模板传入参数渲染 return render_template(index.html, **data) if __name__ __main__: app.run(debugTrue)访问页面模板里占位符就会被真实数据替换生成动态网页。模板的价值前端工程师可以单独写HTML后端只负责传数据前后端分离开发传统服务端渲染SSR。 补充现在前后端分离方案后端只返回JSON接口前端Vue/React渲染页面。七、小节对比总结内容定位HTTP客户端和服务器通信规则HTML浏览器展示的静态页面结构WSGIPython Web底层统一接口Web框架(Flask/Django)封装路由、请求、响应简化开发Jinja2模板服务端动态渲染HTML填充数据八、注意事项Flask debug模式不要放到生产环境有安全漏洞模板中展示用户输入内容Jinja2默认自动转义防止XSS攻击WSGI内置服务器仅用于本地开发测试不可对外公网暴露
阅读完成 · 觉得有帮助?