修改 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 练习班级管理系统四 -- 编辑班级的更多相关文章

  1. Django 练习班级管理系统六 -- 编辑老师列表

    修改 views.py @auth def edit_teacher(request, nid): if request.method == "GET": obj = models ...

  2. Django 练习班级管理系统七 -- 编辑老师列表(二)

    修改 views.py @auth def edit_teacher(request, nid): if request.method == "GET": obj = models ...

  3. Django 练习班级管理系统二 -- 添加班级数据

    在上一篇中(Django 练习班级管理系统一 https://www.cnblogs.com/klvchen/p/11078174.html),使用的是莫泰对话框的方式提交数据,适用于数据量少的操作. ...

  4. 【学员管理系统】0x01 班级信息管理功能

    [学员管理系统]0x01 班级信息管理功能 写在前面 项目详细需求参见:Django项目之[学员管理系统] 视图函数: 我们把所有的处理请求相关的函数从 urls.py中拿出来,统一放在一个叫view ...

  5. Django pymysql学员管理系统

    学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司急需一套方便易用的“学员管理系统”,来提 ...

  6. 11 基于django的图书管理系统 多表

    1.需求 作业需求:1.列出图书列表.出版社列表.作者列表2.点击作者,会列出其出版的图书列表3.点击出版社,会列出旗下图书列表4.可以创建.修改.删除 图书.作者.出版社 踩分点:1.满足需求1,2 ...

  7. Django的后台管理系统Admin(5)

    Django的后台管理系统就是为了方便管理员管理网站,所以django自带了一个后台管理系统,接下来记录一下如何使用这个后台的管理系统. 首先我们要进入后台管理系统,就要有一个管理员的账号,先来创建有 ...

  8. 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 ( ...

  9. Python高级进阶(二)Python框架之Django写图书管理系统(LMS)

    正式写项目准备前的工作 Django是一个Web框架,我们使用它就是因为它能够把前后端解耦合而且能够与数据库建立ORM,这样,一个Python开发工程师只需要干自己开发的事情就可以了,而在使用之前就我 ...

随机推荐

  1. Python—下载安装与使用

    安装依赖包 首先安装gcc编译器,编译时需要使用gcc.gcc有些系统版本已经默认安装,通过  gcc --version  查看,没安装的先安装 [root@localhost ~]# yum -y ...

  2. [PHP] 新版本PHP7.4与新版本MySQL8认证问题

    mysql8的默认密码加密方式是caching_sha2_password,PHP7.4连接mysql的加密方式也为caching_sha2_password,这个地方要注意. 当为了兼容旧版的客户端 ...

  3. CodeForces - 1236B (简单组合数学)

    题意 有n种物品和m个背包,每种物品有无限个,现将若干个物品放到这些背包中,满足: 1.每个背包里不能出现相同种类的物品(允许有空背包): 2.在所有的m个背包中,每种物品都出现过. 求方案数,对10 ...

  4. jmeter从上一个请求使用正则表达式抓取Set-Cookie值,在下一个请求中运用

    工作中遇到的问题,登录请求,返回的Response Headers中有个参数Set-Cookie,需要抓取这个参数,运用到下一个请求中,见下图: 通过正则表达式抓取Set-Cookie的值,由于该值存 ...

  5. 201871010135 张玉晶《面向对象程序设计(java)》第七周学习总结

    201871010135  张玉晶<面向对象程序设计(java)>第七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  6. BASIC合集

    握手包 给你握手包,flag是Flag_is_here这个AP的密码,自己看着办吧. 提交格式:flag{WIFI密码} 破解wifi密码 丢到kali,用aircrack-ng kali有一个包含常 ...

  7. arduino (3) 控制sim900A发送短信

    狗屎佳世通旗舰店,卖的什么破玩意sim900a芯片,不支持联通卡,还生明模块支持双卡的 之前买的esp8266-07都是内存偷工减料 买的液体浊度传感器给的原理图也不给基本接线. 差评垃圾店,你敢卖就 ...

  8. Spring Cloud Alibaba Sentinel对Feign的支持

    Spring Cloud Alibaba Sentinel 除了对 RestTemplate 做了支持,同样对于 Feign 也做了支持,如果我们要从 Hystrix 切换到 Sentinel 是非常 ...

  9. js -- 数组的操作(自己的常用备查)

    1.数组的定义 var arr = [],或者 var arr = [1,2,3,4,5] 2.数组的使用 >数组的合并 concat ,,]; ,]; a = a.concat(b); con ...

  10. [开源]OSharpNS 步步为营系列 - 4. 添加业务对外API

    什么是OSharp OSharpNS全称OSharp Framework with .NetStandard2.0,是一个基于.NetStandard2.0开发的一个.NetCore快速开发框架.这个 ...