python3.6+django2.0 一小时学会开发一套学员管理系统demo
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的更多相关文章
- python3.5+django2.0快速入门(二)
昨天写了python3.5+django2.0快速入门(一)今天将讲解配置数据库,创建模型,还有admin的后台管理. 配置数据库 我们打开mysite/mysite/settings.py这个文件. ...
- python3.5+django2.0快速入门(一)
因为这篇教程需要用到anaconda的一些操作,如果还不懂anaconda的操作的同学可以看下这篇文章python 入门学习之anaconda篇. 创建python3+的开发环境 直接在终端输入:co ...
- Python3.6+Django2.0以上 xadmin站点的配置和使用
1. xadmin的介绍 django自带的admin站点虽然功能强大,但是界面不是很好看.而xadmin界面好看,功能更强大,并完全支持Bootstrap主题模板.xadmin内置了丰富的插件功能. ...
- 【Python3.6+Django2.0+Xadmin2.0系列教程一】环境搭建及项目创建
由于工作需要,接触了大半年时间的Django+xadmin框架,一直没空对这块对进行相关的梳理.最近在同事的怂恿下,就在这分享下笔者的学习及工作经验吧. 好了,话不多说,下面开始进入正题: 环境需求: ...
- Python3.7+Django2.0.4配合Mongodb打造高性能高扩展标签云存储方案
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_141 书接上回,之前有一篇文章提到了标签云系统的构建:Python3.7+jieba(结巴分词)配合Wordcloud2.js来构 ...
- python3下Django2.0配置最新xadmin详解
1,打开pycharm,创建一个Django项目 2,安装Django,默认是最新版本,pip3 install -i https://pypi.douban.com/simple/ django 3 ...
- python3.6 + django2.0.6 + xadmin0.6
django2.0集成xadmin0.6报错集锦 http://www.lybbn.cn/data/bbsdatas.php?lybbs=50 1.django2.0把from django.core ...
- Python开发程序:学员管理系统(mysql)
主题:学员管理系统 需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图: 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节 ...
- Scrapy1.4爬取笑话网站数据,Python3.5+Django2.0构建笑话应用
Part1:需求简要描述 1.抓取http://www.jokeji.cn网站的笑话 2.以瀑布流方式显示 Part2:安装爬虫框架Scrapy1.4 1. 安装Scrapy1.4 E:\django ...
随机推荐
- 使用Python查询JMX
一.介绍 我们知道 java 项目中的 JMX 接口信息是十分有用的,我们可以提取这些信息来分析或告警.但是 JMX 的 API 只在 java 中实现,因此,找到一个 Python 代码调用 Jav ...
- npm install安装时忘记--save解决方法
title: npm install安装时忘记--save解决方法 date: 2017-05-07 20:17:54 tags: npm categories: --- 网上还有一个解决方案就是: ...
- python selenium 鼠标悬停
#鼠标悬停 chain = ActionChains(driver) implement = driver.find_element_by_link_text() chain.move_to_elem ...
- mongodb查询操作分析
背景 mongodb 提供了类sql的数据查询及操作方式,同时也包含了聚合操作.索引等多个机制: 按以往的经验,不当的库表操作或索引模式往往会造成许多问题,如查询操作缓慢.数据库吞吐量低下.CPU或磁 ...
- 蓝桥杯练习系统— 算法训练 Beaver's Calculator
问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器,他将此命名为"Beaver's Calculator 1.0".它非常特别,并且被计划使用在各种各样 ...
- vc++调用web服务传输文件
bool webService::UploadFile(LPWSTR appKey, LPWSTR fileName, const int len, unsigned char * buff) { t ...
- Model和ModelAndView
在请求处理方法可出现和返回的参数类型中,最重要的就是Model和ModelAndView.对于MVC框架,控制器Controller执行业务逻辑,用于产生模型数据Model,而试图View则用于渲染模 ...
- 使用hexo搭建个人博客
安装前提 node.js git 如果缺少以上条件,则前往相应的官网下载安装即可.. 安装hexo $ npm install hexo-cli -g 待安装完成后,执行相关命令查看hexo的信息. ...
- Eclipse EE遇到问题记录
Eclipse EE可以进行Java web的开发,下面记录了使用Eclipse EE调试时遇到的一些问题. 1.tomcat启动timeout的设置,双击server,主窗口就变为了server的配 ...
- 洛谷 [P2701] 巨大的牛棚
首先,本题是一道最大子矩阵问题,且m,n较小,可以使用DP做, 与 洛谷 [P1387]最大正方形 做法相同. #include <iostream> #include <cstdi ...