2019独角兽企业重金招聘Python工程师标准>>>
项目准备
创建项目
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
添加班级
add_students.html
添加学生
add_teachers.html
添加老师
edit_classes.html
编辑班级
edit_students.html
编辑学生
edit_teachers.html
编辑老师
get_classes.html
班级页面
序列号
名称
任课老师
操作
{% for row in cls_list %}
{{ row.id }}
{{ row.titile }}
{% for item in row.m.all %}
{{ item.name }}
{% endfor %}
编辑|
删除|
分配老师
{% endfor %}
get_students.html
学生页面
序列号
姓名
年龄
性别
班级
操作
{% for row in stu_list %}
{{ row.id }}
{{ row.username }}
{{ row.age }}
{% if row.gender == True %}
男
{% else %}
女
{% endif %}
{{ row.cs.titile }}
编辑|
删除
{% endfor %}
get_teachers.html
老师页面
序列号
姓名
年龄
性别
操作
{% for row in tea_list %}
{{ row.id }}
{{ row.name }}
{{ row.age }}
{% if row.gender == True %}
男
{% else %}
女
{% endif %}
编辑|
删除
{% endfor %}
set_teacher.html
分配老师
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