Django练习-学生管理系统案例

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

项目准备

创建项目

django-admin startproject Mydjango
cd Mydjango
python manage.py startapp APP

项目架构

Mydjango
    APP
        migrations
            0001_initial.py
        static
            style.css
        templates
            index.html          [首页入口页面]
            add_classes.html    [添加班级页面]
            add_students.html   [添加学生页面]
            add_teachers.html   [添加老师页面]
            edit_classes.html   [编辑班级页面]
            edit_students.html  [编辑学生页面]
            edit_teachers.html  [编辑老师页面]
            get_classes.html    [班级展示页面]
            get_students.html   [学生展示页面]
            get_teachers.html   [老师展示页面]
            set_teacher.html    [班级分配老师页面]
        views
            index.py            [首页视图]
            classes.py          [班级视图]
            students.py         [学生视图]
            teachers.py         [老师视图]
        admin.py
        apps.py
        models.py
        tests.py
    Mydjango
        settings.py
        urls.py
        wsgi.py
    db.sqlite3
    manage.py

static

style.css

*{margin: auto;}
a,table {text-decoration:none; padding: 10px}
thead {font-size: 18px;}
table {border-spacing:0;border-collapse:collapse;background:lightskyblue; text-align: center;margin-top: 20px;}
table > th,td{padding: 5px 20px;}

.list_top{width: 200px; font-size: 30px;font-weight:bold;margin-top: 30px;}

templates

index.html



    
        
        学生管理系统
        
    
    
    

PythonDjango框架练习-学生管理系统

add_classes.html




    
    添加班级


    
{% csrf_token %}

add_students.html




    
    添加学生


    
{% csrf_token %}

男: 女:

add_teachers.html




    
    添加老师


    
{% csrf_token %}

男: 女:

edit_classes.html




    
    编辑班级


    
    
{% csrf_token %}

edit_students.html




    
    编辑学生


    
{% csrf_token %}

{% if obj.gender %} 男: 女: {% else %} 男: 女: {% endif %}

edit_teachers.html




    
    编辑老师


    
{% csrf_token %}

{% if obj.gender %} 男: 女: {% else %} 男: 女: {% endif %}

get_classes.html




    
    班级页面
    


    
    
            {% for row in cls_list %}
            
            {% endfor %}
        
序列号 名称 任课老师 操作
{{ row.id }} {{ row.titile }} {% for item in row.m.all %} {{ item.name }} {% endfor %} 编辑| 删除| 分配老师

get_students.html




    
    学生页面
    


    
    
            {% for row in stu_list %}
            
            {% endfor %}
        
序列号 姓名 年龄 性别 班级 操作
{{ row.id }} {{ row.username }} {{ row.age }} {% if row.gender == True %} 男 {% else %} 女 {% endif %} {{ row.cs.titile }} 编辑| 删除

get_teachers.html




    
    老师页面
    


    
    
            {% for row in tea_list %}
            
            {% endfor %}
        
序列号 姓名 年龄 性别 操作
{{ row.id }} {{ row.name }} {{ row.age }} {% if row.gender == True %} 男 {% else %} 女 {% endif %} 编辑| 删除

set_teacher.html




    
    分配老师



    
{% csrf_token %}

当前班级老师: {% for itum in cs_tea_list %} {{ itum }} {% endfor %}

需要修改请在以下栏目中选择并提交【支持多选】

views

classes.py

# -*- coding:utf8 -*-
from django.shortcuts import render,redirect
from APP import models

def get_classes(request):                                               #查看班级
    cls_list = models.Classes.objects.all()                             #班级表所有数据
    return render(request,'get_classes.html',{'cls_list':cls_list})     #返回班级表所有数据
def add_classes(request):                                               #添加班级
    if request.method == "GET":                                         #判断提交方式是否为GET
        return render(request, 'add_classes.html')                      #返回添加页面
    elif request.method == "POST":                                      #判断提交方式是否为POST
        title = request.POST.get('title')                               #获取班级名称
        models.Classes.objects.create(titile=title)                     #创建新的班级
        return redirect('/classes.html')                                #返回班级列表

def del_classes(request):                                               #删除班级
    nid = request.GET.get('nid')                                        #获取要删除的班级id
    models.Classes.objects.filter(id=nid).delete()                      #删除班级
    return redirect('/classes.html')                                    #返回班级列表
def edit_classes(request):                                              #编辑班级
    if request.method == "GET":                                         #判断提交方式是否为GET
        nid = request.GET.get('nid')                                    #获取编辑列的id
        obj = models.Classes.objects.filter(id=nid).first()             #获取编辑列的值
        return render(request,'edit_classes.html',{'obj':obj})          #返回编辑页面,并附加要修改的值
    elif request.method == "POST":                                      #判断提交方式是否为POST
        nid = request.POST.get("id")                                    #获取编辑列的id
        title = request.POST.get("con")                                 #获取编辑列的名称
        models.Classes.objects.filter(id=nid).update(titile=title)      #更新数据
        return redirect('/classes.html')                                #返回班级页面
def set_teacher(request):
    if request.method == 'GET':
        nid = request.GET.get('nid')                                        #获取当前要分配老师的班级id
        all_teacher_list = models.Teachers.objects.all()                    #获取所有老师
        cls_obj = models.Classes.objects.filter(id=nid).first()             #获取班级id对应的对象
        print("班级ID对象",cls_obj)
        cs_tea_list=cls_obj.m.all()                                         #获取当前班级的老师
        print("当前班级老师,不带ID用于展示",cs_tea_list)
        cls_teacher_list = cls_obj.m.all().values_list('id','name')         #获取当前班级老师的id和姓名,班级对象多对多关系正向查询
        print("当前班级老师带ID,用于查询和选择", cls_teacher_list)

        id_list = list(zip(*cls_teacher_list))[0] if list(zip(*cls_teacher_list)) else []        #zip格式化函数进行压缩格式化便于取值
        print("当前班级老师ID",id_list)
        return render(request,'set_teacher.html',                           #返回当前班级的老师和所有老师
                      {
                          'cls_teacher_list':id_list,
                          'all_teacher_list':all_teacher_list,
                          'nid':nid,
                          "cs_tea_list":cs_tea_list
                      })
    elif request.method == "POST":
        nid = request.GET.get('nid')                                        #当前编辑修改的ID
        print("当前编辑修改的ID",nid)
        ids = request.POST.getlist('teacher_ids')                           #分配的老师ID
        print("当前分配的老师ID",ids)
        obj = models.Classes.objects.filter(id=nid).first()                 #获取班级id对应的对象

        obj.m.set(ids)                                                      #修改分配老师
        return redirect('/classes.html')

index.py

# -*- coding:utf8 -*-
from django.shortcuts import render,redirect
from APP import models

def portal(request):
    return render(request, 'index.html')

students.py

# -*- coding:utf8 -*-
from django.shortcuts import render,redirect
from APP import models

def get_students(request):                              #学生信息展示
    stu_list = models.Students.objects.all()                            #显示所有学生列表
    return render(request,'get_students.html',{'stu_list':stu_list})    #返回学生页面,附加所有学生列表参数
def add_students(request):                              #学生信息添加
    if request.method == 'GET':                                         #判断提交方式
        cs_list = models.Classes.objects.all()                          #获取班级列表,用于添加学生班级下拉菜单
        return render(request,'add_students.html',{'cs_list':cs_list})  #返回添加学生页面,附加所有班级下拉列表
    elif request.method == 'POST':                                      #判断提交方式
        u = request.POST.get('username')                                #获取填写姓名
        a = request.POST.get('age')                                     #获取填写年龄
        g = request.POST.get('gender')                                  #获取选择性别
        c = request.POST.get('cs')                                      #获取选择班级

        #获取的字段内容添加到数据库
        models.Students.objects.create(
            username=u,
            age=a,
            gender=g,
            cs_id=c
        )
        return redirect('/students.html')                                                       #跳转到学生信息页面
def del_students(request):                                                      #学生信息删除
    nid = request.GET.get('nid')                                                                #获取要删除的学生id
    models.Students.objects.filter(id=nid).delete()                                             #删除选中学生
    return redirect('/students.html')                                                           #删除后刷新跳转到学生信息页面
def edit_students(request):                                                     #学生信息修改
    if request.method == "GET":                                                                 #判断提交方式是否为GET
        nid = request.GET.get('nid')                                                            #获取编辑列的id
        obj = models.Students.objects.filter(id=nid).first()                                    #获取编辑列的值
        cs_list = models.Classes.objects.values('id','titile')                                  #获取班级列表id和名称,用于修改学生班级下拉菜单
        return render(request,'edit_students.html',{'obj':obj,'cs_list':cs_list})               #返回编辑页面,并附加要修改的值
    elif request.method == "POST":                                                              #判断提交方式是否为POST
        nid = request.POST.get("nid")                                                           #获取编辑列的id
        u = request.POST.get("username")                                                        #获取编辑列的姓名
        a = request.POST.get("age")                                                             #获取编辑列的年龄
        g = request.POST.get("gender")                                                          #获取编辑列的性别
        class_id = request.POST.get("cs_list")                                                  #获取编辑列的班级
        models.Students.objects.filter(id=nid).update(username=u,age=a,gender=g,cs_id=class_id) #更新数据
        return redirect('/students.html')                                                       #返回班级页面

teachers.py

# -*- coding:utf8 -*-
from django.shortcuts import render,redirect
from APP import models

def get_teachers(request):                                    # 老师信息展示
    tea_list = models.Teachers.objects.all()                                # 获取所有老师列表
    return render(request, 'get_teachers.html', {'tea_list': tea_list})     # 返回老师页面,附加所有老师列表参数
