Django 练习班级管理系统四 -- 编辑班级
修改 classes.html
{% extends "layout.html" %}
{% block css %}
{% endblock %}
{% block content %}
<h1>班级管理</h1>
<div>
<input id="id_add" type="button" value="添加">
<a href="/add_classes.html">添加</a>
</div>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>标题</th>
</tr>
</thead>
<tbody>
{% for item in cls_list %}
<tr>
<td klvchen="id">{{ item.id }}</td>
<td klvchen="caption">{{ item.caption }}</td>
<td>
<a class="td-edit">编辑</a>| <a href="edit_classes.html?nid={{ item.id }}">跳转编辑</a>|<a class="td-delete">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="pagination">
{{ str_pager|safe }}
</div>
<div class="modal hide">
<form method="post" action="/classes.html">
<input name="id" type="text" class="hide">
<input name="caption" type="text" placeholder="标题">
<input id="id_modal_cancel" type="button" value="取消">
<input type="submit" value="确定">
<input type="button" id="modal_ajax_submit" value="Ajax确定">
</form>
</div>
<div class="shade hide"></div>
<div class="remove hide">
<input id="id_remove_cancel" type="button" value="取消">
<input type="button" value="确定">
</div>
{% endblock %}
{% block js %}
<script>
$(function () {
$('#menu_class').addClass('active');
bindAddEvent();
bindCancelEvent();
bindTdDeleteEvent();
bindSubmitModal();
bindTdEditEvent();
})
SUBMIT_URL = null;
function bindAddEvent() {
$('#id_add').click(function () {
$('.modal, .shade').removeClass('hide');
SUBMIT_URL = "/classes.html";
})
}
function bindCancelEvent() {
$('#id_modal_cancel').click(function () {
$('.modal, .shade').addClass('hide')
})
}
function bindTdEditEvent() {
// 使用 js 的事件绑定委托
$('tbody').on('click', '.td-edit', function () {
$('.modal, .shade').removeClass('hide')
SUBMIT_URL = "/up_classes.html";
var tds = $(this).parent().prevAll();
//console.log(tds)
//console.log(tds[0])
//$('.modal input[name="id"]').val()
/*
$('.modal input[name="caption"]').val(tds[0].innerText);
$('.modal input[name="id"]').val(tds[1].innerText);
*/
$(this).parent().prevAll().each(function () {
var text = $(this).text();
var name = $(this).attr('klvchen');
//console.log(text)
//console.log(name)
$('.modal input[name="'+ name +'"]').val(text)
})
})
}
function bindTdDeleteEvent() {
/* 新建的 td 没有绑定 click 事件
$('td .td-delete').click(function () {
$('.remove, .shade').removeClass('hide')
})
*/
// 使用 js 的事件绑定委托
$('tbody').on('click', '.td-delete', function () {
$('.remove, .shade').removeClass('hide')
})
}
function bindSubmitModal() {
$('#modal_ajax_submit').click(function () {
var nid = $('.modal input[name="id"]').val();
var value = $('.modal input[name="caption"]').val();
SUBMIT_URL = "/classes.html"
$.ajax({
url: SUBMIT_URL,
type: 'POST',
data: {caption: value, id: nid},
dataType: "JSON",
success: function (rep) {
if(!rep.status){
alert(rep.error)
}else{
// 通过刷新整个界面来显示新数据
location.reload();
}
}
})
})
}
</script>
{% endblock %}
修改 urls.py
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('login.html', views.Login.as_view()),
path('index.html', views.index),
path('classes.html', views.handle_classes),
path('add_classes.html', views.handle_add_classes),
path('edit_classes.html', views.handle_edit_classes),
path('student.html', views.handle_student),
path('teacher.html', views.handle_teacher),
]
修改 views.py
from django.shortcuts import render, redirect, HttpResponse
# Create your views here.
from app01 import models
from django import views
from django.utils.decorators import method_decorator
def outer(func):
def inner(request, *args, **kwargs):
print(request.method)
return func(request, *args, **kwargs)
return inner
class Login(views.View):
def dispatch(self, request, *args, **kwargs):
# print(11111111111)
ret = super(Login, self).dispatch(request, *args, **kwargs)
# print(22222222222)
return ret
def get(self, request, *args, **kwargs):
print('GET')
return render(request, 'login.html', {'msg': ''})
def post(self, request, *args, **kwargs):
print('POST')
user = request.POST.get('user')
pwd = request.POST.get('pwd')
c = models.Administrator.objects.filter(username=user, password=pwd).count()
if c:
request.session['is_login'] = True
request.session['username'] = user
rep = redirect('/index.html')
return rep
else:
message = "用户名或密码错误"
return render(request, 'login.html', {'msg': message})
def auth(func):
def inner(request, *args, **kwargs):
is_login = request.session.get('is_login')
if is_login:
return func(request, *args, **kwargs)
else:
return redirect('/login.html')
return inner
def index(request):
current_username = request.session.get('username')
if current_username:
return render(request, 'index.html', {'username': current_username})
else:
return redirect('/login.html')
@auth
def handle_classes(request):
if request.method == "GET":
current_user = request.session.get('username')
# 获取所有的班级列表
# for l in range(1, 102):
# models.Classes.objects.create(caption='全栈一班%i' %(l))
current_page = request.GET.get('p', 1)
current_page = int(current_page)
# 所有数据的个数
total_count = models.Classes.objects.all().count()
from utils.page import PagerHelper
obj = PagerHelper(total_count, current_page, '/classes.html', 10)
pager = obj.pager_str()
cls_list = models.Classes.objects.all()[obj.db_start:obj.db_end]
return render(request,
'classes.html',
{'username': current_user, 'cls_list': cls_list, 'str_pager': pager})
elif request.method == "POST":
# Form 表单提交的处理方式
"""
caption = request.POST.get('caption', None)
models.Classes.objects.create(caption=caption)
return redirect('/classes.html')
"""
# Ajax 提交的方式处理
import json
response_dict = {'status': True, 'error': None, 'data': None}
caption = request.POST.get('caption', None)
# 判断是更新或者是添加操作
nid = request.POST.get('id', None)
# 更新操作
if nid and caption:
obj = models.Classes.objects.filter(id=nid).update(caption=caption)
# print(nid)
# print(caption)
response_dict['data'] = {'id': nid, 'caption': caption}
# 添加操作
elif caption:
obj = models.Classes.objects.create(caption=caption)
# print(obj.id)
# print(obj.caption)
response_dict['data'] = {'id': obj.id, 'caption': obj.caption}
else:
response_dict['status'] = False
response_dict['error'] = "标题不能为空"
return HttpResponse(json.dumps(response_dict))
@auth
def handle_add_classes(request):
message = ""
if request.method == 'GET':
return render(request, 'add_classes.html', {'msg': message})
elif request.method == 'POST':
caption = request.POST.get('caption')
if caption:
models.Classes.objects.create(caption=caption)
else:
message = '标题不能为空'
return render(request, 'add_classes.html', {'msg': message})
return redirect('/classes.html')
else:
return redirect('/index.html')
# 通过url进行更新操作
@auth
def handle_edit_classes(request):
if request.method == "GET":
nid = request.GET.get('nid')
obj = models.Classes.objects.filter(id=nid).first()
return render(request, 'edit_classes.html', {'obj': obj})
elif request.method == "POST":
nid = request.POST.get('nid')
caption = request.POST.get('caption')
models.Classes.objects.filter(id=nid).update(caption=caption)
return redirect('/classes.html')
else:
return redirect('/index.html')
def handle_teacher(request):
is_login = request.session.get('is_login')
if is_login:
current_user = request.session.get('username')
return render(request, 'teacher.html', {'username':current_user})
else:
return redirect('/login.html')
def handle_student(request):
is_login = request.session.get('is_login')
if is_login:
current_user = request.session.get('username')
return render(request, 'student.html', {'username':current_user})
else:
return redirect('/login.html')
在 templates 文件夹下添加 edit_classes.html
{% extends "layout.html" %}
{% block css %}
{% endblock %}
{% block content %}
<h1>编辑班级</h1>
<form action="/edit_classes.html" method="post">
<input class="hide" type="text" name="nid" value="{{ obj.id }}">
<input type="text" name="caption" value="{{ obj.caption }}">
<input type="submit" value="提交">
</form>
{% endblock %}
{% block js %}
<script>
$(function () {
$('#menu_class').addClass('active');
})
</script>
{% endblock %}
通过 ajax 方式来更新操作

通过 url 的方式来更新操作

Django 练习班级管理系统四 -- 编辑班级的更多相关文章
- Django 练习班级管理系统六 -- 编辑老师列表
修改 views.py @auth def edit_teacher(request, nid): if request.method == "GET": obj = models ...
- Django 练习班级管理系统七 -- 编辑老师列表(二)
修改 views.py @auth def edit_teacher(request, nid): if request.method == "GET": obj = models ...
- Django 练习班级管理系统二 -- 添加班级数据
在上一篇中(Django 练习班级管理系统一 https://www.cnblogs.com/klvchen/p/11078174.html),使用的是莫泰对话框的方式提交数据,适用于数据量少的操作. ...
- 【学员管理系统】0x01 班级信息管理功能
[学员管理系统]0x01 班级信息管理功能 写在前面 项目详细需求参见:Django项目之[学员管理系统] 视图函数: 我们把所有的处理请求相关的函数从 urls.py中拿出来,统一放在一个叫view ...
- Django pymysql学员管理系统
学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司急需一套方便易用的“学员管理系统”,来提 ...
- 11 基于django的图书管理系统 多表
1.需求 作业需求:1.列出图书列表.出版社列表.作者列表2.点击作者,会列出其出版的图书列表3.点击出版社,会列出旗下图书列表4.可以创建.修改.删除 图书.作者.出版社 踩分点:1.满足需求1,2 ...
- Django的后台管理系统Admin(5)
Django的后台管理系统就是为了方便管理员管理网站,所以django自带了一个后台管理系统,接下来记录一下如何使用这个后台的管理系统. 首先我们要进入后台管理系统,就要有一个管理员的账号,先来创建有 ...
- Django的admin管理系统写入中文出错的解决方法/1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ‘locate’
Django的admin管理系统写入中文出错的解决方法 解决错误: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and ( ...
- Python高级进阶(二)Python框架之Django写图书管理系统(LMS)
正式写项目准备前的工作 Django是一个Web框架,我们使用它就是因为它能够把前后端解耦合而且能够与数据库建立ORM,这样,一个Python开发工程师只需要干自己开发的事情就可以了,而在使用之前就我 ...
随机推荐
- Mysql—数据类型详解
在MySQL中常用数据类型主要分为以下几类:数值类型.字符串类型.日期时间类型. 数值类型 字符串类型 日期时间类型 数据类型 字节数 取值范围 格式 备注 year 1 1901~2 ...
- PyCharm重命名文件时更改引用的地方
Shift + F6 在文件夹直接更改文件名称时,其它文件里有调用这个模块的话,名称是不会改变的,只会报错,显示找不到这个模块,这时,可以在pycharm里直接更改 右键你需要改名的文件,选择Refa ...
- day45_9_4前端(2)css
一.css的三种css导入: 1.在标签中内部定义(不推荐). 2.在head中的style总定义样式. 3.使用link链接外部的css文件. <!DOCTYPE html> <h ...
- Python学习笔记4 高级特性_20170618
# 切片(获取list / tuple / 字符串 中指定的元素) l = list(range(10)) l[0:3] l[:3] # 0可以省略 l[:] # 全部 l[3:] # 最后的可以省略 ...
- MongoDB Shell基本操作(五)
官网文档:https://docs.mongodb.com/ 1. 创建数据库 #如果数据库不存在,则创建数据库,否则切换到指定数据库 use DATABASE_NAME 示例: use runoob ...
- 剑指Offer-3.从尾到头打印链表(C++/Java)
题目: 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 分析: 很简单的一道题,其实也就是从尾到头打印链表,题目要求返回ArrayList,其实也就是一个数组. 可以将链表中的元素全部 ...
- 剑指Offer-1.二维数组中的查找(C++/Java)
题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- FT_Get_Var error on comiling
[Julian@julian-linux-t450 gtk]$ gcc `pkg-config --cflags gtk+-.` -o exam00 exam00.c `pkg-config --li ...
- 区块链自问自答 day1
区块链自问自答 day1 简要介绍区块链是什么? 区块链(Blockchain)是一种对等网络下的分布式数据库系统 数据结构中的单向链表是通过每个节点包含一个节点的指针实现"链" ...
- Serializers 序列化组件——ModelSerializer详解
前面学习Serializers用法时,发现所有的序列化都与我们的模型紧密相关. django_restframework也给我提供了跟模型紧密相关的序列化器——ModelSerializer. 它会根 ...