个人 Django 资源汇总(含代码示例)

Django 是一个功能完备的 Python Web 框架,广泛应用于 Web 服务端开发。下面将为你提供一些关键的 Django 资源,并配上相应的代码示例,帮助你快速掌握 Django 的核心概念与最佳实践。


1. Django 入门:搭建第一个 Web 应用

创建 Django 项目

首先,确保你已经安装了 Django:

pip install django

然后,创建一个新的 Django 项目:

django-admin startproject myproject
cd myproject
python manage.py runserver

访问 http://127.0.0.1:8000/ 就可以看到 Django 默认的欢迎页面。

创建 Django 应用

Django 项目可以包含多个应用,每个应用负责某个特定功能。我们可以创建一个名为 blog 的应用:

python manage.py startapp blog

接下来,将 blog 添加到项目的 settings.py 文件的 INSTALLED_APPS 列表中。

视图与路由

在 blog/views.py 中添加一个视图:

from django.http import HttpResponse

def home(request):
    return HttpResponse("Welcome to my blog!")

接下来,在 blog/urls.py 中添加 URL 路由:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
]

然后,在 myproject/urls.py 中引用 blog.urls

from django.contrib import admin
from django.urls import path, include

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

现在访问 http://127.0.0.1:8000/ 可以看到 “Welcome to my blog!”。


2. Django 模型与数据库操作

Django 使用 ORM(对象关系映射)来处理数据库操作。在 blog/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

然后执行数据库迁移命令:

python manage.py makemigrations
python manage.py migrate

创建数据

我们可以通过 Django 的 Admin 后台或者 Django shell 来创建数据。首先,在 blog/admin.py 注册模型:

from django.contrib import admin
from .models import Post

admin.site.register(Post)

接着,创建一个超级用户:

python manage.py createsuperuser

登录 Admin 后台 http://127.0.0.1:8000/admin/,你可以看到 Post 模型,并能轻松添加数据。

查询数据

你也可以通过 Django shell 进行交互式查询:

python manage.py shell

然后在 shell 中执行以下代码:

from blog.models import Post
# 创建一个新帖子
Post.objects.create(title="My first post", content="This is the content of my first post")
# 获取所有帖子
posts = Post.objects.all()
for post in posts:
    print(post.title)


3. Django 模板引擎

Django 使用内建的模板引擎渲染 HTML 页面。在 blog/views.py 中,我们可以使用模板返回 HTML 内容:

from django.shortcuts import render
from .models import Post

def home(request):
    posts = Post.objects.all()
    return render(request, 'home.html', {'posts': posts})

然后在 blog/templates 目录下创建 home.html 文件,内容如下:

<!DOCTYPE html>
<html>
<head>
    <title>My Blog</title>
</head>
<body>
    <h1>Welcome to my blog!</h1>
    <ul>
        {% for post in posts %}
            <li>{{ post.title }}</li>
        {% endfor %}
    </ul>
</body>
</html>

这样,每次访问首页时,Django 会渲染并返回所有帖子标题。


4. Django Rest Framework (DRF) 构建 API

DRF 是一个扩展库,专门用于构建 RESTful API。首先,安装 DRF:

pip install djangorestframework

然后,添加到 INSTALLED_APPS 中:

INSTALLED_APPS = [
    'rest_framework',
    'blog',
]

创建序列化器

在 blog/serializers.py 中创建 Post 模型的序列化器:

from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ['id', 'title', 'content', 'published_date']

创建视图

在 blog/views.py 中使用 DRF 的 APIView 或 ViewSet 来创建 API 视图:

from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializer

class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

路由配置

在 blog/urls.py 中添加 API 路由:

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import PostViewSet

router = DefaultRouter()
router.register(r'posts', PostViewSet)

urlpatterns = [
    path('api/', include(router.urls)),
]

现在,你可以通过 http://127.0.0.1:8000/api/posts/ 获取所有帖子。


5. Django 部署与优化

使用 Gunicorn 和 Nginx 部署 Django

  1. 安装 Gunicornpip install gunicorn
  2. 启动 Gunicorngunicorn myproject.wsgi:application
  3. 配置 Nginx:使用 Nginx 作为反向代理服务器,配置 nginx.conf 文件:server { listen 80; server_name your_domain.com; location / { proxy_pass http://127.0.0.1:8000; } }
  4. 重启 Nginxsudo systemctl restart nginx

使用 Docker 部署 Django

  1. 创建 DockerfileFROM python:3.9-slim WORKDIR /app COPY . /app RUN pip install -r requirements.txt CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]
  2. 构建 Docker 镜像并运行docker build -t mydjangoapp . docker run -p 8000:8000 mydjangoapp

6. Django 性能优化

  • 缓存:使用 django-redis 进行缓存,减轻数据库负担。
  • 数据库优化:通过 select_related 和 prefetch_related 优化数据库查询。
  • 异步任务:使用 Celery 来处理后台异步任务,避免阻塞主线程。
pip install celery redis

在 settings.py 配置 Celery:

CELERY_BROKER_URL = 'redis://localhost:6379/0'


总结

这些代码示例涵盖了 Django 开发的核心部分,从创建项目、构建模型、视图与路由,到 API 构建、部署和优化等。通过这些代码示例,你可以快速入门并深入了解 Django 的强大功能。如果有更高级的需求,可以根据项目的实际需求,进一步了解 Django 的高级特性和最佳实践。