找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2172

积分

0

好友

303

主题
发表于 2025-12-24 17:04:18 | 查看: 37| 回复: 0

对于Python后端开发而言,主流的高效框架主要有 Django、Flask 和 FastAPI。本文将重点介绍功能最为全面的 Django 框架,通过一个完整的实战项目,带你快速掌握其核心开发流程。

Django 是一个免费开源的高级 Python Web 应用框架,其设计哲学鼓励快速开发和干净、实用的代码。它由经验丰富的开发者构建,处理了Web开发中的大量繁重工作,让你能够专注于编写应用本身,而非重复造轮子。

Django 核心特性

1. 架构模式

  • 遵循 MTV(模型-模板-视图)模式,是经典 MVC 架构的一种变体。
    • Model:负责数据结构与数据库交互。
    • View:处理业务逻辑。
    • Template:定义前端展示层。
  • 强调 DRY(Don‘t Repeat Yourself)原则,最大化减少重复代码。

2. 功能优势

  • 强大的内置 ORM,让数据库操作如同操作Python对象。
  • 灵活的模板引擎。
  • 开箱即用的自动化管理后台。
  • 清晰强大的 URL 路由配置。
  • 完整的表单处理与验证系统。
  • 内置安全防护(如 CSRF、XSS 防护)。
  • 国际化与本地化支持。
  • 高度可扩展的中间件系统。

安装 Django

在开始之前,强烈建议使用虚拟环境来管理项目依赖。

# 创建并激活虚拟环境
python -m venv myenv
source myenv/bin/activate  # Linux/macOS
myenv\Scripts\activate     # Windows

# 安装 Django
pip install django

# 验证安装
django-admin --version

项目创建与基础配置

1. 创建项目

使用 Django 命令行工具初始化一个新项目。

django-admin startproject myproject
cd myproject

2. 项目结构解析

生成的项目结构如下:

myproject/
├── manage.py          # 项目管理命令行工具
└── myproject/         # 项目主目录(Python包)
    ├── __init__.py
    ├── settings.py    # 项目全局配置文件
    ├── urls.py        # 项目主URL路由声明文件
    ├── asgi.py        # ASGI服务器入口
    └── wsgi.py        # WSGI服务器入口

3. 关键配置 (settings.py)

以下是一些必须了解和配置的关键项:

# 安全警告:生产环境必须关闭调试模式!
DEBUG = False

# 允许访问的主机/域名列表
ALLOWED_HOSTS = ['yourdomain.com', 'localhost']

# 已安装的应用列表,自定义应用需添加在此
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',  # 你的自定义应用
]

# 数据库配置,默认使用 SQLite,可轻松替换为 MySQL/PostgreSQL 等
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

# 时区与语言设置
TIME_ZONE = 'Asia/Shanghai'

# 静态文件URL和收集目录
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'  # 生产环境静态文件收集目标

创建应用(App)

在 Django 中,一个项目由多个应用组成,每个应用负责一个特定的功能模块。

python manage.py startapp myapp

一个典型的应用目录结构如下:

myapp/
├── migrations/       # 数据库迁移文件目录
├── admin.py         # 管理后台模型注册文件
├── apps.py          # 应用配置
├── models.py        # 数据模型定义文件
├── tests.py         # 单元测试文件
└── views.py         # 视图函数/类视图文件

实战示例:构建一个简易民意调查系统

我们将通过创建一个“polls”(投票)应用,来串联 Django 的核心组件。

1. 创建应用

python manage.py startapp polls

记得将 'polls' 添加到 settings.pyINSTALLED_APPS 列表中。

2. 定义数据模型 (polls/models.py)

模型是数据的蓝图,Django 的 ORM 会据此在数据库中创建表。

import datetime
from django.db import models
from django.utils import timezone

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        now = timezone.now()
        return now - datetime.timedelta(days=1) <= self.pub_date <= now

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

3. 激活模型(生成并应用迁移)

# 根据模型变化创建迁移文件
python manage.py makemigrations polls

# 将迁移应用到数据库
python manage.py migrate

4. 创建视图 (polls/views.py)

视图负责处理业务逻辑。这里使用 Django 强大的通用类视图(Class-Based Views)。

from django.views import generic
from .models import Choice, Question
from django.utils import timezone

class IndexView(generic.ListView):
    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'

    def get_queryset(self):
        """返回最近发布的5个问题(不包括未来的问题)。"""
        return Question.objects.filter(
            pub_date__lte=timezone.now()
        ).order_by('-pub_date')[:5]

class DetailView(generic.DetailView):
    model = Question
    template_name = 'polls/detail.html'

    def get_queryset(self):
        """确保未发布的问题无法被查看。"""
        return Question.objects.filter(pub_date__lte=timezone.now())

