Django WEB 简单项目创建与结构讲解

Django 简单项目创建与结构讲解

下面我将带你创建一个完整的 Django 小项目,并详细讲解每个部分。

🚀 项目创建步骤

1. 环境准备和项目创建

bash 复制代码
# 安装 Django
pip install django

# 创建项目 (myproject 是项目名称)
django-admin startproject myproject
cd myproject

# 创建应用 (myapp 是应用名称)
python manage.py startapp myapp

2. 项目结构

创建后的目录结构如下:

bash 复制代码
myproject/                 # 项目根目录
├── manage.py             # Django 项目管理脚本
├── myproject/            # 项目配置目录
│   ├── __init__.py
│   ├── settings.py       # 项目设置文件
│   ├── urls.py          # 项目URL路由
│   └── wsgi.py          # WSGI 配置
└── myapp/               # 应用目录
    ├── __init__.py
    ├── admin.py         # 管理后台配置
    ├── apps.py          # 应用配置
    ├── models.py        # 数据模型
    ├── tests.py         # 测试文件
    ├── views.py         # 视图函数
    └── migrations/      # 数据库迁移文件

📁 代码实现

1. 配置项目设置 myproject/settings.py

python 复制代码
"""
Django settings for myproject project.
"""

import os
from pathlib import Path

# 项目根目录
BASE_DIR = Path(__file__).resolve().parent.parent

# 安全密钥(生产环境要用随机字符串)
SECRET_KEY = 'django-insecure-your-secret-key-here'

# 调试模式(开发时设为True,生产环境必须设为False)
DEBUG = True

# 允许访问的主机
ALLOWED_HOSTS = []

# 已安装的应用
INSTALLED_APPS = [
    'django.contrib.admin',      # 管理后台
    'django.contrib.auth',       # 认证系统
    'django.contrib.contenttypes', # 内容类型
    'django.contrib.sessions',   # 会话管理
    'django.contrib.messages',   # 消息框架
    'django.contrib.staticfiles', # 静态文件
    'myapp',                     # 我们的自定义应用
]

# 中间件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# 根URL配置
ROOT_URLCONF = 'myproject.urls'

# 模板配置
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 模板目录
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

# 数据库配置(默认使用SQLite)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

# 静态文件配置
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

2. 创建数据模型 myapp/models.py

python 复制代码
from django.db import models

# 创建一个简单的博客文章模型
class Article(models.Model):
    # 标题字段,最大长度200字符
    title = models.CharField(max_length=200)
    # 内容字段,文本类型
    content = models.TextField()
    # 创建时间,自动设置为创建时的时间
    created_at = models.DateTimeField(auto_now_add=True)
    # 更新时间,自动设置为每次保存时的时间
    updated_at = models.DateTimeField(auto_now=True)
    
    def __str__(self):
        """在管理后台显示文章标题"""
        return self.title

3. 创建视图 myapp/views.py

python 复制代码
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Article

def home(request):
    """首页视图 - 显示所有文章列表"""
    articles = Article.objects.all().order_by('-created_at')  # 按创建时间倒序排列
    return render(request, 'home.html', {'articles': articles})

def article_detail(request, article_id):
    """文章详情视图"""
    # 获取文章,如果不存在返回404
    article = get_object_or_404(Article, id=article_id)
    return render(request, 'article_detail.html', {'article': article})

def about(request):
    """关于页面视图"""
    return HttpResponse("""
        <h1>关于我们</h1>
        <p>这是一个使用 Django 创建的简单博客项目。</p>
        <a href="/">返回首页</a>
    """)

4. 配置应用URL myapp/urls.py

python 复制代码
from django.urls import path
from . import views

# URL 模式配置
urlpatterns = [
    path('', views.home, name='home'),  # 首页
    path('about/', views.about, name='about'),  # 关于页面
    path('article/<int:article_id>/', views.article_detail, name='article_detail'),  # 文章详情
]

5. 配置项目URL myproject/urls.py

python 复制代码
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),  # 管理后台URL
    path('', include('myapp.urls')),  # 包含应用的URL配置
]

