小李:嘿,老王,最近我听说苏州那边有个学校想做一个学工管理系统,你有没有兴趣一起参与?
老王:哦,是吗?这个系统大概需要实现哪些功能呢?
小李:主要是学生信息管理、成绩记录、通知公告发布这些吧。还有可能要跟教务系统对接。
老王:听起来挺常见的。不过用什么技术来做呢?你们有没有考虑过用Python?
小李:对啊,Python确实挺适合做这种后台系统的。我记得你之前做过几个Web项目,是不是可以用Django或者Flask?
老王:没错,Django的话,它自带了ORM和admin界面,对于快速搭建管理系统很有帮助。而且它的安全性也比较好。
小李:那我们就开始吧!先设计一下数据库结构。比如学生表、课程表、成绩表这些。
老王:嗯,我们可以用Django的模型来定义这些表。比如学生表里应该包括学号、姓名、性别、班级、联系方式等字段。
小李:对,然后成绩表可能需要关联到学生和课程。这样就能查询每个学生的成绩了。
老王:是的,Django的外键机制可以很方便地处理这种关系。接下来我们写一些基本的视图和模板,让管理员能够添加、编辑和查看学生信息。
小李:那我们先从创建Django项目开始吧。首先安装Django,然后创建一个新的应用,比如叫“student_management”。
老王:好的,下面我给你写一段代码,展示如何创建学生模型。
from django.db import models
class Student(models.Model):
student_id = models.CharField(max_length=20, unique=True)
name = models.CharField(max_length=100)
gender = models.CharField(max_length=10)
class_name = models.CharField(max_length=50)
contact = models.CharField(max_length=20)
def __str__(self):
return self.name
小李:这段代码看起来没问题。接下来我们还需要创建管理员界面,让用户能直接在后台操作数据。
老王:对,Django的admin模块已经帮我们做了很多事。只需要在admin.py中注册模型即可。
小李:那我们再写一段代码,把Student模型注册到admin中。
from django.contrib import admin
from .models import Student
admin.site.register(Student)
老王:现在,运行一下服务器,看看能不能访问admin页面。如果没问题,就可以登录进去添加学生信息了。
小李:太好了!那接下来我们怎么处理成绩管理呢?
老王:成绩管理可以单独建一个模型,比如Score。它应该包含学生、课程、分数这几个字段。
小李:那我们再来写一个Score模型。
class Score(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
course = models.CharField(max_length=100)
score = models.IntegerField()
def __str__(self):
return f"{self.student.name} - {self.course}"
老王:这样就完成了成绩表的定义。接下来我们可以编写视图,让管理员能够添加成绩。
小李:那我们怎么创建一个简单的成绩添加页面呢?
老王:可以用Django的Form来创建表单,然后在视图中处理POST请求,保存数据。
小李:好的,那我们先写一个表单类。
from django import forms
from .models import Score
class ScoreForm(forms.ModelForm):
class Meta:
model = Score
fields = ['student', 'course', 'score']
老王:然后在views.py中,我们写一个函数来处理表单提交。
from django.shortcuts import render, redirect
from .forms import ScoreForm
def add_score(request):
if request.method == 'POST':
form = ScoreForm(request.POST)
if form.is_valid():
form.save()
return redirect('score_list')
else:
form = ScoreForm()
return render(request, 'add_score.html', {'form': form})
小李:那我们需要一个模板文件,比如add_score.html,用来显示表单。
老王:是的,下面是一个简单的HTML模板示例。

<!-- add_score.html -->
<h2>添加成绩</h2>
<form method="post">
<{{ form.as_p }}>
<button type="submit">提交</button>
</form>
小李:这看起来很直观。那我们还可以添加一个成绩列表页面,方便查看所有成绩。
老王:没错,我们可以用Django的ListView来展示所有成绩。
小李:那我们来写一个视图类。
from django.views.generic import ListView
from .models import Score
class ScoreList(ListView):
model = Score
template_name = 'score_list.html'
context_object_name = 'scores'
老王:然后创建一个score_list.html模板,显示所有成绩。
<!-- score_list.html -->
<h2>成绩列表</h2>
<ul>
{% for score in scores %}
<li>{{ score.student.name }} - {{ score.course }}: {{ score.score }}</li>
{% endfor %}
</ul>
小李:这样用户就能看到所有成绩了。那我们还可以添加搜索功能,方便查找特定学生的成绩。
老王:是的,可以在视图中添加一个搜索参数,然后根据条件过滤数据。
小李:那我们怎么实现搜索呢?
老王:可以在视图中检查请求中的查询参数,然后使用filter方法筛选数据。
小李:那我们来修改ScoreList视图,加入搜索功能。
from django.views.generic import ListView
from .models import Score
class ScoreList(ListView):
model = Score
template_name = 'score_list.html'
context_object_name = 'scores'
def get_queryset(self):
query = self.request.GET.get('q')
if query:
return Score.objects.filter(student__name__icontains=query)
return Score.objects.all()
小李:这样用户就可以在地址栏中输入?q=张三,来查找张三的成绩了。
老王:对,这样系统就更实用了。接下来我们可以考虑添加权限控制,确保只有管理员才能操作这些数据。
小李:权限控制怎么做呢?
老王:Django提供了内置的权限系统,我们可以通过@login_required装饰器限制访问,或者在视图中检查用户是否是管理员。
小李:那我们在视图中加上@login_required装饰器试试。
from django.contrib.auth.decorators import login_required
@login_required
def add_score(request):
...
老王:这样用户必须登录后才能访问添加成绩页面。同时,我们也可以在admin中设置用户的权限。
小李:看来这个系统已经初具规模了。那我们还可以考虑集成通知公告功能,让学生和老师都能及时收到消息。
老王:是的,我们可以创建一个Notice模型,存储公告内容和发布时间,然后在前端展示。
小李:那我们来写一个Notice模型。
class Notice(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
老王:然后创建一个视图,展示所有公告。
from django.views.generic import ListView
from .models import Notice
class NoticeList(ListView):
model = Notice
template_name = 'notice_list.html'
context_object_name = 'notices'
小李:这样用户就能看到最新的通知了。最后,我们还可以添加一个首页,整合各个功能模块。
老王:是的,可以做一个简单的主页,引导用户进入不同的管理页面。
小李:总的来说,通过Django框架,我们已经完成了一个基础的学工管理系统,支持学生信息管理、成绩录入与查询、通知公告等功能。
老王:没错,这样的系统非常适合苏州地区的学校使用,特别是那些希望快速上线并具备扩展性的单位。
小李:我觉得这次合作挺成功的,以后有类似的项目我们还可以继续合作。
老王:当然,我也觉得这是一个不错的项目经验,值得总结和分享。
