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

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>

以上是 python3.6+django2.0开发一套学员管理系统 的全部内容, 来源链接: utcz.com/z/333268.html

回到顶部