Skip to content

Django 的详细使用指南,涵盖项目创建、模型设计、视图编写及部署:


1. 安装与初始化

bash
# 安装 Django
pip install django

# 创建项目
django-admin startproject myproject
cd myproject

# 创建应用
python manage.py startapp myapp

2. 项目结构

myproject/
├── myproject/          # 项目配置
│   ├── settings.py     # 数据库、中间件等配置
│   ├── urls.py         # 根路由
├── myapp/              # 应用模块
│   ├── models.py       # 数据模型
│   ├── views.py        # 视图逻辑
│   ├── urls.py         # 应用路由
│   └── templates/      # 模板文件
└── manage.py           # 管理脚本

3. 配置数据库(以 SQLite 为例)

修改 settings.py

python
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

4. 创建数据模型

编辑 myapp/models.py

python
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

生成迁移文件并同步数据库:

bash
python manage.py makemigrations
python manage.py migrate

5. 编写视图与模板

视图(views.py)

python
from django.shortcuts import render
from .models import Article

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

模板(templates/myapp/article_list.html)

html
<!DOCTYPE html>
<html>
<head>
    <title>文章列表</title>
</head>
<body>
    <h1>文章列表</h1>
    <ul>
        {% for article in articles %}
            <li>{{ article.title }} - {{ article.pub_date }}</li>
        {% endfor %}
    </ul>
</body>
</html>

6. 配置 URL 路由

应用路由(myapp/urls.py)

python
from django.urls import path
from . import views

urlpatterns = [
    path('articles/', views.article_list, name='article_list'),
]

项目路由(myproject/urls.py)

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

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

7. 管理后台

注册模型到后台(myapp/admin.py):

python
from django.contrib import admin
from .models import Article

admin.site.register(Article)

创建管理员账号并启动服务:

bash
python manage.py createsuperuser
python manage.py runserver

访问 http://localhost:8000/admin 管理数据。


8. 处理表单提交

表单类(forms.py)

python
from django import forms
from .models import Article

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

视图逻辑

python
from django.shortcuts import redirect
from .forms import ArticleForm

def create_article(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/create_article.html', {'form': form})

9. 静态文件处理

settings.py 中配置:

python
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / "static"]

模板中加载静态文件:

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

10. 部署到生产环境

使用 Gunicorn + Nginx

  1. 安装 Gunicorn:

    bash
    pip install gunicorn
  2. 配置 Nginx:

    nginx
    server {
        listen 80;
        server_name example.com;
        
        location /static/ {
            alias /path/to/your/static/;
        }
        
        location / {
            proxy_pass http://localhost:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
  3. 启动服务:

    bash
    gunicorn myproject.wsgi:application -w 4 -b 0.0.0.0:8000

11. 高级功能

REST API(使用 Django REST Framework)

  1. 安装 DRF:

    bash
    pip install djangorestframework
  2. 创建序列化器(serializers.py):

    python
    from rest_framework import serializers
    from .models import Article
    
    class ArticleSerializer(serializers.ModelSerializer):
        class Meta:
            model = Article
            fields = '__all__'
  3. 编写 API 视图(views.py):

    python
    from rest_framework import generics
    from .models import Article
    from .serializers import ArticleSerializer
    
    class ArticleListCreateView(generics.ListCreateAPIView):
        queryset = Article.objects.all()
        serializer_class = ArticleSerializer

12. 常见问题解决

  1. 数据库连接失败:检查 settings.py 中的数据库配置和权限。
  2. 静态文件 404:确保 DEBUG=False 时运行 python manage.py collectstatic
  3. 跨域问题:使用 django-cors-headers 中间件:
    python
    # settings.py
    INSTALLED_APPS = [..., 'corsheaders']
    MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware', ...]
    CORS_ALLOW_ALL_ORIGINS = True  # 开发环境临时允许所有

通过 Django,可快速构建功能完善的 Web 应用,适用于内容管理系统、API 服务和企业级应用。对于更高性能需求,可结合缓存(Redis)和异步任务(Celery)。

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer