python3.6+django2.0开发一套学员管理系统

作者:雪落忆海 时间:2022-11-10 14:15:21 

1.在pycharm中新建project demo1 添加app01 点击create按钮完成新建

2.在demo项目目录下新建目录static,并在settings.py中追加代码:


STATICFILES_DIRS=(os.path.join(BASE_DIR, 'static'),)

3.在setting.py中添加模板路径:


TEMPLATES = [
{
 'BACKEND': '...',
 'DIRS': [os.path.join(BASE_DIR, 'templates'),],
 'APP_DIRS': ...,
 'OPTIONS': {
  'context_processors': [
   ...
  ],
 },
},
]

4.学员管理系统数据库设计:

在app01/model.py目录下建立 班级、老师、学生 、老师与班级关联表 四张表:


from django.db import models

# Create your models here.

class Classes(models.Model):
'''
班级表
'''
title=models.CharField(max_length=32)
a=models.ManyToManyField('Teachers')

class Teachers(models.Model):
'''
老师表
'''
name=models.CharField(max_length=32)

class Students(models.Model):
username=models.CharField(max_length=32)
age=models.IntegerField()
gender=models.BooleanField()
cs=models.ForeignKey(Classes,on_delete=models.CASCADE)

在终端Terminal 项目目录下执行数据表更新命令:


python manage.py makemigrations
python manage.py migrate

至此生成了四张数据表,可以在pycharm中,点开右上角的Database面板,然后将项目中templates目录下边的db.sqlite3鼠标拖拽到Database面板下,对新创建的数据表进行查看。

5.学员管理系统之班级管理:

为了方便分别操作班级、老师、学生相关的业务,将app01目录下的views.py 删掉,在app01目录下新建目录views,并在views目录下 新建classes.py teachers.py students.py。

1.在classes.py 中写 get_classes add_classes del_classes edit_classes四个函数,完成对 班级数据 的增删改查:


from django.shortcuts import render,redirect
from app01 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':
 return render(request,'add_classes.html')
elif request.method=='POST':
 title=request.POST.get('title','')
 models.Classes.objects.create(title=title)
 return redirect('/classes.html')

def del_classes(request):
nid=request.GET.get('nid','')
models.Classes.objects.filter(id=nid).delete()
return redirect('/classes.html')

def edit_classes(request):
if request.method=="GET":
 nid = request.GET.get('nid', '')
 obj=models.Classes.objects.get(id=nid)
 return render(request,'edit_classes.html',{'obj':obj})
elif request.method=="POST":
 nid=request.POST.get('nid','')
 title=request.POST.get('xxoo','')
 models.Classes.objects.filter(id=nid).update(title=title)
 return redirect('/classes.html')

2.在urls.py 中配置url路由:


from django.contrib import admin
from django.urls import path
from app01.views import classes,students,teachers

urlpatterns = [
path('admin/', admin.site.urls),
path('classes.html', classes.get_classes),
path('add_classes.html', classes.add_classes),
path('del_classes.html', classes.del_classes),
path('edit_classes.html', classes.edit_classes),
# path('teachers.html', teachers.get_teachers),
# path('students.html', students.get_studernts),

]

3.在template目录下建立所需的html页面文件:

get_classes.html


