用 Python 写网页,其实就是让 Python 来负责处理用户请求、生成动态内容,以及与数据库等后端服务交互。而网页的展示部分,比如 HTML、CSS、JavaScript,还是需要浏览器来渲染。
想象一下,你走进一家餐厅,你想点一份菜单上没有的菜。
你:用户,想要一个特别的菜品。
服务员:Web 服务器,接收你的请求。
厨房:Python 后端(你的程序),负责理解你的需求,去冰箱(数据库)里找食材,然后“烹饪”出这道菜(生成 HTML)。
厨师:Django 或 Flask 这样的 Web 框架,是帮你高效“烹饪”的工具。
菜品:最终展示给你的网页。
Python 扮演的角色就是那个在大厨(Web 框架)的指导下,在厨房里忙碌的厨师助手,负责把客人的需求变成一道道美味的“菜”。
Python 如何“写”网页?核心流程
1. 接收请求 (Request):当用户在浏览器里输入网址,或者点击一个链接时,浏览器就会向你的服务器发送一个 HTTP 请求。这个请求包含了用户想要访问的页面、提交的数据(比如表单信息)等等。
2. 路由 (Routing):你的 Python 程序需要知道哪个请求应该由哪个部分来处理。这就好比服务员知道哪个客人的点单需要交给哪个厨师。Web 框架(后面会讲到)提供了路由机制,可以根据 URL 将请求导向相应的 Python 函数(称为“视图”或“处理器”)。
3. 处理请求 (Processing):接收到请求后,你的 Python 代码就开始工作了。这可能包括:
从数据库里读取数据。
根据用户输入的数据进行计算或逻辑处理。
与第三方服务进行交互。
决定要生成什么样的页面内容。
4. 生成响应 (Response):处理完请求后,你的 Python 程序会生成一个 HTTP 响应。这个响应通常包含:
HTML 内容:这是网页的主要结构和内容。
CSS 文件:用于控制网页的样式(颜色、布局等)。
JavaScript 文件:用于增强网页的交互性。
状态码:比如 200 表示成功,404 表示未找到页面。
其他头部信息:比如内容类型。
5. 发送响应:服务器将这个响应发送回用户的浏览器。
6. 浏览器渲染:浏览器接收到响应后,解析 HTML、应用 CSS 样式、执行 JavaScript 代码,最终将网页展示给用户。
核心工具:Web 框架
直接用 Python 编写服务器、处理 HTTP 请求、发送响应,就像赤手空拳地盖房子,非常繁琐且容易出错。幸运的是,有许多成熟的 Web 框架 能够极大地简化这个过程。它们提供了“脚手架”,封装了许多底层细节,让你能更专注于业务逻辑。
目前最流行的 Python Web 框架主要有:
1. Django:
定位:全功能(batteriesincluded)框架。这意味着它提供了几乎所有你需要的功能:ORM(对象关系映射,方便你操作数据库)、模板引擎(用于生成 HTML)、表单处理、用户认证、管理后台等等。
优点:功能强大、生态系统成熟、学习资源多、安全性好,适合构建复杂、大型的 Web 应用。遵循“约定优于配置”的原则,上手后开发效率很高。
缺点:相对“重”,对于非常简单的项目来说可能有点大材小用。学习曲线相对 Flask 来说稍微陡峭一些。
适合场景:内容管理系统、电商平台、社交网络、企业级应用等。
2. Flask:
定位:微框架(microframework)。它只提供了 Web 开发最核心的功能,比如路由和请求/响应处理。其他许多功能(如数据库集成、表单验证)需要通过第三方扩展来实现。
优点:轻量级、灵活、易于上手,你可以根据需要自由选择和组合扩展。非常适合构建小型项目、API 服务或者作为学习 Web 开发的起点。
缺点:需要自己寻找和集成更多的扩展,对于大型项目需要更多的架构设计和组织。
适合场景:小型网站、RESTful API、原型开发、学习 Web 开发。
3. FastAPI:
定位:现代、快速(高性能)的 Web 框架,主要用于构建 API。
优点:非常快的性能、自动生成交互式 API 文档(Swagger UI/ReDoc)、基于标准 Python 类型提示(使代码更清晰、易于维护)、支持异步。
缺点:相对 Django 和 Flask 还年轻一些,但发展非常迅速。
适合场景:构建高性能的 API 服务、微服务、需要高性能的后端。
入门教程推荐(选一个开始)
为了让你有更直观的感受,我会重点介绍一下 Django 和 Flask 的学习路径和一些好的教程资源。
如果你喜欢“一步到位”,或者想做复杂项目:推荐 Django
Django 的学习路径大致是这样的:
1. 安装 Django:
```bash
pip install django
```
2. 创建项目:
```bash
djangoadmin startproject myproject
cd myproject
```
3. 创建应用:一个 Django 项目可以包含多个应用(app),每个应用负责一部分功能,比如博客应用、用户管理应用等。
```bash
python manage.py startapp myapp
```
4. 定义模型 (Models):用 Python 类来定义你的数据库结构。Django 的 ORM 会自动帮你生成 SQL 语句。
```python
myapp/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
```
5. 创建数据库迁移:将模型变化应用到数据库。
```bash
python manage.py makemigrations
python manage.py migrate
```
6. 创建视图 (Views):编写 Python 函数来处理请求并返回响应。
```python
myapp/views.py
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all()
return render(request, 'myapp/post_list.html', {'posts': posts})
```
7. 配置 URL 路由 (URLs):将 URL 和视图关联起来。
```python
myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('posts/', include('myapp.urls')), 引入 myapp 的 URL 配置
]
myapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'), 将根路径映射到 post_list 视图
]
```
8. 创建模板 (Templates):用 HTML 文件来展示数据。Django 有一个强大的模板引擎,可以方便地嵌入 Python 变量和逻辑。
```html