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 配置和框架本身
工作流程
-
用户访问 URL → 2. URL 路由匹配 → 3. 调用对应视图函数 →
-
视图操作模型数据 → 5. 渲染模板 → 6. 返回 HTML 响应
重要特性
-
ORM:用 Python 类操作数据库,无需写 SQL
-
Admin:自动生成管理后台
-
模板系统:分离 HTML 和 Python 逻辑
-
表单处理:内置表单验证和处理
-
安全机制:CSRF 保护、SQL 注入防护等
这个简单项目展示了 Django 的核心功能,你可以在此基础上继续扩展功能!