DOCTYPE html>
<html lang="en">
<head>
<style>
 tr td{ border:1px solid #000;text-align:center;}
</style>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>

<div>
<table>
 <thead>
  <tr>
   <th>ID</th> <th>名称</th> <th>操作</th>
  </tr>
 </thead>
 <tbody>
  {% for row in cls_list %}
  <tr>
   <td>{{ row.id }}</td>
   <td>{{ row.title }}</td>
   <td><a href="/del_classes.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >删除</a>
    |<a href="/edit_classes.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >编辑</a>
   </td>
  </tr>
  {% endfor %}
 </tbody>
</table>
</div>

<div><a href="/add_classes.html" rel="external nofollow" rel="external nofollow" >添加</a> </div>
</body>
</html>

add_classes.html


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/add_classes.html" method="post">
{% csrf_token %}
<input type="text" name="title">
<input type="submit" value="提交">
</form>
</body>
</html>

edit_classes.html


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" action="/edit_classes.html">
{% csrf_token %}
<input type="hidden" name="nid" value="{{ obj.id }}">
<input type="text" name="xxoo" value="{{ obj.title }}">
<input type="submit" value="提交">
</form>

</body>
</html>

6.学员管理系统之学员管理: 1.在students.py 中写 get_students add_students del_students edit_students 四个函数,完成对 学生数据 的增删改查:


from django.shortcuts import render,redirect
from app01 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', '')
models.Students.objects.filter(id=nid).delete()
return redirect('/students.html')

def edit_students(request):
if request.method=="GET":
 nid = request.GET.get('nid', '')
 obj=models.Students.objects.get(id=nid)
 cs_list = models.Classes.objects.all()
 return render(request,'edit_students.html',{'obj':obj,'cs_list':cs_list})
elif request.method=="POST":
 nid=request.POST.get('nid','')
 u = request.POST.get('username', '')
 a = request.POST.get('age', '')
 g = request.POST.get('gender', '')
 c = request.POST.get('cs', '')
 models.Students.objects.filter(id=nid).update(
  username=u,
  age=a,
  gender=g,
  cs_id=c)
 return redirect('/students.html')

2.在urls.py 中配置url路由:


from django.contrib import admin
from django.urls import path
from app01.views import classes,students,teachers

urlpatterns = [
path('admin/', admin.site.urls),

path('classes.html', classes.get_classes),
path('add_classes.html', classes.add_classes),
path('del_classes.html', classes.del_classes),
path('edit_classes.html', classes.edit_classes),

path('students.html', students.get_students),
path('add_students.html', students.add_students),
path('del_students.html', students.del_students),
path('edit_students.html', students.edit_students),
# path('teachers.html', teachers.get_teachers),
]

3.在template目录下建立所需的html页面文件:

get_students.html


<!DOCTYPE html>
<html lang="en">
<head>
<style>
 tr td{ border:1px solid #000;text-align:center;}
</style>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>

<div>
<table>
 <thead>
  <tr>
   <th>ID</th>
   <th>姓名</th>
   <th>年龄</th>
   <th>性别</th>
   <th>班级</th>
   <th>操作</th>
  </tr>
 </thead>
 <tbody>
  {% for row in stu_list %}
  <tr>
   <td>{{ row.id }}</td>
   <td>{{ row.username }}</td>
   <td>{{ row.age }}</td>
   <td>{{ row.gender }}</td>
   <td>{{ row.cs.title }}</td>
   <td><a href="/del_students.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >删除</a>
    |<a href="/edit_students.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >编辑</a>
   </td>
  </tr>
  {% endfor %}
 </tbody>
</table>
</div>

<div><a href="/add_students.html" rel="external nofollow" rel="external nofollow" >添加</a> </div>
</body>
</html>

add_students


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>添加用户</h1>
<form method="post" action="/add_students.html">
{% csrf_token %}
<p><input type="text" name="username" placeholder="用户名"></p>
<p><input type="text" name="age" placeholder="年龄"></p>
<p>
 男<input type="radio" name="gender" value="1">
 女<input type="radio" name="gender" value="0">
</p>
<p>
 <select name="cs">
  {% for row in cs_list %}
  <option value="{{ row.id }}">{{ row.title }}</option>
  {% endfor %}
 </select>
</p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>

edit_students.html


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>编辑用户</h1>
<form method="post" action="/edit_students.html">
{% csrf_token %}
<input type="hidden" name="nid" value="{{ obj.id }}">
<p><input type="text" name="username" placeholder="用户名"></p>
<p><input type="text" name="age" placeholder="年龄"></p>
<p>
 男<input type="radio" name="gender" value="1">
 女<input type="radio" name="gender" value="0">
</p>
<p>
 <select name="cs">
  {% for row in cs_list %}
  <option value="{{ row.id }}">{{ row.title }}</option>
  {% endfor %}
 </select>
</p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>

7.学员管理系统之给班级分配老师:

在teachers数据表中增加一些老师信息:

在pycharm右上角的Database打开面板,然后将template目录下边的db.splte3鼠标拖入到Database面板中,打开db==》app01_teachers表

点击“+”,然后填入老师信息,然后点击有“DB”标志的向上箭头,进行数据保存。

1.在classes.py中增加set_teachers函数


def set_teachers(request):
if request.method=='GET':
 nid=request.GET.get('nid','')
 cls_obj=models.Classes.objects.get(id=nid)
 cls_teacher_list=cls_obj.a.all()
 all_teacher_list=models.Teachers.objects.all()
 return render(request,'set_teachers.html',{
  'cls_teacher_list':cls_teacher_list,
  'all_teacher_list':all_teacher_list,
  'nid':nid,
 })
elif request.method=='POST':
 nid = request.POST.get('nid', '')
 ids_str=request.POST.getlist('teacher_id','')
 ids_int=[]
 for i in ids_str:
  i=int(i)
  ids_int.append(i)
 obj=models.Classes.objects.get(id=nid)
 obj.a.set(ids_int)
 return redirect('/classes.html')

2.在urls.py 中配置url路由:


from django.contrib import admin
from django.urls import path
from app01.views import classes,students,teachers

urlpatterns = [
path('admin/', admin.site.urls),

path('classes.html', classes.get_classes),
path('add_classes.html', classes.add_classes),
path('del_classes.html', classes.del_classes),
path('edit_classes.html', classes.edit_classes),

path('students.html', students.get_students),
path('add_students.html', students.add_students),
path('del_students.html', students.del_students),
path('edit_students.html', students.edit_students),

path('set_teachers.html', classes.set_teachers),
]


3.在template目录下建立所需的html页面文件:


set_teachers.html




<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/set_teachers.html" method="post">
<input type="hidden" name="nid" value="{{ nid }}">
{% csrf_token %}
<select multiple size="10" name="teacher_id">

{% for item in all_teacher_list %}
  {% if item in cls_teacher_list %}
  <option value="{{ item.id }}" selected="selected">{{ item.name }}</option>
  {% else %}
  <option value="{{ item.id }}">{{ item.name }}</option>
  {% endif %}
 {% endfor %}
</select>
<input type="submit" value="提交">
</form>
</body>
</html>

对get_classes.html进行增添修改为:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>

<div>
<table>
 <thead>
  <tr>
   <th>ID</th> <th>名称</th> <th>任课老师</th> <th>操作</th>
  </tr>
 </thead>
 <tbody>
  {% for row in cls_list %}
  <tr>
   <td>{{ row.id }}</td>
   <td>{{ row.title }}</td>
   <td>
    {% for item in row.a.all %}
     <span>{{ item.name }}</span>
     {% endfor %}
   </td>
   <td><a href="/del_classes.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >删除</a>
    |<a href="/edit_classes.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >编辑</a>
    |<a href="/set_teachers.html?nid={{ row.id }}" rel="external nofollow" >分配老师</a>
   </td>
  </tr>
  {% endfor %}
 </tbody>
</table>
</div>

<div><a href="/add_classes.html" rel="external nofollow" rel="external nofollow" >添加</a> </div>
</body>
</html>

8.初识Ajax

Ajax是异步传输方式,偷偷的向后台发请求,不引起页面刷新,下面通过一个小例子来认识Ajax这种数据传输方式。

首先下载jQuery导入项目下的static目录下

1.在app01/Views目录下新建ajax.py


from django.shortcuts import render,redirect,HttpResponse

def ajax1(request):
return render(request,'ajax1.html')

def ajax2(request):
u=request.GET.get('username')
p=request.GET.get('password')
return HttpResponse('我愿意')

2.在urls.py中配置相关路由


from django.contrib import admin
from django.urls import path
from app01.views import classes,students,teachers,ajax

urlpatterns = [
path('admin/', admin.site.urls),

path('classes.html', classes.get_classes),
path('add_classes.html', classes.add_classes),
path('del_classes.html', classes.del_classes),
path('edit_classes.html', classes.edit_classes),

path('students.html', students.get_students),
path('add_students.html', students.add_students),
path('del_students.html', students.del_students),
path('edit_students.html', students.edit_students),

path('set_teachers.html', classes.set_teachers),

path('ajax1.html', ajax.ajax1),
path('ajax2.html', ajax.ajax2),
]

3.在template目录下新建ajax1.html


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
 .btn{
  display: inline-block;
  padding: 5px 15px;
  background-color: coral;
  color: white;
  cursor: pointer;
 }
</style>
</head>
<body>
<div>
<input placeholder="用户名" type="text">
<input placeholder="密码" type="password">
<div class="btn">提交</div>
</div>
<script src="/static/jquery-3.3.1.js"></script>
<script>
function submitForm() {
 var u=$('#username').val();
 var p=$('#password').val();
 $.ajax({
  url:'ajax2.html',
  type:'GET',
  data:{username:u,password:p},
  success:function (arg) {
   //回调函数 arg是服务器返回的字符串
   console.log(arg)
  }

})

}
</script>
</body>
</html>

9.学员管理系统之Ajax删除学员: 1.在ajax.py中增加ajax4函数


from app01 import models
def ajax4(request):
nid=request.GET.get('nid')
msg='成功'
try:
 models.Students.objects.get(id=nid).delete()
except Exception as e:
 msg=str(e)
return HttpResponse(msg)

2.在urls.py中配置相关路由


from django.contrib import admin
from django.urls import path
from app01.views import classes,students,teachers,ajax

urlpatterns = [
path('admin/', admin.site.urls),

path('classes.html', classes.get_classes),
path('add_classes.html', classes.add_classes),
path('del_classes.html', classes.del_classes),
path('edit_classes.html', classes.edit_classes),

path('students.html', students.get_students),
path('add_students.html', students.add_students),
path('del_students.html', students.del_students),
path('edit_students.html', students.edit_students),

path('set_teachers.html', classes.set_teachers),

path('ajax1.html', ajax.ajax1),
path('ajax2.html', ajax.ajax2),
path('ajax4.html', ajax.ajax4),
]

3.对get_students.html进行添加修改:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>

<div>
<table>
 <thead>
  <tr>
   <th>ID</th>
   <th>姓名</th>
   <th>年龄</th>
   <th>性别</th>
   <th>班级</th>
   <th>操作</th>
  </tr>
 </thead>
 <tbody>
  {% for row in stu_list %}
  <tr nid="{{ row.id }}">
   <td>{{ row.id }}</td>
   <td>{{ row.username }}</td>
   <td>{{ row.age }}</td>
   <td>{{ row.gender }}</td>
   <td>{{ row.cs.title }}</td>
   <td><a href="/del_students.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >删除</a>
    |<a href="#" rel="external nofollow" >Ajax删除</a>
    |<a href="/edit_students.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >编辑</a>
   </td>
  </tr>
  {% endfor %}
 </tbody>
</table>
</div>

<div><a href="/add_students.html" rel="external nofollow" rel="external nofollow" >添加</a> </div>
</body>
<script src="/static/jquery-3.3.1.js"></script>
<script>
function removeStudent(ths) {
 var nid=$(ths).parent().parent().attr('nid');
 $.ajax({
  url:'/ajax4.html',
  type:'GET',
  data:{nid:nid},
  success:function (arg) {
   if (arg=='成功'){
    window.location.reload();
   }else{
    alert(arg);
   }
  }
 })
}
</script>
</html>

来源:https://www.cnblogs.com/xuepangzi/p/8493853.html

标签:python3.6,django2.0,管理系统
0
投稿

猜你喜欢

  • Omi v1.0.2发布正式支持传递javascript表达式

    2024-04-19 11:03:04
  • python使用SMTP发送qq或sina邮件

    2021-03-08 01:06:55
  • vue简单的二维数组循环嵌套方式

    2024-04-27 16:09:56
  • Python 对象中的数据类型

    2022-01-25 00:58:35
  • python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法

    2023-07-07 02:41:30
  • Mysql 索引 BTree 与 B+Tree 的区别(面试)

    2024-01-13 03:10:32
  • vue下history模式刷新后404错误解决方法

    2024-04-27 15:47:56
  • Python如何使用type()函数查看数据的类型

    2022-05-30 17:49:31
  • jupyter notebook内核启动失败问题及解决方法

    2022-09-21 02:31:04
  • Python对切片命名的实现方法

    2023-09-30 09:43:15
  • phpMyAdmin下载、安装和使用入门

    2007-06-15 11:00:00
  • Python之Scrapy爬虫框架安装及使用详解

    2022-10-02 18:28:20
  • JavaScript队列函数和异步执行详解

    2024-04-22 13:26:21
  • javascript 使用sleep函数的常见方法详解

    2024-04-22 13:00:08
  • Python代码块批量添加Tab缩进的方法

    2022-10-10 16:41:39
  • python缺失值的解决方法总结

    2023-07-28 23:47:38
  • 对python产生随机的二维数组实例详解

    2022-10-29 14:13:28
  • js文本框输入内容智能提示效果

    2024-04-22 13:01:32
  • 采用手动分页方式显示文章具体的内容

    2009-10-29 11:58:00
  • MySQL使用LVM快照实现备份

    2024-01-26 20:21:17
  • asp之家 网络编程 m.aspxhome.com