class ResultsView(generic.DetailView):
    model = Question
    template_name = 'polls/results.html'

5. 配置 URL 路由 (polls/urls.py)

为应用创建独立的 URL 配置,并在项目主 urls.py 中包含它。

# polls/urls.py
from django.urls import path
from . import views

app_name = 'polls'  # 命名空间,防止URL名称冲突
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('<int:pk>/', views.DetailView.as_view(), name='detail'),
    path('<int:pk>/results/', views.ResultsView.as_view(), name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

# myproject/urls.py (项目主路由)
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('polls/', include('polls.urls')),  # 包含应用的路由
]

6. 创建模板 (polls/templates/polls/index.html)

模板用于定义前端HTML。Django 模板语言 (DTL) 简单而强大。

{% load static %}
<link rel="stylesheet" href="{% static 'polls/style.css' %}">

{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

7. 注册模型到管理后台 (polls/admin.py)

Django 自动生成功能强大的管理后台,只需简单注册模型即可。

from django.contrib import admin
from .models import Question, Choice

admin.site.register(Question)
admin.site.register(Choice)

8. 创建超级用户并运行服务

# 创建管理员账号
python manage.py createsuperuser

# 启动开发服务器
python manage.py runserver

现在,你可以访问以下地址:

  • 投票应用首页:http://localhost:8000/polls/
    投票列表页
  • 自动化管理后台:http://localhost:8000/admin/
    Django管理后台登录

Django 管理后台自带完整的用户认证和权限管理系统,对于开发前后端一体的内部管理系统或小型项目,能极大提升开发效率。
管理后台界面
模型管理界面

进阶开发与生产部署要点

关键注意事项

  1. 安全配置
    • 生产环境务必设置 DEBUG = False
    • 正确配置 ALLOWED_HOSTS
    • 使用 python manage.py check --deploy 进行部署前安全检查。
  2. 静态/媒体文件处理
    • 开发时使用 STATICFILES_DIRS
    • 生产时运行 python manage.py collectstatic 收集文件,并由 Nginx/Apache 等 Web 服务器直接托管。
  3. 数据库优化
    • 善用 select_related()prefetch_related() 减少查询次数。
    • 避免在循环中进行数据库查询。
    • 使用 Django Debug Toolbar 进行性能分析。
  4. 迁移文件管理
    • 迁移文件需纳入版本控制 (如 Git)。
    • 团队协作时,避免直接编辑已生成的迁移文件。

实用开发技巧

  1. 环境变量管理
    使用 python-dotenv 等工具管理敏感配置。

    from dotenv import load_dotenv
    import os
    load_dotenv()
    SECRET_KEY = os.getenv('SECRET_KEY')
  2. 高效查询

    # 批量创建
    Post.objects.bulk_create([...])
    # 仅获取必需字段
    Post.objects.only('title', 'created_at')
    # 使用 F() 表达式避免竞态条件
    from django.db.models import F
    Post.objects.filter(id=1).update(views=F('views') + 1)
  3. 缓存策略

    from django.views.decorators.cache import cache_page
    @cache_page(60 * 15)  # 缓存15分钟
    def my_view(request):
        ...

生产部署建议

  1. 典型架构

    Nginx (反向代理/静态文件)
        ⇅
    Gunicorn 或 uWSGI (应用服务器)
        ⇅
    Django
        ⇅
    PostgreSQL / MySQL
  2. 关键命令

    # 收集静态文件
    python manage.py collectstatic --noinput
    # 使用 Gunicorn 启动
    gunicorn --workers 3 myproject.wsgi:application
  3. 性能与监控

    • 集成 django-silk 进行请求性能分析。
    • 使用 django-prometheus 暴露监控指标。
    • 配置完善的日志记录。
  4. 安全加固

    • 设置 SECURE_HSTS_SECONDS 启用 HSTS。
    • 配置 CSRF_COOKIE_SECURESESSION_COOKIE_SECURETrue (HTTPS环境下)。
    • 考虑使用 django-csp 添加内容安全策略头。

通过以上步骤,你不仅能够快速搭建起一个 Django 项目,还能了解其核心工作流程和最佳实践。Django “开箱即用”的特性与高度的可定制性,使其能够优雅地支撑从快速原型到复杂企业级应用的各类场景。




上一篇:Linus Torvalds的理想Linux PC配置与硬件选择:稳定优先,ECC内存是硬性要求
下一篇:Kubernetes成本优化实战:避免云资源浪费的5个最佳实践
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-11 17:53 , Processed in 0.314432 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表