Python Django 框架使用指南: #

1. Django 简介 #

Django是一个高级Python Web框架,它鼓励快速开发和简洁实用的设计。由经验丰富的开发人员构建,它解决了Web开发中许多常见问题,让您可以专注于编写应用程序,而无需重新发明轮子。

Django 的主要特点 #

  • 快速开发:Django的设计理念是让开发者能够快速将想法转化为产品
  • 安全可靠:Django内置了防御常见安全问题的机制,如SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)等
  • 可扩展性:Django的模块化设计使其易于扩展
  • MTV架构:采用模型(Model)-模板(Template)-视图(View)的架构模式
  • ORM支持:内置对象关系映射(ORM),支持多种数据库
  • 管理后台:自动生成的管理界面,方便内容管理
  • 国际化支持:内置对多语言和时区的支持

2. Django 安装 #

2.1 系统要求 #

  • Python 3.8 或更高版本
  • pip 包管理器
  • 可选:虚拟环境(推荐)

2.2 安装步骤 #

步骤 1: 创建虚拟环境(推荐) #

bash
# 使用 venv 创建虚拟环境
python3 -m venv myenv

# 激活虚拟环境
# macOS/Linux
source myenv/bin/activate
# Windows
myenv\Scripts\activate

步骤 2: 安装 Django #

bash
pip install django

步骤 3: 验证安装 #

bash
django-admin --version

3. Django 项目结构 #

3.1 创建新项目 #

bash
django-admin startproject myproject

3.2 项目目录结构 #

text
myproject/
├── manage.py          # Django项目管理工具
└── myproject/         # 项目主目录
    ├── __init__.py    # Python包初始化文件
    ├── settings.py    # 项目配置文件
    ├── urls.py        # URL路由配置
    └── wsgi.py        # WSGI接口配置(用于部署)

3.3 启动开发服务器 #

bash
cd myproject
python manage.py runserver

访问 http://127.0.0.1:8000/ 即可看到Django的欢迎页面。

4. Django 核心概念 #

4.1 模型(Model) #

模型是数据的单一、确定的信息来源,包含了所存储数据的字段和行为。Django使用ORM将模型映射到数据库表。

创建模型 #

python
# myapp/models.py
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField('date published')
    author = models.CharField(max_length=100)
    
    def __str__(self):
        return self.title

数据库迁移 #

bash
python manage.py makemigrations
python manage.py migrate

4.2 视图(View) #

视图是处理Web请求并返回Web响应的函数或类。

函数视图 #

python
# myapp/views.py
from django.shortcuts import render, get_object_or_404
from .models import Article

def article_list(request):
    articles = Article.objects.all()
    return render(request, 'myapp/article_list.html', {'articles': articles})

def article_detail(request, article_id):
    article = get_object_or_404(Article, pk=article_id)
    return render(request, 'myapp/article_detail.html', {'article': article})

类视图 #

python
# myapp/views.py
from django.views.generic import ListView, DetailView
from .models import Article

class ArticleListView(ListView):
    model = Article
    template_name = 'myapp/article_list.html'
    context_object_name = 'articles'

class ArticleDetailView(DetailView):
    model = Article
    template_name = 'myapp/article_detail.html'
    context_object_name = 'article'

4.3 模板(Template) #

模板是包含静态HTML和动态内容占位符的文件。Django使用Django模板语言(DTL)。

模板示例 #

html
<!-- myapp/templates/myapp/article_list.html -->
<!DOCTYPE html>
<html>
<head>
    <title>文章列表</title>
</head>
<body>
    <h1>文章列表</h1>
    <ul>
        {% for article in articles %}
            <li><a href="{% url 'article_detail' article.id %}">{{ article.title }}</a> - {{ article.pub_date }}</li>
        {% endfor %}
    </ul>
</body>
</html>

4.4 URL路由 #

URL路由配置定义了URL模式与视图之间的映射关系。

python
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('articles/', include('myapp.urls')),
]

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

urlpatterns = [
    path('', views.ArticleListView.as_view(), name='article_list'),
    path('<int:pk>/', views.ArticleDetailView.as_view(), name='article_detail'),
]

5. 创建 Django 应用 #

5.1 创建应用 #

bash
python manage.py startapp myapp

5.2 注册应用 #

settings.py 中注册应用:

python
# myproject/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',  # 添加新创建的应用
]

6. Django 管理后台 #

6.1 创建超级用户 #

