深度分析:Django实现“碎碎念”组件之管理页面全攻略
第一章:开篇唠嗑——我们为什么要造这个“轮子”?
各位码农兄弟姐妹们,有没有那么一瞬间,你脑子里会蹦出一些莫名其妙的想法?
“中午吃啥?黄焖鸡?不行,昨天吃过了...”
“老板刚才那个需求,简直是让我用绣花针给长城贴瓷砖!”
“啊!我追的剧今天更新!”
这些一闪而过的“碎碎念”,就像大脑产生的“精神代谢物”,不记录下来总觉得亏了。用微博太公开,用微信文件传输助手太乱。所以,最好的方式就是——自己动手,丰衣足食!用Django给自己搭建一个绝对私密的“碎碎念”后花园。
今天,咱们不整那些虚头巴脑的企业级项目,就玩点实在的。这个“碎碎念”组件,说白了就是一个超级简单的博客系统,但它麻雀虽小,五脏俱全。通过它,你能把Django最核心的MVT(模型-视图-模板) 开发模式摸得门儿清。以后老板让你做个内容管理系统(CMS),你直接就能套上这个模板,大声告诉他:“So easy!”
第二章:开工前の仪式感——搭建项目地基
首先,确保你的Python和Django环境已经就位。咱们用命令行说话,逼格要高!
# 创建一个专属目录,防止代码乱飞
mkdir my_murmur_site
cd my_murmur_site
# 创建虚拟环境,这是好习惯,就像吃饭前要洗手
python -m venv venv
# 激活虚拟环境(Windows请用 `venv\Scripts\activate`)
source venv/bin/activate
# 安装我们的大明星Django
pip install Django
# 创建项目,名字就叫murmur_site,霸气侧漏
django-admin startproject murmur_site .
# 创建我们的核心App,就叫murmurs,专业!
python manage.py startapp murmurs
完成这一步,你的项目结构应该像个样子了。接下来,我们要去murmur_site/settings.py文件里,把新生的murmurs这个App“上户口”。找到INSTALLED_APPS这个列表,把它加进去:
# murmur_site/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
... # 其他默认的App
'murmurs', # 就是它!我们的碎碎念App!
]
第三章:设计“念”の灵魂——数据模型(Model)
模型是数据的蓝图,我们的“碎碎念”长啥样,全由它说了算。打开murmurs/models.py文件,让我们开始设计。
一条“碎碎念”需要哪些东西?
- 内容:最核心的,你想念叨啥。
- 创建时间:记录下你灵光一现的那个瞬间。
- 是否公开:万一有的念想有点羞耻,可以设为私密。
- (可选)心情标签:比如“开心”、“吐槽”、“脑洞”之类的。
来,代码敲起来:
# murmurs/models.py
from django.db import models
class Murmur(models.Model):
# 内容,用TextField,想写多长写多长(理论上)
content = models.TextField(verbose_name="碎碎念内容")
# 创建时间,自动记录创建的那一刻
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
# 是否公开,默认是True,让大家都能看到你的“才华”
is_public = models.BooleanField(default=True, verbose_name="是否公开")
# 心情标签,可选字段,用CharField,最大长度15个字符
mood_tag = models.CharField(max_length=15, blank=True, verbose_name="心情标签") # blank=True 表示表单项可以为空
class Meta:
# 指定在管理后台显示的名称
verbose_name = "碎碎念"
verbose_name_plural = "所有碎碎念"
# 默认按创建时间倒序排列,新的在前面
ordering = ['-created_at']
def __str__(self):
# 这个方法决定了在Django管理后台和其他地方,如何显示这个对象的字符串表示
# 我们让它显示内容的前20个字符,太长的话用省略号
return self.content[:20] + "..." if len(self.content) > 20 else self.content
模型建好了,得告诉数据库一声,让它把表给创建出来。执行经典的Django数据库迁移两连:
python manage.py makemigrations
python manage.py migrate
看到OK的字样,恭喜你,数据库的表已经悄咪咪地建好了!
第四章:打造管理后台——让“念”有所归
Django自带一个强大的Admin后台,我们不用白不用。用它来管理我们的“碎碎念”,简直是杀鸡用牛刀——爽歪歪。
首先,我们需要把Murmur模型注册到后台。打开murmurs/admin.py文件:
# murmurs/admin.py
from django.contrib import admin
from .models import Murmur # 从当前目录的models.py导入Murmur类
# 最简单的方式:直接注册
# admin.site.register(Murmur)
# 但是!我们要玩点高级的,自定义一下显示样式
class MurmurAdmin(admin.ModelAdmin):
# 列表页面上显示哪些字段
list_display = ('content_short', 'mood_tag', 'is_public', 'created_at')
# 可以根据哪些字段快速过滤,会在页面右侧生成一个过滤器 sidebar
list_filter = ('is_public', 'mood_tag', 'created_at')
# 可以根据哪些字段进行搜索,会生成一个搜索框
search_fields = ('content',)
# 定义一个简短内容的方法,用于list_display
def content_short(self, obj):
return obj.content[:50] + "..." if len(obj.content) > 50 else obj.content
content_short.short_description = "内容预览" # 设置表头显示的名称
# 注册模型和自定义的Admin类
admin.site.register(Murmur, MurmurAdmin)
好了,现在我们需要一个超级用户(Superuser)来登录这个后台。回到命令行:
python manage.py createsuperuser
跟着提示,输入用户名、邮箱和密码(密码输入时不可见,别以为是键盘坏了)。
激动人心的时刻到了!启动开发服务器:
python manage.py runserver
打开浏览器,访问 http://127.0.0.1:8000/admin,用你刚才创建的超级用户账号登录。
噔噔噔噔!你会看到Django华丽的管理后台界面,其中就有我们的“所有碎碎念”(Murmurs)入口。点进去,你可以尽情地添加新的碎碎念、查看、编辑、甚至删除那些现在看起来有点傻的念头。这就是最基础的管理页面!
第五章:自立门户!——打造我们自己的管理页面
Admin后台虽好,但总不能把这个界面给普通用户用吧?太不专业了!所以,我们要打造一个面向用户(其实就是你自己)的、更简洁美观的管理页面。
这个页面要实现的功能很简单:
- 列表展示:把我所有的碎碎念都列出来。
- 创建新念:有一个表单可以发布新内容。
- 编辑旧念:对某条碎碎念进行修改。
- 删除功能:一键送走不想要的念头。
第一步:编写视图(View)—— 大脑逻辑
视图是处理请求和返回响应的核心。我们会在murmurs/views.py里创建几个函数来处理不同的任务。
# murmurs/views.py
from django.shortcuts import render, get_object_or_404, redirect
from .models import Murmur
from .forms import MurmurForm # 我们等下会创建这个表单
def murmur_list(request):
"""展示所有碎碎念的列表"""
# 从数据库获取所有的碎碎念,按创建时间倒序
murmurs = Murmur.objects.all()
return render(request, 'murmurs/murmur_list.html', {'murmurs': murmurs})
def murmur_create(request):
"""创建新的碎碎念"""
if request.method == 'POST':
# 如果表单被提交,我们用提交的数据填充表单
form = MurmurForm(request.POST)
if form.is_valid():
# 检查数据是否有效,有效则保存到数据库
form.save()
# 保存成功后,重定向到列表页面
return redirect('murmur_list')
else:
# 如果是GET请求,就展示一个空表单
form = MurmurForm()
# 渲染创建页面的模板
return render(request, 'murmurs/murmur_form.html', {'form': form, 'title': '发布新碎碎念'})
def murmur_edit(request, pk):
"""编辑一条已存在的碎碎念"""
# get_object_or_404 是捷径,如果找不到对应主键的对象,就返回404错误页面
murmur = get_object_or_404(Murmur, pk=pk)
if request.method == 'POST':
# 注意这里,我们用instance=murmur,表示是编辑这个已存在的实例
form = MurmurForm(request.POST, instance=murmur)
if form.is_valid():
form.save()
return redirect('murmur_list')
else:
# GET请求时,用已有的murmur数据填充表单
form = MurmurForm(instance=murmur)
return render(request, 'murmurs/murmur_form.html', {'form': form, 'title': '编辑碎碎念'})
def murmur_delete(request, pk):
"""删除一条碎碎念"""
murmur = get_object_or_404(Murmur, pk=pk)
if request.method == 'POST':
# 确认是POST请求才执行删除,防止直接通过URL误删
murmur.delete()
return redirect('murmur_list')
# 如果是GET请求,可以渲染一个确认删除的页面,这里为了简单,我们直接通过一个简单的表单来POST
# 在实际项目中,最好有一个确认弹窗或页面
return render(request, 'murmurs/murmur_confirm_delete.html', {'murmur': murmur})
第二步:设计表单(Form)—— 用户输入界面
Django的表单让我们能轻松生成HTML表单并处理数据验证。创建一个新文件murmurs/forms.py:
# murmurs/forms.py
from django import forms
from .models import Murmur
class MurmurForm(forms.ModelForm):
# 我们可以在这里对表单字段进行额外定制
# 比如给content字段一个Textarea控件,并定义样式
content = forms.CharField(
widget=forms.Textarea(attrs={'rows': 4, 'placeholder': '今天有什么想念叨的?...', 'class': 'form-control'}),
label='内容'
)
mood_tag = forms.CharField(
required=False, # 非必填
widget=forms.TextInput(attrs={'placeholder': '开心/吐槽/脑洞...', 'class': 'form-control'}),
label='心情标签'
)
is_public = forms.BooleanField(
initial=True, # 默认勾选
required=False, # 对于BooleanField,False表示非必选
label='公开可见'
)
class Meta:
model = Murmur # 指定这个表单关联的模型
fields = ['content', 'mood_tag', 'is_public'] # 指定表单中包含的字段
第三步:配置URL路由—— 指路明灯
现在我们需要告诉Django,哪个URL该由哪个视图函数来处理。先在murmursApp目录下创建urls.py文件:
# murmurs/urls.py
from django.urls import path
from . import views
# 给这个App的URL起个命名空间,防止重名
app_name = 'murmurs'
urlpatterns = [
path('', views.murmur_list, name='murmur_list'), # 列表页,对应 '/murmurs/'
path('new/', views.murmur_create, name='murmur_create'), # 创建页, '/murmurs/new/'
path('<int:pk>/edit/', views.murmur_edit, name='murmur_edit'), # 编辑页, '/murmurs/1/edit/'
path('<int:pk>/delete/', views.murmur_delete, name='murmur_delete'), # 删除页, '/murmurs/1/delete/'
]
然后,去项目的总路由文件murmur_site/urls.py里,包含我们App的路由:
# murmur_site/urls.py
from django.contrib import admin
from django.urls import path, include # 记得导入include
urlpatterns = [
path('admin/', admin.site.urls),
path('murmurs/', include('murmurs.urls')), # 所有以 murmurs/ 开头的URL,都交给murmurs这个App的urls.py去处理
]
第四步:雕琢模板(Template)—— 颜值担当
最后一步,就是写HTML模板了。在murmurs目录下创建templates/murmurs/这个嵌套目录,然后创建我们的模板文件。
murmur_list.html (列表页模板):
<!-- murmurs/templates/murmurs/murmur_list.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>我的碎碎念管理后台</title>
<!-- 引入Bootstrap,让样式好看点 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="container mt-4">
<h1 class="mb-4">我的碎碎念 <small class="text-muted">管理后台</small></h1>
<!-- 添加新碎碎念的按钮 -->
<p>
<a href="{% url 'murmurs:murmur_create' %}" class="btn btn-success">+ 发布新碎碎念</a>
</p>
<!-- 碎碎念列表 -->
<div class="list-group">
{% for murmur in murmurs %}
<div class="list-group-item list-group-item-action">
<div class="d-flex w-100 justify-content-between">
<!-- 内容 -->
<p class="mb-1">{{ murmur.content }}</p>
<small>
<!-- 心情标签 -->
{% if murmur.mood_tag %}
<span class="badge bg-info">{{ murmur.mood_tag }}</span>
{% endif %}
<!-- 公开状态 -->
{% if murmur.is_public %}
<span class="badge bg-success">公开</span>
{% else %}
<span class="badge bg-secondary">私密</span>
{% endif %}
</small>
</div>
<!-- 创建时间和操作按钮 -->
<div class="d-flex w-100 justify-content-between">
<small class="text-muted">{{ murmur.created_at }}</small>
<div>
<!-- 编辑按钮 -->
<a href="{% url 'murmurs:murmur_edit' murmur.id %}" class="btn btn-sm btn-outline-primary">编辑</a>
<!-- 删除按钮,我们指向一个确认页面 -->
<a href="{% url 'murmurs:murmur_delete' murmur.id %}" class="btn btn-sm btn-outline-danger">删除</a>
</div>
</div>
</div>
{% empty %}
<!-- 如果列表为空时显示 -->
<div class="list-group-item">
<p class="text-center text-muted">还没有任何碎碎念呢,快来发布第一条吧!</p>
</div>
{% endfor %}
</div>
</body>
</html>
murmur_form.html (创建和编辑页的共用模板):
<!-- murmurs/templates/murmurs/murmur_form.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="container mt-4">
<h1>{{ title }}</h1>
<form method="post">
<!-- 千万别忘了这行!Django用于防止跨站请求伪造 -->
{% csrf_token %}
<!-- 渲染表单字段 -->
{{ form.as_p }} <!-- as_p 会把每个字段渲染在 <p> 标签里 -->
<button type="submit" class="btn btn-primary">保存</button>
<a href="{% url 'murmurs:murmur_list' %}" class="btn btn-secondary">取消</a>
</form>
</body>
</html>
murmur_confirm_delete.html (删除确认页模板):
<!-- murmurs/templates/murmurs/murmur_confirm_delete.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>确认删除</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="container mt-4">
<h1>确认删除</h1>
<p>你确定要删除这条碎碎念吗?</p>
<blockquote class="blockquote">
"{{ murmur.content }}"
</blockquote>
<p class="text-muted"><small>创建于 {{ murmur.created_at }}</small></p>
<!-- 注意,删除操作要用POST方法 -->
<form method="post">
{% csrf_token %}
<button type="submit" class="btn btn-danger">是的,我确定删除</button>
<a href="{% url 'murmurs:murmur_list' %}" class="btn btn-secondary">取消</a>
</form>
</body>
</html>
第六章:大功告成!——看看我们的成果
现在,再次运行服务器 python manage.py runserver,这次访问 http://127.0.0.1:8000/murmurs/。
你会看到一个完全由你亲手打造的、简洁美观的“碎碎念”管理页面!你可以:
- 点击“发布新碎碎念”来添加内容。
- 在列表里点击每条碎碎念的“编辑”按钮进行修改。
- 点击“删除”按钮,经过确认后删除它。
整个过程丝滑流畅,没有任何违和感。这,就是你从“Django小白”迈向“全栈萌新”的关键一步!
第七章:尾声与展望
恭喜你!成功用Django实现了“碎碎念”组件的核心管理功能。这个小小的项目,几乎囊括了Web开发中最基础的CRUD(增删改查) 操作。
你可以在这个基础上继续“添油加醋”:
- 用户系统:让多人可以一起使用,每个人的碎碎念相互独立。
- 富文本编辑器:让发布内容时可以加粗、换行、插入图片。
- API接口:用Django REST Framework为你的碎碎念打造API,然后做个手机App。
- 更漂亮的UI:把Bootstrap换成你喜欢的其他前端框架。
编程最大的乐趣,就在于把想法变成现实。这个“碎碎念”项目就是最好的开始。现在,去发布你的第一条碎碎念吧,内容可以是:“哈哈,老子终于把Django管理页面搞定了!”
Happy Coding!愿你的代码没有Bug,你的“碎碎念”永远有趣!
8万+

被折叠的 条评论
为什么被折叠?



