小明:嘿,小李,最近我在研究一个关于学工管理系统开发的项目,正好你对编程比较熟悉,能不能帮我看看?
小李:当然可以!你说的是什么类型的学工管理系统?是学校内部用的吗?
小明:是的,主要是用于衡阳某大学的学生信息管理,包括成绩、课程、考勤等。我需要一个简单的Web应用来实现这些功能。
小李:那我们可以用Python来开发,比如用Django或者Flask这样的框架。你觉得哪个更适合?
小明:我之前学过一点Django,感觉它结构更清晰,适合做这种管理系统。
小李:好,那我们就用Django来开发。首先,我们需要创建一个项目和一个应用。你可以先安装Django,然后运行以下命令:
pip install django
小明:好的,我装好了。接下来呢?
小李:接下来我们创建一个项目,比如叫“xuegong”,然后创建一个应用,比如叫“student”:
django-admin startproject xuegong
cd xuegong
python manage.py startapp student
小明:明白了,那接下来要配置数据库了?
小李:对,Django默认使用SQLite,不过如果要做生产环境的话,建议换成MySQL或PostgreSQL。这里我们先用默认的,方便测试。
小明:那怎么定义学生信息的模型呢?
小李:我们可以在student应用下的models.py文件中定义模型。比如学生信息可能有姓名、学号、性别、出生日期、班级等字段:
from django.db import models
class Student(models.Model):
name = models.CharField(max_length=100)
student_id = models.CharField(max_length=20, unique=True)
gender = models.CharField(max_length=10)

birth_date = models.DateField()
class_name = models.CharField(max_length=50)
def __str__(self):
return self.name
小明:这样就定义了一个学生模型,接下来是不是需要迁移数据库?
小李:没错,执行以下命令生成迁移文件并应用到数据库:
python manage.py makemigrations
python manage.py migrate
小明:那怎么添加数据呢?
小李:可以通过Django的Admin后台来添加数据。先注册模型到admin.py中:
from django.contrib import admin
from .models import Student
admin.site.register(Student)
小明:然后启动服务器,访问http://127.0.0.1:8000/admin,登录后就可以添加学生信息了。
小李:没错,现在我们有了数据存储的基础。接下来我们可以设计前端页面,展示学生信息。
小明:前端部分应该怎么处理?
小李:可以用Django的模板系统,或者结合前端框架如Vue.js或React。不过对于简单系统,直接用HTML和CSS也行。
小明:那我先写一个简单的列表页面吧。
小李:好的,我们可以在views.py中写一个视图函数,获取所有学生信息,并传递给模板:
from django.shortcuts import render
from .models import Student
def student_list(request):
students = Student.objects.all()
return render(request, 'student/list.html', {'students': students})
小明:然后创建一个模板文件,放在templates/student目录下,命名为list.html。
小李:是的,模板里可以写一个表格来展示学生信息,比如:
<table>
<tr>
<th>姓名</th>
<th>学号</th>
<th>性别</th>
<th>出生日期</th>
<th>班级</th>
</tr>
{% for student in students %}
<tr>
<td>{{ student.name }}</td>
<td>{{ student.student_id }}</td>
<td>{{ student.gender }}</td>
<td>{{ student.birth_date }}</td>
<td>{{ student.class_name }}</td>
</tr>
{% endfor %}
</table>
小明:这样就能显示学生列表了。那怎么添加新的学生信息呢?
小李:我们可以创建一个表单页面,让用户输入学生信息。Django提供了Form类来简化这个过程。
小明:具体怎么做呢?
小李:在student应用中创建一个forms.py文件,定义一个StudentForm:
from django import forms
from .models import Student
class StudentForm(forms.ModelForm):
class Meta:
model = Student
fields = ['name', 'student_id', 'gender', 'birth_date', 'class_name']
小明:然后在views.py中添加一个添加学生的视图:
from django.shortcuts import render, redirect
from .models import Student
from .forms import StudentForm
def add_student(request):
if request.method == 'POST':
form = StudentForm(request.POST)
if form.is_valid():
form.save()
return redirect('student_list')
else:
form = StudentForm()
return render(request, 'student/add.html', {'form': form})
小明:然后创建一个add.html模板,包含表单元素。
小李:是的,模板中可以写成:
<form method="post">
{{ form.as_p }}
<button type="submit">提交</button>
</form>
小明:这样就能完成添加操作了。
小李:没错,现在我们已经实现了学生信息的增删改查功能。接下来可以考虑加入更多功能,比如按班级筛选、搜索等。
小明:那怎么实现搜索功能呢?
小李:可以在视图中根据请求参数过滤学生信息。例如,在student_list视图中,可以根据班级名进行筛选:
def student_list(request):
query = request.GET.get('q')
if query:
students = Student.objects.filter(class_name__icontains=query)
else:
students = Student.objects.all()
return render(request, 'student/list.html', {'students': students})
小明:这样用户就可以在页面上输入班级名称进行搜索了。
小李:是的,还可以在模板中添加一个搜索框,让用户体验更好。
小明:那部署方面需要注意什么呢?
小李:如果你要在衡阳地区的服务器上部署,建议使用Gunicorn和Nginx来托管Django应用。同时,数据库需要从SQLite切换为MySQL或PostgreSQL。
小明:那我可以参考一下Django官方文档,或者找一些部署教程。
小李:没错,Django官方文档非常详细,推荐你多看看。另外,也可以使用Docker来打包应用,方便部署。
小明:谢谢你的帮助,我现在对这个项目更有信心了。
小李:不客气,有任何问题随时问我。祝你项目顺利!
