Django实现学生管理系统
数据库的设计与创建
1. 需求分析
首先,需要确定系统需要支持的功能,比如:
- 学生信息管理(增加、删除、修改、查询)
- 课程信息管理
- 成绩管理
- 教师信息管理
- 班级信息管理
2. 概念设计
概念设计通常涉及到定义实体和实体之间的关系。例如,学生管理系统可能包含以下实体:
- 学生(Student)
- 教师(Teacher)
- 课程(Course)
- 成绩(Grade)
- 班级(Class)
实体之间的关系可能包括:
- 学生与成绩(一对多)
- 学生与班级(多对一)
- 教师与课程(多对多)
3. 逻辑设计
逻辑设计是将概念设计转换为数据库模型,如关系模型。你需要定义每个实体的属性,并确定主键和外键。
示例表结构:
- 学生表(Students)
- StudentID (PK)
- Name
- Birthdate
- ClassID (FK)
- 教师表(Teachers)
- TeacherID (PK)
- Name
- Department
- 课程表(Courses)
- CourseID (PK)
- CourseName
- TeacherID (FK)
- 成绩表(Grades)
- GradeID (PK)
- StudentID (FK)
- CourseID (FK)
- Score
- 班级表(Classes)
- ClassID (PK)
- ClassName
- TeacherID (FK)
前后端分离
后端API的创建
一、创建Django项目
1、在pycharm中使用命令行创建一个Django项目
django-admin startproject studentManage(项目名称)
2、应用的创建
1.通过命令行创建app
python manage.py startapp app(创建的app的名称)
2.注册app
1.找到setting.py中的 INSTALLED_APPS,在里面添加
'app.apps.AppConfig'
3、model.py中创建orm数据库模型
from django.db import models
# Create your models here.
class Student(models.Model):
StudentID = models.AutoField(primary_key=True)
Name = models.CharField(max_length=100)
Birthdate = models.DateField(max_length=1000)
ClassID = models.ForeignKey('Class', on_delete=models.CASCADE)
def __str__(self):
return self.Name
class Teacher(models.Model):
TeacherID = models.AutoField(primary_key=True)
Name = models.CharField(max_length=100)
Department = models.CharField(max_length=100)
def __str__(self):
return self.Name
class Course(models.Model):
CourseID = models.AutoField(primary_key=True)
CourseName = models.CharField(max_length=100)
TeacherID = models.ForeignKey(Teacher, on_delete=models.CASCADE)
def __str__(self):
return self.CourseName
class Grade(models.Model):
GradeID = models.AutoField(primary_key=True)
StudentID = models.ForeignKey(Student, on_delete=models.CASCADE)
CourseID = models.ForeignKey(Course, on_delete=models.CASCADE)
Score = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return f"{self.StudentID.Name} - {self.CourseID.CourseName} Grade"
class Class(models.Model):
ClassID = models.AutoField(primary_key=True)
ClassName = models.CharField(max_length=100)
TeacherID = models.ForeignKey(Teacher, on_delete=models.CASCADE)
def __str__(self):
return self.ClassName
执行以下命令来创建这些模型对应的数据库表:
python manage.py makemigrations
python manage.py migrate
4、创建序列化器
# serializers.py
from rest_framework import serializers
from .models import Student, Teacher, Course, Grade, Class
class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = '__all__'
class TeacherSerializer(serializers.ModelSerializer):
class Meta:
model = Teacher
fields = '__all__'
class CourseSerializer(serializers.ModelSerializer):
class Meta:
model = Course
fields = '__all__'
class GradeSerializer(serializers.ModelSerializer):
class Meta:
model = Grade
fields = '__all__'
class ClassSerializer(serializers.ModelSerializer):
class Meta:
model = Class
fields = '__all__'
5、视图层的创建
# views -> student.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status, permissions
from apps.models import Student
from apps.serializers import StudentSerializer
from rest_framework.exceptions import NotFound
"""
基于类的视图
"""
"""学生信息"""
class StudentList(APIView):
def get(self, request):
students = Student.objects.all()
serializer = StudentSerializer(students, many=True)
return Response({
"code": 0,
"message": "获取学生信息成功",
"data": serializer.data
})
def post(self, request):
serializer = StudentSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response({
"code": 0,
"message": "添加学生信息成功",
"data": serializer.data
}, status=status.HTTP_201_CREATED)
return Response({
"code": 1,
"message": "添加学生信息失败",
"data": serializer.errors
}, status=status.HTTP_400_BAD_REQUEST)
"""单个学生信息"""
class StudentDetail(APIView):
permission_classes = [permissions.AllowAny]
def get_object(self, pk):
try:
return Student.objects.get(pk=pk)
except Student.DoesNotExist:
raise NotFound(f"Student not found with id: {pk}")
def get(self, request, pk):
student = self.get_object(pk)
serializer = StudentSerializer(student)
return Response({
"code": 0,
"message": "获取学生信息成功",
"data": serializer.data
})
def put(self, request, pk):
student = self.get_object(pk)
serializer = StudentSerializer(student, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(
{
"code": 0,
"message": "修改学生信息成功",
"data": serializer.data
})
return Response({
"code": 1,
"message": "修改学生信息失败",
"data": serializer.errors
}, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, pk):
student = self.get_object(pk)
student.delete()
return Response({
"code": 0,
"message": "删除学生信息成功",
}, status=status.HTTP_204_NO_CONTENT)
6、路由的创建
rom django.contrib import admin
from django.urls import path
from apps.views.studentView import StudentList, StudentDetail
urlpatterns = [
path("admin/", admin.site.urls),
path('students/', StudentList.as_view(), name="学生信息列表"),
path('students/<int:pk>/', StudentDetail.as_view(), name='学生详细信息'),
]
评论区