侧边栏壁纸
  • 累计撰写 26 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

学生管理系统

十点差三分
2024-10-13 / 0 评论 / 0 点赞 / 37 阅读 / 0 字

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='学生详细信息'),
]
0

评论区