修改 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. if选择结构

    if的语法规则: if(布尔表达式){java语句} //只有一个java语句的时候可以省略大括号不建议这么写但是别人写的代码能看懂 if的写法有4种: if(){} if(){}else{} if( ...

  2. PAT 1145 1078| hashing哈希表 平方探测法

    pat 1145: 参考链接 Quadratic probing (with positive increments only) is used to solve the collisions.:平方 ...

  3. 多线程(六)多线程同步_SemaPhore信号量

    信号量依然是一种内核同步对象,它的作用在于控制共享资源的最大访问数量 例如:我们有一个服务器,为这服务器创建一个线程池,线程池有五个线程,每个线程处理1个请求.当五个线程都在处理请求时,这个线程池己到 ...

  4. linux shell脚本命令

    sort命令 sort #按照字典序排序 sort -n #以数值来排序,避免10比2小的情况 sort -k #如果文件有多列,指定排序的列 sort -r #逆序排列 uniq 命令 sort t ...

  5. Springboot项目启动不了。也不打印任何日志信息。

    Springboot项目启动不了.也不打印任何日志信息. <!-- 在创建Spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-sta ...

  6. shellnet运行train_val_seg.py

    1.semantic3d数据集准备:prepare_semantic3d_data.py 11个测试数据集(.txt文件): 假如运行的是室外点云数据集“seg_semantic3d”,可能需要做以下 ...

  7. SOA案例分析浅谈

    SOA是英文 Service-Oriented Architecture 三个首字母单词的缩写,中文译为: 面向服务架构 ( SOA), SOA架构与 B/S . C/S 架构是目前最流行三种 Web ...

  8. 【BZOJ3600】没有人的算术(替罪羊树+线段树)

    点此看题面 大致题意: 定义任意数对\(>0\),数对之间比大小先比第一位.后比第二位,一开始数列全为\(0\),要求你支持\(a_k=(a_x,a_y)\)和询问区间最大值所在位置两种操作. ...

  9. Python 中的时间处理包datetime和arrow

    Python 中的时间处理包datetime和arrow 在获取贝壳分的时候用到了时间处理函数,想要获取上个月时间包括年.月.日等 # 方法一: today = datetime.date.today ...

  10. 基于Django的Rest Framework框架的频率组件

    0|1一.频率组件的作用 在我们平常浏览网站的时候会发现,一个功能你点击很多次后,系统会让你休息会在点击,这其实就是频率控制,主要作用是限制你在一定时间内提交请求的次数,减少服务器的压力. modle ...