小明:最近我打算开发一个学工管理系统,但对技术选型不太确定。你有什么建议吗?
小李:如果你是新手的话,Python是个不错的选择。它语法简单,生态丰富,适合快速开发。
小明:那具体应该用什么框架呢?Django还是Flask?
小李:如果项目规模不大,Flask更轻量,适合做小型应用;如果是中大型系统,Django的ORM和管理后台会更方便。
小明:我决定用Django。那数据库方面呢?
小李:Django默认支持SQLite,但如果是生产环境,建议使用MySQL或PostgreSQL。特别是徐州本地的学校,可能需要与现有系统对接,所以推荐用MySQL。
小明:明白了。那我要怎么开始搭建项目呢?
小李:首先安装Python和Django,然后创建项目和应用。例如,你可以运行以下命令:
pip install django
django-admin startproject xuzhou_sis
cd xuzhou_sis
python manage.py startapp student_management
小明:这个结构看起来很清晰。接下来我需要设计模型,比如学生信息、课程信息等。
小李:没错。在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)
class_name = models.CharField(max_length=50)
phone = models.CharField(max_length=20)
def __str__(self):
return self.name
小李:很好!不过建议加上created_at和updated_at字段,用于记录数据变更时间。
小明:好的,那我现在还需要配置数据库。在settings.py里设置DATABASES为MySQL吗?
小李:是的。你需要先安装mysqlclient,然后配置如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xuzhou_sis_db',
'USER': 'root',
'PASSWORD': 'your_password',
'HOST': 'localhost',
'PORT': '3306',
}
}
小明:那接下来是不是要执行makemigrations和migrate?
小李:没错。运行以下命令生成并应用数据库迁移:
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,登录后就可以添加学生信息了。
小李:对,这一步非常关键。不过你也可以编写脚本批量导入数据,比如从Excel文件导入。
小明:那怎么实现用户登录功能呢?
小李:Django自带了认证系统,你可以直接使用。也可以自定义登录页面,或者集成第三方登录。
小明:我需要一个简单的登录页面,用户输入用户名和密码后跳转到主页。
小李:可以创建一个login.html模板,并在views.py中处理登录逻辑。例如:
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
def user_login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
return render(request, 'login.html', {'error': 'Invalid credentials'})
return render(request, 'login.html')
小明:这样就完成了基本的登录功能。接下来我需要设计前端页面。
小李:前端可以用HTML、CSS和JavaScript,或者使用Bootstrap来美化界面。Django模板语言也很适合做简单的页面渲染。
小明:那我想展示学生列表,该怎么写视图和模板?

小李:在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})
小明:然后在student_list.html中循环显示学生信息。
小李:没错。比如:
{% for student in students %}
- {{ student.name }} - {{ student.student_id }}
{% endfor %}
小明:现在我需要考虑权限控制,不同角色的用户访问不同的页面。
小李:可以使用Django的权限系统,或者自定义用户模型,添加角色字段。例如,可以创建一个Role模型,并关联到User。
小明:那我可以扩展User模型吗?
小李:是的。可以通过继承AbstractUser来扩展,默认的User模型不够灵活。例如:
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
role = models.CharField(max_length=50, choices=[('admin', '管理员'), ('teacher', '教师'), ('student', '学生')])
def __str__(self):
return self.username
小明:然后在settings.py中设置AUTH_USER_MODEL为'your_app.CustomUser'。
小李:对。这样就能根据角色控制权限了。
小明:最后我需要部署这个系统,应该怎么做?
小李:可以使用Docker容器化部署,或者直接在服务器上运行。如果是徐州本地的学校,建议使用云服务器,比如阿里云或腾讯云。
小明:那部署时需要注意哪些问题?
小李:确保数据库连接正确,静态文件路径配置正确,以及设置好SECRET_KEY和DEBUG选项。
小明:谢谢你的帮助,我觉得这个项目已经很有眉目了。
小李:不客气!祝你顺利完成学工管理系统,也希望它能为徐州的教育信息化做出贡献。
