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

时间:2021-08-17 00:38:31

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 width="300">
<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 }}">删除</a>
|<a href="/edit_classes.html?nid={{ row.id }}">编辑</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div> <div><a href="/add_classes.html">添加</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 }}">删除</a>
|<a href="/edit_students.html?nid={{ row.id }}">编辑</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div> <div><a href="/add_students.html">添加</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 border="1">
<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 }}">删除</a>
|<a href="/edit_classes.html?nid={{ row.id }}">编辑</a>
|<a href="/set_teachers.html?nid={{ row.id }}">分配老师</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div> <div><a href="/add_classes.html">添加</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" id="username">
<input placeholder="密码" type="password" id="password">
<div class="btn" onclick="submitForm();">提交</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 border="1">
<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 }}">删除</a>
|<a onclick="removeStudent(this);" href="#">Ajax删除</a>
|<a href="/edit_students.html?nid={{ row.id }}">编辑</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div> <div><a href="/add_students.html">添加</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>

  

python3.6+django2.0 一小时学会开发一套学员管理系统demo的更多相关文章

  1. python3&period;5&plus;django2&period;0快速入门&lpar;二&rpar;

    昨天写了python3.5+django2.0快速入门(一)今天将讲解配置数据库,创建模型,还有admin的后台管理. 配置数据库 我们打开mysite/mysite/settings.py这个文件. ...

  2. python3&period;5&plus;django2&period;0快速入门&lpar;一&rpar;

    因为这篇教程需要用到anaconda的一些操作,如果还不懂anaconda的操作的同学可以看下这篇文章python 入门学习之anaconda篇. 创建python3+的开发环境 直接在终端输入:co ...

  3. Python3&period;6&plus;Django2&period;0以上 xadmin站点的配置和使用

    1. xadmin的介绍 django自带的admin站点虽然功能强大,但是界面不是很好看.而xadmin界面好看,功能更强大,并完全支持Bootstrap主题模板.xadmin内置了丰富的插件功能. ...

  4. 【Python3&period;6&plus;Django2&period;0&plus;Xadmin2&period;0系列教程一】环境搭建及项目创建

    由于工作需要,接触了大半年时间的Django+xadmin框架,一直没空对这块对进行相关的梳理.最近在同事的怂恿下,就在这分享下笔者的学习及工作经验吧. 好了,话不多说,下面开始进入正题: 环境需求: ...

  5. python3下Django2&period;0配置最新xadmin详解

    1,打开pycharm,创建一个Django项目 2,安装Django,默认是最新版本,pip3 install -i https://pypi.douban.com/simple/ django 3 ...

  6. python3&period;6 &plus; django2&period;0&period;6 &plus; xadmin0&period;6

    django2.0集成xadmin0.6报错集锦 http://www.lybbn.cn/data/bbsdatas.php?lybbs=50 1.django2.0把from django.core ...

  7. Python开发程序:学员管理系统(mysql)

    主题:学员管理系统 需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图: 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节 ...

  8. Scrapy1&period;4爬取笑话网站数据,Python3&period;5&plus;Django2&period;0构建笑话应用

    Part1:需求简要描述 1.抓取http://www.jokeji.cn网站的笑话 2.以瀑布流方式显示 Part2:安装爬虫框架Scrapy1.4 1. 安装Scrapy1.4 E:\django ...

  9. 【Python3&period;6&plus;Django2&period;0&plus;Xadmin2&period;0系列教程之二】学生信息管理系统(入门篇)

    上一篇我们已经创建好了一个Xadmin的基础项目,现在我们将在此基础上构建一个同样很基础的学生信息管理系统. 一.创建模型 模型是表示我们的数据库表或集合类,并且其中所述类的每个属性是表或集合的字段, ...

随机推荐

  1. iOS 10 跳转系统设置

    苦心人天不负, 为了项目终于把 iOS 10 跳转系统设置的方法给搞定了, 很欣慰. http://www.cnblogs.com/lurenq/p/6189580.html iOS 10 跳转系统设 ...

  2. 20160307 - 双击打开 Js 扩展名的附件要保持留心

    Windows Script Host 技术是一门很老的技术,它让 Windows 的自带脚本 VBScript 和 JScript 可以操作 Windows ActiveX 对象,这样的脚本具有本地 ...

  3. NDK各版本下载

    含r8e,r9d,r10c 其中x86_64代表64位系统 官网上只有最新版下载链接,如果想要下载以前的版本,可打开 https://archive.org/web/ 然后输入 http://deve ...

  4. Java 输入输出流 转载

    转载自:http://blog.csdn.net/hguisu/article/details/7418161 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所 ...

  5. Intellij idea开发Hadoop MapReduce程序

    1.首先下载一个Hadoop包,仅Hadoop即可. http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.6.0/hadoop-2.6.0 ...

  6. 你必须懂的 T4 模板:深入浅出

    示例代码:示例代码__你必须懂的T4模板:浅入深出.rar (一)什么是T4模板? T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit. T4文 ...

  7. java socket 单服务器多客户端实时通信

    想用JAVA做一个服务器,请问怎么利用TCP和线程,实现多个客户端同时在线,能与服务器进行交互? 服务器监听端口 做个无限循环 接到一个连接就创建一个通道线程,并将通道线程存储到一个list集合中 1 ...

  8. 10款基于jquery实现的超酷动画源码

    1.jQuery二级下拉菜单 下拉箭头翻转动画 之前我们分享过不少基于jQuery的二级下拉菜单,甚至是多级的下拉菜单,比如这款jQuery/CSS3飘带状多级下拉菜单就非常华丽.但今天要介绍的这款j ...

  9. 苹果新的编程语言 Swift 语言进阶(六)--函数和闭包

    一 .函数 1.1. 函数的定义和调用 函数的定义以funckeyword作为前缀,接着是函数名字,接着跟着一个能够带有參数.也能够不带參数的圆括号.接着用-> 指示函数的返回类型. 函数运行体 ...

  10. php模式设计之 中介者模式

    中介者模式 中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接相互的情况下传送或者调解对这些对象的集合的修改.一般处理具有类似属性,需要保持同步的非耦合对象时,最佳的做法就是中介者模式. ...