bash
python manage.py createsuperuser

6.2 注册模型 #

python
# myapp/admin.py
from django.contrib import admin
from .models import Article

admin.site.register(Article)

6.3 访问管理后台 #

启动开发服务器后,访问 http://127.0.0.1:8000/admin/,使用超级用户账号登录。

7. Django 表单 #

7.1 创建表单 #

python
# myapp/forms.py
from django import forms
from .models import Article

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = ['title', 'content', 'author']

7.2 在视图中使用表单 #

python
# myapp/views.py
from django.shortcuts import render, redirect
from .forms import ArticleForm

def article_create(request):
    if request.method == 'POST':
        form = ArticleForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('article_list')
    else:
        form = ArticleForm()
    return render(request, 'myapp/article_form.html', {'form': form})

7.3 表单模板 #

html
<!-- myapp/templates/myapp/article_form.html -->
<!DOCTYPE html>
<html>
<head>
    <title>创建文章</title>
</head>
<body>
    <h1>创建文章</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">保存</button>
    </form>
</body>
</html>

8. 数据库操作 #

8.1 查询数据 #

python
# 获取所有文章
articles = Article.objects.all()

# 根据条件过滤
recent_articles = Article.objects.filter(pub_date__year=2023)

# 获取单个对象
article = Article.objects.get(pk=1)

# 排序
articles = Article.objects.order_by('-pub_date')

# 限制结果数量
articles = Article.objects.all()[:5]

8.2 创建数据 #

python
# 方法1
article = Article(title="新文章", content="文章内容", author="作者")
article.save()

# 方法2
article = Article.objects.create(title="新文章", content="文章内容", author="作者")

8.3 更新数据 #

python
article = Article.objects.get(pk=1)
article.title = "更新的标题"
article.save()

# 批量更新
Article.objects.filter(author="作者").update(title="批量更新的标题")

8.4 删除数据 #

python
article = Article.objects.get(pk=1)
article.delete()

# 批量删除
Article.objects.filter(author="作者").delete()

9. 静态文件管理 #

9.1 配置静态文件 #

settings.py 中配置静态文件:

python
# myproject/settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    BASE_DIR / "static",
]
STATIC_ROOT = BASE_DIR / "staticfiles"

9.2 在模板中使用静态文件 #

html
<!-- myapp/templates/myapp/article_list.html -->
{% load static %}
<!DOCTYPE html>
<html>
<head>
    <title>文章列表</title>
    <link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
</head>
<body>
    <!-- 页面内容 -->
    <script src="{% static 'js/script.js' %}"></script>
</body>
</html>

9.3 收集静态文件 #

在部署前运行:

bash
python manage.py collectstatic

10. Django 部署 #

10.1 常见部署选项 #

  • Heroku:适合快速部署和扩展
  • AWS:Amazon Web Services,提供多种部署方案
  • DigitalOcean:简单易用的云服务器
  • PythonAnywhere:适合小型应用的托管服务

10.2 使用 Gunicorn 和 Nginx 部署 #

安装 Gunicorn #

bash
pip install gunicorn

运行 Gunicorn #

bash
gunicorn myproject.wsgi

配置 Nginx #

nginx
# /etc/nginx/sites-available/myproject
server {
    listen 80;
    server_name example.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /path/to/myproject;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/path/to/myproject/myproject.sock;
    }
}

11. Django 最佳实践 #

11.1 项目结构 #

  • 使用多个应用来组织代码
  • 遵循 DRY (Don’t Repeat Yourself) 原则
  • 使用环境变量存储敏感信息

11.2 代码质量 #

  • 使用类型提示
  • 编写单元测试
  • 使用代码风格检查工具(如 flake8)

11.3 性能优化 #

  • 使用缓存机制
  • 优化数据库查询
  • 使用 CDN 存储静态文件

12. 常见问题与解决方案 #

12.1 数据库连接错误 #

确保数据库配置正确,并且数据库服务正在运行。

12.2 静态文件无法访问 #

检查静态文件配置,确保 STATIC_URLSTATICFILES_DIRS 设置正确。

12.3 模板加载错误 #

确保模板文件路径正确,并且应用已在 INSTALLED_APPS 中注册。

13. 学习资源 #

总结 #

Django是一个功能强大、灵活且易于使用的Python Web框架,适合构建从简单到复杂的各种Web应用。通过遵循本指南,您可以快速入门Django并逐步掌握其高级功能。