6. 配置管理后台 myapp/admin.py

python 复制代码
from django.contrib import admin
from .models import Article

# 注册模型到管理后台
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    # 列表中显示的字段
    list_display = ['title', 'created_at', 'updated_at']
    # 搜索字段
    search_fields = ['title', 'content']
    # 过滤器
    list_filter = ['created_at']

7. 创建模板文件

创建 templates/home.html

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>我的博客</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        .article { border: 1px solid #ddd; padding: 20px; margin: 10px 0; }
        .article h2 { color: #333; }
        .meta { color: #666; font-size: 0.9em; }
    </style>
</head>
<body>
    <h1>欢迎来到我的博客</h1>
    
    <nav>
        <a href="/">首页</a> | 
        <a href="/about/">关于</a> |
        <a href="/admin/">管理后台</a>
    </nav>
    
    <hr>
    
    {% if articles %}
        {% for article in articles %}
            <div class="article">
                <h2>
                    <a href="{% url 'article_detail' article.id %}">
                        {{ article.title }}
                    </a>
                </h2>
                <p>{{ article.content|truncatewords:30 }}</p>
                <div class="meta">
                    创建时间: {{ article.created_at|date:"Y-m-d H:i" }}
                </div>
            </div>
        {% endfor %}
    {% else %}
        <p>还没有文章,请到管理后台添加。</p>
    {% endif %}
</body>
</html>

创建 templates/article_detail.html

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>{{ article.title }}</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        .content { line-height: 1.6; }
        .meta { color: #666; font-size: 0.9em; }
    </style>
</head>
<body>
    <a href="/">← 返回首页</a>
    <h1>{{ article.title }}</h1>
    
    <div class="meta">
        创建时间: {{ article.created_at|date:"Y-m-d H:i" }}<br>
        更新时间: {{ article.updated_at|date:"Y-m-d H:i" }}
    </div>
    
    <div class="content">
        <p>{{ article.content|linebreaks }}</p>
    </div>
</body>
</html>

🎯 运行项目

1. 数据库迁移

bash 复制代码
# 创建迁移文件
python manage.py makemigrations

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

2. 创建超级用户

bash 复制代码
python manage.py createsuperuser

按提示输入用户名、邮箱和密码。

3. 启动开发服务器

bash 复制代码
python manage.py runserver

4. 访问项目

📚 核心概念讲解

MVC 设计模式

  • Model (模型)models.py - 处理数据和业务逻辑

  • View (视图)views.py - 处理用户请求,返回响应

  • Controller (控制器):Django 的 URL 配置和框架本身

工作流程

  1. 用户访问 URL → 2. URL 路由匹配 → 3. 调用对应视图函数 →

  2. 视图操作模型数据 → 5. 渲染模板 → 6. 返回 HTML 响应

重要特性

  • ORM:用 Python 类操作数据库,无需写 SQL

  • Admin:自动生成管理后台

  • 模板系统:分离 HTML 和 Python 逻辑

  • 表单处理:内置表单验证和处理

  • 安全机制:CSRF 保护、SQL 注入防护等

这个简单项目展示了 Django 的核心功能,你可以在此基础上继续扩展功能!

相关推荐
KangJX1 小时前
iOS 语音房(拍卖房)开发实践
前端·前端框架·客户端
月殇_木言1 小时前
Python期末复习
开发语言·python
神秘的猪头1 小时前
🧠 深入理解 JavaScript Promise 与 `Promise.all`:从原型链到异步编程实战
前端·javascript·面试
白兰地空瓶1 小时前
从「似懂非懂」到「了如指掌」:Promise 与原型链全维度拆解
前端·javascript
麦麦在写代码1 小时前
前端学习5
前端·学习
YF02111 小时前
Frida for MacBook/Android 安装配置
android·前端
狂炫冰美式2 小时前
3天,1人,从0到付费产品:AI时代个人开发者的生存指南
前端·人工智能·后端
一千柯橘2 小时前
从摄影新手到三维光影师:Three.js 核心要素的故事
前端·three.js
南囝coding2 小时前
2025年CSS新特性大盘点
前端·css