def add_teachers(request):                                    # 老师信息添加
    if request.method == 'GET':                                             # 判断提交方式
        return render(request, 'add_teachers.html')                         # 返回添加老师页面
    elif request.method == 'POST':                                          # 判断提交方式
        u = request.POST.get('name')                                        # 获取填写姓名
        a = request.POST.get('age')                                         # 获取填写年龄
        g = request.POST.get('gender')                                      # 获取选择性别
        # 获取的字段内容添加到数据库
        models.Teachers.objects.create(
            name=u,
            age=a,
            gender=g,
        )
        return redirect('/teachers.html')                                   # 跳转到老师信息页面
def del_teachers(request):                                  # 老师信息删除
    nid = request.GET.get('nid')                                            # 获取要删除的老师id
    models.Teachers.objects.filter(id=nid).delete()                         # 删除选中老师
    return redirect('/teachers.html')                                       # 删除后刷新跳转到老师信息页面
def edit_teachers(request):                                 # 老师信息修改
    if request.method == "GET":                                                                 #判断提交方式是否为GET
        nid = request.GET.get('nid')                                                            #获取编辑列的id
        obj = models.Teachers.objects.filter(id=nid).first()                                    #获取编辑列的值
        cs_list = models.Classes.objects.values('id','titile')                                  #获取班级列表id和名称,用于修改学生班级下拉菜单
        return render(request,'edit_teachers.html',{'obj':obj,'cs_list':cs_list})               #返回编辑页面,并附加要修改的值
    elif request.method == "POST":                                                              #判断提交方式是否为POST
        nid = request.POST.get("nid")                                                           #获取编辑列的id
        u = request.POST.get("name")                                                            #获取编辑列的姓名
        a = request.POST.get("age")                                                             #获取编辑列的年龄
        g = request.POST.get("gender")                                                          #获取编辑列的性别
        models.Teachers.objects.filter(id=nid).update(name=u,age=a,gender=g)                    #更新数据
        return redirect('/teachers.html')                                                       #返回班级页面

admin.py

系统默认未变动

apps.py

from django.apps import AppConfig


class AppConfig(AppConfig):
    name = 'APP'

models.py

# -*- coding:utf8 -*-
from django.db import models

class Classes(models.Model):
    """
    班级表
    """
    titile = models.CharField(max_length=32)                    #班级名称
    m = models.ManyToManyField("Teachers")                      #班级和老师【多对多关系表】
class Teachers(models.Model):
    """
    教师表
    """
    name = models.CharField(max_length=32)                      #姓名
    age = models.IntegerField()                                 #年龄
    gender = models.BooleanField()                              #性别
class Students(models.Model):
    """
    学生表
    """
    username = models.CharField(max_length=32)                  #姓名
    age = models.IntegerField()                                 #年龄
    gender = models.BooleanField()                              #性别
    cs = models.ForeignKey("Classes",on_delete=models.CASCADE,) #学生和班级【一对多关系表】

Mydjango

settings.py

INSTALLED_APPS

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'APP',
]

TEMPLATES

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'APP/templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

DATABASES

实验环境使用sqlite3数据库,可根据自身需求变更为其它数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

LANGUAGE_CODE

LANGUAGE_CODE = 'zh-hans'

STATIC_URL

STATIC_URL = '/static/'

STATICFILES_DIRS

STATICFILES_DIRS=(
    os.path.join(BASE_DIR,"APP/static"),
    )

urls.py

# -*- coding:utf8 -*-
from django.contrib import admin
from django.urls import path,re_path
from APP.views import index,classes,students,teachers

urlpatterns = [
    path('admin/', admin.site.urls),                        # admin管理后台
    re_path('^$',index.portal),                             # 首页

    re_path('^classes.html$', classes.get_classes),         # 班级页面
    re_path('^add_classes.html$', classes.add_classes),     # 添加班级
    re_path('^del_classes.html$', classes.del_classes),     # 删除班级
    re_path('^edit_classes.html$', classes.edit_classes),   # 编辑班级
    re_path('^set_teacher.html$', classes.set_teacher),     # 分配老师

    re_path('^students.html$', students.get_students),      # 学生页面
    re_path('^add_students.html$', students.add_students),  # 添加学生
    re_path('^del_students.html$', students.del_students),  # 删除学生
    re_path('^edit_students.html$', students.edit_students),# 编辑学生

    re_path('^teachers.html$', teachers.get_teachers),      # 老师页面
    re_path('^add_teachers.html$', teachers.add_teachers),  # 添加老师
    re_path('^del_teachers.html$', teachers.del_teachers),  # 删除老师
    re_path('^edit_teachers.html$', teachers.edit_teachers),# 编辑老师

]

测试

生成数据表

python manage.py makemigrations APP
python manage.py migrate

运行服务访问测试

python manage.py runserver

转载于:https://my.oschina.net/zhaojunhui/blog/2906885

你可能感兴趣的:(Django练习-学生管理系统案例)