快捷键使用:
Ctrl +D //复制选定的区域或行
Ctrl +Y //删除选定的行
创建项目方式:
-命令行创建:
django-admin startproject myweb
-启动django:
-命令行运行项目:
python3 manage.py runserver 127.0.0.1 8005
django初始化配置:
-myweb-settings配置:
STATICFILES_DIRS=(
os.path.join(BASE_DIR,'static'),
)
MIDDLEWARE = [
# 'django.middleware.csrf.CsrfViewMiddleware', //需要注释
]
创建存储静态文件目录:
-static-css
-static-images
-static-js
js文件夹导入jquery.js
-myweb-urls.py
from django.shortcuts import render def test(request): name='Frank' li=['frank','sunny','franksunny'] dic={'name':'frank','age':18} info=[ {'id':1,'name':'frank','age':17}, {'id':2,'name':'sunny','age': 18}, {'id':3,'name':'franksunny','age': 19} ] return render(request,'test.html',{'name':name,'li':li,'dic':dic,'info':info}) urlpatterns = [ # url(r'^admin/', admin.site.urls), url('test/',test), ]
-templates-test.html
<head> <meta charset="UTF-8"> <title>Title</title> <script src="/static/js/jquery.js"></script> </head> <body> <h4>名字显示</h4> {{ name }} <h4>列表显示</h4> <ul> <li>{{ li.0 }}</li> <li>{{ li.1 }}</li> <li>{{ li.2 }}</li> </ul> <h4>字典显示</h4> <ul> <li>{{dic.name}}</li> <li>{{dic.age}}</li> </ul> <h4>列表字典嵌套显示</h4> <table border="1px" style="color: blue"> <tr> <th>id</th> <th>姓名</th> <th>年龄</th> </tr> {% for item in info %} <tr> <td>{{ item.id }}</td> <td>{{ item.name }}</td> <td>{{ item.age }}</td> </tr> {% endfor %} </table> </body>
要求:学校后台管理系统
classes
id classname
1 周末一期
2 脱产一期
students
id stuname classid
1 frank 1
2 sunny 2
teacher
id teachername
1 eagon
2 szk
teacher2classes
id tid cid
1 1 1
2 1 2
3 2 1
班级管理:
单表操作:
单表增删改查
一对多操作:
增删改查
多对多操作
增删改查
classes、students、teacher、teacher2classes建表语句:
create table classes (
id int not null primary key auto_increment,
classname varchar(32) not null default ''
)engine=Innodb charset=utf8;
create table students (
id int not null primary key auto_increment,
name varchar(32) not null default '',
classId int not null default 0,
constraint `fk_1` foreign key (classId) references classes(id)
)engine=Innodb charset=utf8;
create table teacher (
id int not null primary key auto_increment,
name varchar(32) not null default ''
)engine=Innodb charset=utf8;
create table teacher2class(
id int not null primary key auto_increment,
tid int not null default 0,
cid int not null default 0,
constraint `fk_2` foreign key (tid) references teacher(id),
constraint `fk_3` foreign key (cid) references classes(id)
)engine=Innodb charset=utf8;
一.代码第一层
利用pymysql和页面跳转做的CRUD
1.显示班级
2.添加班级
3.删除班级
4.更新班级
[1].-myweb-urls.py
from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import render
from app01 import views
urlpatterns = [
url(r'^test/',views.test),
url(r'^classes/',
views.classes),
url(r'^add_class/', views.add_class),
url(r'^del_class/', views.del_class),
url(r'^edit_class/', views.edit_class),
]
[2].-app01-views.py
from django.shortcuts import render,redirect
import pymysql
def test(request):
name='Frank'
li=['frank','sunny','franksunny']
dic={'name':'frank','age':18}
info=[
{'id':1,'name':'frank','age':17},
{'id':2,'name':'sunny','age': 18},
{'id':3,'name':'franksunny','age': 19}
]
return render(request,'test.html',{'name':name,'li':li,'dic':dic,'info':info})
def add_class(request):
if request.method=='GET':
return render(request, 'add_class.html')
else:
classname=request.POST.get('classname')
print(classname)
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
print(cursor)
cursor.execute('insert into classes (classname) values (%s)', (classname))
conn.commit()
return redirect('/classes/')
def del_class(request):
cid=request.GET.get('cid')
print(cid)
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
print(cursor)
cursor.execute('delete from classes where id=%s', (cid))
conn.commit()
return redirect('/classes/')
def edit_class(request):
if request.method=='GET':
cid=request.GET.get('cid')
print(cid)
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select * from
classes where id=%s',
(cid))
res=cursor.fetchone()
return render(request,'edit_class.html',{'classinfo':res})
else:
classname=request.POST.get('classname')
cid=request.POST.get('cid')
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('update classes set classname=%s where id=%s', (classname,cid))
conn.commit()
return redirect('/classes/')
def classes(request):
conn=pymysql.connect(host='192.168.10.5',user='root',passwd='123456',db='day18',charset='utf8')
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select * from
classes',())
res=cursor.fetchall()
print(res)
return render(request,'classes.html',{'class_list':res})
[3].-templates-classes.html
<body>
<h4>我是班级列表</h4>
<a href="/add_class/">添加班级</a>
<table border="1px" style="color: red">
<tr>
<th>班级ID</th>
<th>班级课程</th>
<th>操作</th>
</tr>
{% for item in class_list %}
<tr>
<td>{{ item.id}}</td>
<td>{{ item.classname}}</td>
<td><a href="/del_class/?cid={{ item.id }}" onclick="return doConfirm()">删除</a></td>
<td><a href="/edit_class/?cid={{ item.id }}">更新</a></td>
</tr>
{% endfor %}
</table>
<script>
function doConfirm() {
res=window.confirm('请确认是否删除')
if (res){
return true
}else {
return false
}
}
</script>
</body>
[4].-templates-add_class.html
<body>
<h4>添加班级</h4>
<form action="/add_class/" method="post">
<input type="text" name="classname" placeholder="请输入班级名称">
<input type="submit" value="提交">
</form>
</body>
[5].-templates-edit_class.html
<body>
<h4>更新班级</h4>
<form action="/edit_class/" method="post">
<input type="hidden" name="cid" value="{{ classinfo.id }}">
<input type="text" name="classname" value="{{ classinfo.classname }}">
<input type="submit" value="提交">
</form>
</body>
二.代码第二层
利用pymysql和模态框做的CRUD
[1].-myweb-urls.py
from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import render
from app01 import views
urlpatterns = [
url(r'^test/',views.test),
url(r'^classes/',
views.classes),
url(r'^add_class/', views.add_class),
url(r'^del_class/', views.del_class),
url(r'^edit_class/', views.edit_class),
url(r'^ajax_add_classes/',
views.ajax_add_classes),
]
[2].-app01-views.py
from django.shortcuts import render,redirect,HttpResponse
import pymysql
def test(request):
name='Frank'
li=['frank','sunny','franksunny']
dic={'name':'frank','age':18}
info=[
{'id':1,'name':'frank','age':17},
{'id':2,'name':'sunny','age': 18},
{'id':3,'name':'franksunny','age': 19}
]
return render(request,'test.html',{'name':name,'li':li,'dic':dic,'info':info})
def add_class(request):
if request.method=='GET':
return render(request, 'add_class.html')
else:
classname=request.POST.get('classname')
print(classname)
if len(classname) >0:
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
print(cursor)
cursor.execute('insert into classes (classname) values (%s)', (classname))
conn.commit()
return redirect('/classes/')
def ajax_add_classes(request):
classname = request.POST.get('classname')
print(classname)
if len(classname) > 0:
conn = pymysql.connect(host='192.168.10.5',
user='root', passwd='123456', db='day18', charset='utf8')
cursor =
conn.cursor(cursor=pymysql.cursors.DictCursor)
print(cursor)
cursor.execute('insert into
classes (classname) values (%s)', (classname))
conn.commit()
return HttpResponse('ok')
else:
return HttpResponse('班级名为空')
def del_class(request):
cid=request.GET.get('cid')
print(cid)
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
print(cursor)
cursor.execute('delete from classes where id=%s', (cid))
conn.commit()
return redirect('/classes/')
def edit_class(request):
if request.method=='GET':
cid=request.GET.get('cid')
print(cid)
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select * from
classes where id=%s',
(cid))
res=cursor.fetchone()
return render(request,'edit_class.html',{'classinfo':res})
else:
classname=request.POST.get('classname')
cid=request.POST.get('cid')
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('update classes set classname=%s where id=%s', (classname,cid))
conn.commit()
return redirect('/classes/')
def classes(request):
conn=pymysql.connect(host='192.168.10.5',user='root',passwd='123456',db='day18',charset='utf8')
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select * from
classes',())
res=cursor.fetchall()
print(res)
return render(request,'classes.html',{'class_list':res})
[3].-templates-classes.html
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/static/js/jquery.js"></script>
<style>
.shadow{
position: absolute;
bottom: 0;
top: 0;
left: 0;
right: 0;
background-color: black;
opacity: 0.4;
z-index: 9;
}
.addModal{
position: absolute;
top:25%;
left:35%;
background-color: white;
width:500px;
height:300px;
z-index: 10;
}
.hide{
display: none;
}
</style>
</head>
<body>
<h4>我是班级列表</h4>
<a href="/add_class/">添加班级</a>
<a
id="ajax_add_btn">模态框添加班级</a>
<table border="1px" style="color: red">
<tr>
<th>班级ID</th>
<th>班级课程</th>
<th>操作</th>
</tr>
{% for item in class_list %}
<tr>
<td>{{ item.id}}</td>
<td>{{ item.classname}}</td>
<td><a href="/del_class/?cid={{ item.id }}" onclick="return doConfirm()">删除</a></td>
<td><a href="/edit_class/?cid={{ item.id }}">更新</a></td>
</tr>
{% endfor %}
</table>
<div
class="shadow hide " id="shadow"></div>
<div class="addModal hide"
id="modal">
<form >
<p><input
type="text" name="classname" id="classname"
placeholder="请输入班级"></p>
<p><input
type="button" value="提交"
id="ajax_add_send"><span id="hint"
style="color: red"></span>
<input
type="button" value="取消"
id="cancelBtn"> </p>
</form>
</div>
</body>
<script>
function doConfirm() {
res=window.confirm('请确认是否删除')
if (res){
return true
}else {
return false
}
}
$('#ajax_add_btn').click(function () {
$('.shadow,.addModal').show()
})
$('#cancelBtn').click(function () {
$('.shadow,.addModal').hide()
})
$('#ajax_add_send').click(function () {
$.ajax({
url:'/ajax_add_classes/',
type:"POST",
data:{"classname":$('#classname').val()},
success:function (args)
{
console.log(args)
if(args=='ok'){
window.location.href='/classes/'
}else {
$('#hint').text(args)
}
}
})
})
</script>
三.代码第三层
使用ajax做更新操作,异常处理方法
[1].-myweb-urls.py
from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import render
from app01 import views
urlpatterns = [
url(r'^classes/',
views.classes),
url(r'^del_class/', views.del_class),
url(r'^ajax_add_classes/', views.ajax_add_classes),
url(r'^ajax_edit_class/', views.ajax_edit_class),
]
[2].-app01-views.py
import json
from django.shortcuts import render,redirect,HttpResponse
import pymysql
def ajax_add_classes(request):
classname = request.POST.get('classname')
print(classname)
if len(classname) > 0:
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
print(cursor)
cursor.execute('insert into classes (classname) values (%s)', (classname))
conn.commit()
return HttpResponse('ok')
else:
return HttpResponse('班级名为空')
def del_class(request):
cid=request.GET.get('cid')
print(cid)
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
print(cursor)
cursor.execute('delete from classes where id=%s', (cid))
conn.commit()
return redirect('/classes/')
def ajax_edit_class(request):
classname = request.POST.get('classname')
cid=request.POST.get('cid')
print(classname)
try:
if len(classname) > 0:
conn = pymysql.connect(host='192.168.10.5',
user='root', passwd='123456', db='day18', charset='utf8')
cursor =
conn.cursor(cursor=pymysql.cursors.DictCursor)
print(cursor)
cursor.execute('update
classes set classname=%s where id=%s', (classname,cid))
conn.commit()
dict={'code':10000,'msg':'添加成功'}
return HttpResponse(json.dumps(dict))
except Exception as e:
dict = {'code':10001, 'msg':'添加失败'}
return HttpResponse(json.dumps(dict))
def classes(request):
conn=pymysql.connect(host='192.168.10.5',user='root',passwd='123456',db='day18',charset='utf8')
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select * from
classes',())
res=cursor.fetchall()
print(res)
return render(request,'classes.html',{'class_list':res})
[3].-templates-classes.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/static/js/jquery.js"></script>
<style>
.shadow{
position: absolute;
bottom: 0;
top: 0;
left: 0;
right: 0;
background-color: black;
opacity: 0.4;
z-index: 9;
}
.addModal,.edit_Modal{
position: absolute;
top:25%;
left:35%;
background-color: white;
width:500px;
height:300px;
z-index: 10;
}
.hide{
display: none;
}
</style>
</head>
<body>
<a id="ajax_add_btn">模态框添加班级</a>
<table border="1px" style="color: red">
<tr>
<th>班级ID</th>
<th>班级课程</th>
<th>操作</th>
</tr>
{% for item in class_list %}
<tr>
<td>{{ item.id}}</td>
<td>{{ item.classname}}</td>
<td>
<a href="/del_class/?cid={{ item.id }}" onclick="return doConfirm()">删除</a>
<a class="ajax_edit_btn">ajax更新</a>
</td>
</tr>
{% endfor %}
</table>
<div class="shadow hide " id="shadow"></div>
<div class="addModal hide" id="modal">
<form >
<p><input type="text" name="classname" id="classname" placeholder="请输入班级"></p>
<p><input type="button" value="提交" id="ajax_add_send"><span id="hint" style="color: red"></span>
<input type="button" value="取消" class="cancelBtn"> </p>
</form>
</div>
<div
class="edit_Modal hide" >
<form>
<input
type="hidden" id="ajax_hide_id">
<p><input
type="text" name="classname" id="editClassName"
placeholder="请输入班级"></p>
<p><input
type="button" value="提交"
id="ajax_edit_send"><span
id="edithint" style="color: red"></span>
<input
type="button" value="取消"
class="cancelBtn"> </p>
</form>
</div>
</body>
<script>
function doConfirm() {
res=window.confirm('请确认是否删除')
if (res){
return true
}else {
return false
}
}
$('#ajax_add_btn').click(function () {
$('.shadow,.addModal').show()
})
$('.cancelBtn').click(function () {
$('.shadow,.addModal,.edit_Modal').hide()
})
$('#ajax_add_send').click(function () {
$.ajax({
url:'/ajax_add_classes/',
type:"POST",
data:{"classname":$('#classname').val()},
success:function (args) {
console.log(args)
if(args=='ok'){
window.location.href='/classes/'
}else {
$('#hint').text(args)
}
}
})
})
$('.ajax_edit_btn').click(function () {
$('.edit_Modal,.shadow').show();
var v=$(this).parent().prevAll()
$('#editClassName').val($(v[0]).text())
$('#ajax_hide_id').val($(v[1]).text())
})
$('#ajax_edit_send').click(function () {
var classname=$('#editClassName').val()
var cid=$('#ajax_hide_id').val()
console.log(classname+cid)
$.ajax({
url:'/ajax_edit_class/',
type:"POST",
data:{"classname":classname,"cid":cid},
success:function (args)
{
console.log(args)
res=JSON.parse(args)
console.log(res)
if (res['code']==10000){
location.reload();
}else {
$('#edithint').text(res['msg'])
}
}
})
})
</script>
</html>
四.代码第四层
优化数据调用接口,展示students表查询和展示数据
[1].-myweb-urls.py
from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import render
from app01 import views
urlpatterns = [
url(r'^classes/',
views.classes),
url(r'^del_class/', views.del_class),
url(r'^ajax_add_classes/', views.ajax_add_classes),
url(r'^ajax_edit_class/', views.ajax_edit_class),
url(r'^students/', views.students),
]
[2].-app01-models.py
import pymysql
class myModel(object):
def __init__(self):
self.conn
= pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
self.cursor
= self.conn.cursor(cursor=pymysql.cursors.DictCursor)
def getlist(self,sql):
self.cursor.execute(sql)
res = self.cursor.fetchall()
return res
[3].-app01-views.py
import json
from django.shortcuts import render,redirect,HttpResponse
import pymysql
from app01.models import myModel
def ajax_add_classes(request):
classname = request.POST.get('classname')
print(classname)
if len(classname) > 0:
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('insert into classes (classname) values (%s)', (classname))
conn.commit()
return HttpResponse('ok')
else:
return HttpResponse('班级名为空')
def del_class(request):
cid=request.GET.get('cid')
print(cid)
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('delete from classes where id=%s', (cid))
conn.commit()
return redirect('/classes/')
def ajax_edit_class(request):
classname = request.POST.get('classname')
cid=request.POST.get('cid')
print(classname)
try:
if len(classname) > 0:
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
print(cursor)
cursor.execute('update classes set classname=%s where id=%s', (classname,cid))
conn.commit()
dict={'code':10000,'msg':'添加成功'}
return HttpResponse(json.dumps(dict))
except Exception as e:
dict = {'code':10001, 'msg':'添加失败'}
return HttpResponse(json.dumps(dict))
def classes(request):
conn=pymysql.connect(host='192.168.10.5',user='root',passwd='123456',db='day18',charset='utf8')
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select * from
classes',())
res=cursor.fetchall()
print(res)
return render(request,'classes.html',{'class_list':res})
def students(request):
model=myModel()
res=model.getlist('select
students.id,students.`name`,classId,classes.classname from students LEFT JOIN
classes on students.classId=classes.id;')
print(res)
return render(request,'students.html',{'student_list':res})
[4]. -templates-students.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/static/js/jquery.js"></script>
<style>
.shadow{
position: absolute;
bottom: 0;
top: 0;
left: 0;
right: 0;
background-color: black;
opacity: 0.4;
z-index: 9;
}
.addModal,.edit_Modal{
position: absolute;
top:25%;
left:35%;
background-color: white;
width:500px;
height:300px;
z-index: 10;
}
.hide{
display: none;
}
</style>
</head>
<body>
<h2>学生列表</h2>
<table border="1px"
style="color: red">
<tr>
<th>学生ID</th>
<th>学生名称</th>
<th>班级名称</th>
<th>操作</th>
</tr>
{% for item in student_list %}
<tr>
<td>{{ item.id}}</td>
<td>{{ item.name}}</td>
<td>{{ item.classname}}</td>
<td>
<a href="" onclick="return doConfirm()">删除</a>
<a class="ajax_edit_btn">ajax更新</a>
</td>
</tr>
{% endfor %}
</table>
<div class="shadow hide " id="shadow"></div>
<div class="addModal hide" id="modal">
<form >
<p><input type="text" name="classname" id="classname" placeholder="请输入班级"></p>
<p><input type="button" value="提交" id="ajax_add_send"><span id="hint" style="color: red"></span>
<input type="button" value="取消" class="cancelBtn"> </p>
</form>
</div>
<div class="edit_Modal hide" >
<form>
<input type="hidden" id="ajax_hide_id">
<p><input type="text" name="classname" id="editClassName" placeholder="请输入班级"></p>
<p><input type="button" value="提交" id="ajax_edit_send"><span id="edithint" style="color: red"></span>
<input type="button" value="取消" class="cancelBtn"> </p>
</form>
</div>
</body>
<script>
function doConfirm() {
res=window.confirm('请确认是否删除')
if (res){
return true
}else {
return false
}
}
$('#ajax_add_btn').click(function () {
$('.shadow,.addModal').show()
})
$('.cancelBtn').click(function () {
$('.shadow,.addModal,.edit_Modal').hide()
})
$('#ajax_add_send').click(function () {
$.ajax({
url:'/ajax_add_classes/',
type:"POST",
data:{"classname":$('#classname').val()},
success:function (args) {
console.log(args)
if(args=='ok'){
window.location.href='/classes/'
}else {
$('#hint').text(args)
}
}
})
})
$('.ajax_edit_btn').click(function () {
$('.edit_Modal,.shadow').show();
var v=$(this).parent().prevAll()
$('#editClassName').val($(v[0]).text())
$('#ajax_hide_id').val($(v[1]).text())
})
$('#ajax_edit_send').click(function () {
var classname=$('#editClassName').val()
var cid=$('#ajax_hide_id').val()
console.log(classname+cid)
$.ajax({
url:'/ajax_edit_class/',
type:"POST",
data:{"classname":classname,"cid":cid},
success:function (args) {
console.log(args)
res=JSON.parse(args)
console.log(res)
if (res['code']==10000){
location.reload();
}else {
$('#edithint').text(res['msg'])
}
}
})
})
</script>
</html>
五.代码第五层
添加学生,优化sql的GET和POST封装
[1].-myweb-urls.py
from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import render
from app01 import views
urlpatterns = [
url(r'^classes/',
views.classes),
url(r'^del_class/', views.del_class),
url(r'^ajax_add_classes/', views.ajax_add_classes),
url(r'^ajax_edit_class/', views.ajax_edit_class),
url(r'^students/', views.students),
url(r'^add_students/',
views.add_students),
]
[2].-app01-models.py
import pymysql
class myModel(object):
def __init__(self):
self.conn
= pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
self.cursor
= self.conn.cursor(cursor=pymysql.cursors.DictCursor)
def getlist(self,sql):
self.cursor.execute(sql)
res = self.cursor.fetchall()
return res
def modify(self,sql,args):
self.cursor.execute(sql,args)
self.conn.commit()
def close(self):
self.cursor.close()
self.conn.close()
[3].-app01-views.py
import json
from django.shortcuts import render,redirect,HttpResponse
import pymysql
from app01.models import myModel
def ajax_add_classes(request):
classname = request.POST.get('classname')
print(classname)
if len(classname) > 0:
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('insert into classes (classname) values (%s)', (classname))
conn.commit()
return HttpResponse('ok')
else:
return HttpResponse('班级名为空')
def del_class(request):
cid=request.GET.get('cid')
print(cid)
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('delete from classes where id=%s', (cid))
conn.commit()
return redirect('/classes/')
def ajax_edit_class(request):
classname = request.POST.get('classname')
cid=request.POST.get('cid')
print(classname)
try:
if len(classname) > 0:
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
print(cursor)
cursor.execute('update classes set classname=%s where id=%s', (classname,cid))
conn.commit()
dict={'code':10000,'msg':'添加成功'}
return HttpResponse(json.dumps(dict))
except Exception as e:
dict = {'code':10001, 'msg':'添加失败'}
return HttpResponse(json.dumps(dict))
def classes(request):
conn=pymysql.connect(host='192.168.10.5',user='root',passwd='123456',db='day18',charset='utf8')
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select * from
classes',())
res=cursor.fetchall()
print(res)
return render(request,'classes.html',{'class_list':res})
model=myModel()
def students(request):
res=model.getlist('select
students.id,students.`name`,classId,classes.classname from students LEFT JOIN
classes on students.classId=classes.id;')
print(res)
return render(request,'students.html',{'student_list':res})
def add_students(request):
if request.method=='GET':
res=model.getlist('select * from classes')
print(res)
return render(request,'add_students.html',{'class_list':res})
else:
student_name=request.POST.get('stuname')
classid=request.POST.get('classid')
print(student_name)
print(classid)
model.modify('insert into
students (name,classId) values (%s,%s)',(student_name,classid))
return redirect('/students/')
[4]. -templates-students.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/static/js/jquery.js"></script>
<style>
.shadow{
position: absolute;
bottom: 0;
top: 0;
left: 0;
right: 0;
background-color: black;
opacity: 0.4;
z-index: 9;
}
.addModal,.edit_Modal{
position: absolute;
top:25%;
left:35%;
background-color: white;
width:500px;
height:300px;
z-index: 10;
}
.hide{
display: none;
}
</style>
</head>
<body>
<h2>学生列表</h2>
<a
href="/add_students/">添加学生</a>
<table border="1px" style="color: red">
<tr>
<th>学生ID</th>
<th>学生名称</th>
<th>班级名称</th>
<th>操作</th>
</tr>
{% for item in student_list %}
<tr>
<td>{{ item.id}}</td>
<td>{{ item.name}}</td>
<td>{{ item.classname}}</td>
<td>
<a href="" onclick="return doConfirm()">删除</a>
<a class="ajax_edit_btn">ajax更新</a>
</td>
</tr>
{% endfor %}
</table>
<div class="shadow hide " id="shadow"></div>
<div class="addModal hide" id="modal">
<form >
<p><input type="text" name="classname" id="classname" placeholder="请输入班级"></p>
<p><input type="button" value="提交" id="ajax_add_send"><span id="hint" style="color: red"></span>
<input type="button" value="取消" class="cancelBtn"> </p>
</form>
</div>
<div class="edit_Modal hide" >
<form>
<input type="hidden" id="ajax_hide_id">
<p><input type="text" name="classname" id="editClassName" placeholder="请输入班级"></p>
<p><input type="button" value="提交" id="ajax_edit_send"><span id="edithint" style="color: red"></span>
<input type="button" value="取消" class="cancelBtn"> </p>
</form>
</div>
</body>
<script>
function doConfirm() {
res=window.confirm('请确认是否删除')
if (res){
return true
}else {
return false
}
}
$('#ajax_add_btn').click(function () {
$('.shadow,.addModal').show()
})
$('.cancelBtn').click(function () {
$('.shadow,.addModal,.edit_Modal').hide()
})
$('#ajax_add_send').click(function () {
$.ajax({
url:'/ajax_add_classes/',
type:"POST",
data:{"classname":$('#classname').val()},
success:function (args) {
console.log(args)
if(args=='ok'){
window.location.href='/classes/'
}else {
$('#hint').text(args)
}
}
})
})
$('.ajax_edit_btn').click(function () {
$('.edit_Modal,.shadow').show();
var v=$(this).parent().prevAll()
$('#editClassName').val($(v[0]).text())
$('#ajax_hide_id').val($(v[1]).text())
})
$('#ajax_edit_send').click(function () {
var classname=$('#editClassName').val()
var cid=$('#ajax_hide_id').val()
console.log(classname+cid)
$.ajax({
url:'/ajax_edit_class/',
type:"POST",
data:{"classname":classname,"cid":cid},
success:function (args) {
console.log(args)
res=JSON.parse(args)
console.log(res)
if (res['code']==10000){
location.reload();
}else {
$('#edithint').text(res['msg'])
}
}
})
})
</script>
</html>
[5]. -templates-add_students.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h4>添加学生</h4>
<form action="/add_students/" method="post">
<input type="text" name="stuname" placeholder="请输入学生名称">
<select name="classid" id="classid">
{% for item in class_list%}
<option value="{{ item.id }}">{{ item.classname }}</option>
{% endfor %}
</select>
<input type="submit" value="提交">
</form>
</body>
</html>
五.代码第六层
修改学生和删除学生记录,优化sql的GET和POST封装
[1].-myweb-urls.py
from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import render
from app01 import views
urlpatterns = [
url(r'^classes/',
views.classes),
url(r'^del_class/', views.del_class),
url(r'^ajax_add_classes/', views.ajax_add_classes),
url(r'^ajax_edit_class/', views.ajax_edit_class),
url(r'^students/', views.students),
url(r'^add_students/', views.add_students),
url(r'^edit_student/', views.edit_student),
url(r'^del_student/',
views.del_student),
]
[2].-app01-models.py
import pymysql
class myModel(object):
def __init__(self):
self.conn
= pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
self.cursor
= self.conn.cursor(cursor=pymysql.cursors.DictCursor)
def getlist(self,sql):
self.cursor.execute(sql)
res = self.cursor.fetchall()
return res
def modify(self,sql,args):
self.cursor.execute(sql,args)
self.conn.commit()
def getOne(self,sql,args):
self.cursor.execute(sql,args)
res=self.cursor.fetchone()
return res
def delOne(self,sql,args):
self.cursor.execute(sql,args)
self.conn.commit()
def close(self):
self.cursor.close()
self.conn.close()
[3].-app01-views.py
import json
from django.shortcuts import render,redirect,HttpResponse
import pymysql
from app01.models import myModel
def ajax_add_classes(request):
classname = request.POST.get('classname')
print(classname)
if len(classname) > 0:
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('insert into classes (classname) values (%s)', (classname))
conn.commit()
return HttpResponse('ok')
else:
return HttpResponse('班级名为空')
def del_class(request):
cid=request.GET.get('cid')
print(cid)
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('delete from classes where id=%s', (cid))
conn.commit()
return redirect('/classes/')
def ajax_edit_class(request):
classname = request.POST.get('classname')
cid=request.POST.get('cid')
print(classname)
try:
if len(classname) > 0:
conn = pymysql.connect(host='192.168.10.5', user='root', passwd='123456', db='day18', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
print(cursor)
cursor.execute('update classes set classname=%s where id=%s', (classname,cid))
conn.commit()
dict={'code':10000,'msg':'添加成功'}
return HttpResponse(json.dumps(dict))
except Exception as e:
dict = {'code':10001, 'msg':'添加失败'}
return HttpResponse(json.dumps(dict))
def classes(request):
conn=pymysql.connect(host='192.168.10.5',user='root',passwd='123456',db='day18',charset='utf8')
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select * from
classes',())
res=cursor.fetchall()
print(res)
return render(request,'classes.html',{'class_list':res})
def students(request):
model = myModel()
res=model.getlist('select
students.id,students.`name`,classId,classes.classname from students LEFT JOIN
classes on students.classId=classes.id;')
print(res)
return render(request,'students.html',{'student_list':res})
def add_students(request):
model = myModel()
if request.method=='GET':
res=model.getlist('select * from
classes')
print(res)
return render(request,'add_students.html',{'class_list':res})
else:
student_name=request.POST.get('stuname')
classid=request.POST.get('classid')
print(student_name)
print(classid)
model.modify('insert into students (name,classId) values
(%s,%s)',(student_name,classid))
return redirect('/students/')
def edit_student(request):
model = myModel()
if request.method=='GET':
sid=request.GET.get('sid')
stuInfo=model.getOne('select * from students where id =%s',(sid))
res=model.getlist('select * from classes')
print(stuInfo)
return render(request,'edit_student.html',{'stuInfo':stuInfo,'class_list':res})
else:
sid=request.POST.get('sid')
stuname=request.POST.get('stuname')
classid=request.POST.get('classid')
model.modify('update students
set name=%s,classId=%s where id=%s',(stuname,classid,sid))
model.close()
return redirect('/students/')
def del_student(request):
model = myModel()
sid=request.GET.get('sid')
model.delOne('delete from students
where id=%s', (sid))
return redirect('/students/')
[4]. -templates-students.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/static/js/jquery.js"></script>
<style>
.shadow{
position: absolute;
bottom: 0;
top: 0;
left: 0;
right: 0;
background-color: black;
opacity: 0.4;
z-index: 9;
}
.addModal,.edit_Modal{
position: absolute;
top:25%;
left:35%;
background-color: white;
width:500px;
height:300px;
z-index: 10;
}
.hide{
display: none;
}
</style>
</head>
<body>
<h2>学生列表</h2>
<a href="/add_students/">添加学生</a>
<table border="1px" style="color: red">
<tr>
<th>学生ID</th>
<th>学生名称</th>
<th>班级名称</th>
<th>操作</th>
</tr>
{% for item in student_list %}
<tr>
<td>{{ item.id}}</td>
<td>{{ item.name}}</td>
<td>{{ item.classname}}</td>
<td>
<a href="/del_student/?sid={{ item.id }}" onclick="return doConfirm()">删除</a>
<a href="/edit_student/?sid={{ item.id }}">更新</a>
</td>
</tr>
{% endfor %}
</table>
<div class="shadow hide " id="shadow"></div>
<div class="addModal hide" id="modal">
<form >
<p><input type="text" name="classname" id="classname" placeholder="请输入班级"></p>
<p><input type="button" value="提交" id="ajax_add_send"><span id="hint" style="color: red"></span>
<input type="button" value="取消" class="cancelBtn"> </p>
</form>
</div>
<div class="edit_Modal hide" >
<form>
<input type="hidden" id="ajax_hide_id">
<p><input type="text" name="classname" id="editClassName" placeholder="请输入班级"></p>
<p><input type="button" value="提交" id="ajax_edit_send"><span id="edithint" style="color: red"></span>
<input type="button" value="取消" class="cancelBtn"> </p>
</form>
</div>
</body>
<script>
function doConfirm() {
res=window.confirm('请确认是否删除')
if (res){
return true
}else {
return false
}
}
$('#ajax_add_btn').click(function () {
$('.shadow,.addModal').show()
})
$('.cancelBtn').click(function () {
$('.shadow,.addModal,.edit_Modal').hide()
})
$('#ajax_add_send').click(function () {
$.ajax({
url:'/ajax_add_classes/',
type:"POST",
data:{"classname":$('#classname').val()},
success:function (args) {
console.log(args)
if(args=='ok'){
window.location.href='/classes/'
}else {
$('#hint').text(args)
}
}
})
})
$('.ajax_edit_btn').click(function () {
$('.edit_Modal,.shadow').show();
var v=$(this).parent().prevAll()
$('#editClassName').val($(v[0]).text())
$('#ajax_hide_id').val($(v[1]).text())
})
$('#ajax_edit_send').click(function () {
var classname=$('#editClassName').val()
var cid=$('#ajax_hide_id').val()
console.log(classname+cid)
$.ajax({
url:'/ajax_edit_class/',
type:"POST",
data:{"classname":classname,"cid":cid},
success:function (args) {
console.log(args)
res=JSON.parse(args)
console.log(res)
if (res['code']==10000){
location.reload();
}else {
$('#edithint').text(res['msg'])
}
}
})
})
</script>
</html>
[5]. -templates-edit_student.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h4>更新班级</h4>
<form action="/edit_student/" method="post">
<input type="hidden" name="sid" value="{{ stuInfo.id }}">
<input type="text" name="stuname" value="{{ stuInfo.name }}">
<select name="classid" id="classid">
{% for item in class_list%}
{% if item.id == stuInfo.classId %}
<option value="{{ item.id }}" selected>{{ item.classname }}</option>
{% else %}
<option value="{{ item.id }}">{{ item.classname }}</option>
{% endif %}
{% endfor %}
</select>
<input type="submit" value="提交">
</form>
</body>
</html>
[1].-myweb-urls.py
[2].-app01-models.py
[3].-app01-views.py
[4]. -templates-students.html
[5]. -templates-add_students.html