侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Python  /  管理员 发布于 7年前   307

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 makemigrationspython 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,redirectfrom app01 import modelsdef 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 adminfrom django.urls import pathfrom app01.views import classes,students,teachersurlpatterns = [ 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="https:del_classes.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >删除</a>     |<a href="https:edit_classes.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >编辑</a>    </td>   </tr>   {% endfor %}  </tbody> </table></div><div><a href="https: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,redirectfrom app01 import modelsdef 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 adminfrom django.urls import pathfrom app01.views import classes,students,teachersurlpatterns = [ 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="https:del_students.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >删除</a>     |<a href="https:edit_students.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >编辑</a>    </td>   </tr>   {% endfor %}  </tbody> </table></div><div><a href="https: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 adminfrom django.urls import pathfrom app01.views import classes,students,teachersurlpatterns = [ 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="https:del_classes.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >删除</a>     |<a href="https:edit_classes.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >编辑</a>     |<a href="https:set_teachers.html?nid={{ row.id }}" rel="external nofollow" >分配老师</a>    </td>   </tr>   {% endfor %}  </tbody> </table></div><div><a href="https: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,HttpResponsedef 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 adminfrom django.urls import pathfrom app01.views import classes,students,teachers,ajaxurlpatterns = [ 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="https: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 modelsdef 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 adminfrom django.urls import pathfrom app01.views import classes,students,teachers,ajaxurlpatterns = [ 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="https:del_students.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >删除</a>     |<a href="" rel="external nofollow" >Ajax删除</a>     |<a href="https:edit_students.html?nid={{ row.id }}" rel="external nofollow" rel="external nofollow" >编辑</a>    </td>   </tr>   {% endfor %}  </tbody> </table></div><div><a href="https:add_students.html" rel="external nofollow" rel="external nofollow" >添加</a> </div></body><script src="https: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>


  • 上一条:
    详解python中asyncio模块
    下一条:
    python爬虫面试宝典(常见问题)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客