[oldboy-django][2深入django]班级管理(Form)--查看
1 需求:django实现班级管理:查看(分页); 数据库采用django自带的sqlite3
2 数据库表创建
from django.db import models class Classes(models.Model):
title = models.CharField(max_length=64) class Student(models.Model):
name = models.CharField(max_length=64)
age = models.IntegerField()
email = models.EmailField()
cls = models.ForeignKey('Classes') class Teacher(models.Model):
name = models.CharField(max_length=64)
age = models.IntegerField()
email = models.EmailField()
cls = models.ManyToManyField('Classes')
执行python manage.py makemigrations, python manage.py migrate使得数据库表创建生效
3 视图设计
# -*- coding: utf-8 -*-
from django.shortcuts import render, redirect
from app01 import models
from django.forms import Form, fields class ClassForm(Form):
title = fields.RegexField("^全栈\w+") def classes(request):
from utils.pagation_define import PageInfo
current_page_number = request.GET.get('page')
all_count = models.Classes.objects.all().count()
page_info = PageInfo(current_page_number, all_count, "/app01/classes")
class_list = models.Classes.objects.all()[page_info.start():page_info.end()]
# 列表切片操作 a[start:end] start<= index < end
return render(request, 'app01_class_list.html', {'class_list': class_list, 'page_info': page_info})
4 模板设计
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
<link rel="stylesheet" href="/static/plugins/font-awesome-4.7.0/css/font-awesome.css">
</head>
<body>
<h4>班级管理</h4>
<p>
<a href="/app01/add_class" class="btn btn-primary">添加</a>
</p>
<table class="table table-striped table-bordered table-hover table-condensed">
<thead>
<tr>
<th>班级ID</th>
<th>班级名称</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for item in class_list %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.title }}</td>
<td>
<a href="/app01/edit_class/nid={{ item.id }}" class="glyphicon glyphicon-pencil">编辑</a>|
<a href="/app01/del_class/nid={{ item.id }}" class="glyphicon glyphicon-trash">删除</a>
</td>
{#点击删除是一个get请求,要想告诉服务器id,可以通过url get请求获取,或者url匹配到传递给视图#}
</tr>
{% endfor %} </tbody>
</table>
<nav aria-label="Page navigation">
<ul class="pagination">
{{ page_info.pager|safe }}
</ul>
</nav>
</body>
</html>
5 补充分页模块
class PageInfo(object):
def __init__(self, current_page_num, all_count, base_url, per_page=10, show_page=11):
try:
self.current_page_num = int(current_page_num)
except Exception as e:
self.current_page_num = 1
self.per_page = per_page
a,b = divmod(all_count, per_page)
if b:
a = a + 1 self.all_page = a
self.show_page = show_page
self.base_url = base_url def start(self):
return (self.current_page_num - 1) * self.per_page def end(self):
return self.current_page_num * self.per_page def pager(self): page_list = []
# 如果总的页码数小于11
if self.show_page >= self.all_page:
begin = 1
stop = self.all_page
# 总页码数大于11
else:
half,_ = divmod(self.show_page,2)
if self.current_page_num <= half:
begin = 1
stop = self.show_page
else:
temp = self.all_page - half
if self.current_page_num >= temp:
begin = self.all_page - self.show_page + 1
stop = self.all_page
else:
begin = self.current_page_num - half
stop = self.current_page_num + half prev_page = ''
if self.current_page_num == 1:
prev_page = '<li class="disabled"><a aria-label="Previous"><span aria-hidden="true">«</span></a></li>'
else:
prev_page = '<li><a href="%s?page=%s" aria-label="Previous"><span aria-hidden="true">«</span></a></li>'% (self.base_url, self.current_page_num -1)
page_list.append(prev_page)
for i in range(begin, stop + 1):
if i == self.current_page_num:
temp = '<li class="active"><a href="%s?page=%s">%s</a></li>' % (self.base_url, i,i)
else:
temp = '<li><a href="%s?page=%s">%s</a></li>' % (self.base_url,i,i)
page_list.append(temp) next_page= ''
if self.current_page_num == self.all_page:
next_page = '<li class="disabled"><a aria-label="Next"><span aria-hidden="true">»</span></a></li>'
else:
next_page = '<li><a href="%s?page=%s" aria-label="Next"><span aria-hidden="true">»</span></a></li>' % (self.base_url,self.current_page_num +1)
page_list.append(next_page)
return ''.join(page_list)
[oldboy-django][2深入django]班级管理(Form)--查看的更多相关文章
- [oldboy-django][2深入django]班级管理(Form)--添加
1.需求: 添加班级,当有某个输入框数据格式不对时,会保留所有输入框的上次输入数据, 同时给出错误信息 2.视图 def add_class(request): # 提交数据都要用form来实现,因为 ...
- [oldboy-django][2深入django]班级管理(Form)--编辑
1.需求:编辑班级,难点:点击编辑按钮后,页面如何显示 待编辑 班级的信息(用Form实现), 以及Url 设置 2 url url(r'^edit_class/nid=(?P<nid>\ ...
- 【django小练习之主机管理界面】
需求: 利用django,js,bootstrap等实现登录,主机管理等操作. 实现截图 登录界面 主机界面,添加及编辑 部门管理界面 代码实现 目录层级 settings.py "&quo ...
- Django的Mov逻辑的管理特色
Django的MOV逻辑的管理特色 首先我们谈论到一个逻辑上的概念都从它的起点说起,在我看来mov的起点肯定就是Model了,那么Model有什莫特色呢 如果一个项目定义的Django那么Django ...
- 72、django之简单验证码实现与form表单钩子函数补充
本篇主要讲解简单的验证码实现,验证码使用基本都是找现成的组件来实现,用代码实现这个简单功能主要是了解了解验证码内部的实现. 本篇导航: 五位验证码图示 代码实现 登录验证 Form组件钩子函数补充 一 ...
- Python(Django)项目与Apache的管理
(开开心心每一天~ ---虫瘾师) Python(Django)项目交给Apache的管理(一) 准备:Django的环境(Python).Apache.Wsgi(必须文件) 首先需要电脑有Pytho ...
- Python(Django)项目与Apache的管理交互
(开开心心每一天~ ---虫瘾师) Python(Django)项目交给Apache的管理(一) 准备:Django的环境(Python).Apache.Wsgi(必须文件) 首先需要电脑有Pytho ...
- Django学习笔记(6)——Form表单
知识储备:HTML表单form学习 表单,在前端页面中属于最常见的一个东西了.基本上网站信息的提交都用到了表单,所以下面来学习Django中优雅的表单系统:Form 表单的主要作用是在网页上提供一个图 ...
- django中怎么使用自定义管理后台xadmin
django中怎么使用自定义管理后台xadmin 2018年05月19日 15:48:08 LH_python 阅读数:1001 首先创建基本的django项目,配置好基本的model ,url, ...
随机推荐
- 交互ajax
原生的js封装ajax1.创建ajax对象var oAjax=new XMLHttpRequest();//不兼容IE6var oAjax=new ActiveXobject('Microsoft.X ...
- POJ 2104 K-th Number(分桶,线段树,主席树)
一道比较经典的数据结构题.可以用多种方式来做. 一,分桶法(平方分解). 根据数字x的大小和区间内不大于x的数字数量cnt的单调性,可知第k大数kth对应的cnt应该满足cnt≥k, 且kth是满足条 ...
- 【HHHOJ】NOIP模拟赛 玖 解题报告
点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...
- click
click简介 Click是一个Python包,用于以可组合的方式创建漂亮的命令行界面,只需要很少的代码.这是“命令行界面创建工具包”.它具有高度可配置性,但具有开箱即用的合理默认值. 点击三点: 任 ...
- c++ 循环程序的作业,2017年10月10日作业题。
作业1: 需求:输出一个由 * 符号所组成的矩形,要求每行有50个 * ,一共需要有60行.使用双重for循环完成. 作业2: 需求:输出一个由 * 符号所组成的三角形,要求第一行一个 * ,第二行 ...
- c++中的结构化语句 判断语句if 分支语句switch 循环语句 while 和 do while 循环语句for的使用
作业1: 使用if语句,根据1~7的数字,输出今天是星期几?的程序. 方法一,直接使用单独的if语句 #include <iostream> using namespace std; in ...
- 精致的系统监控工具-netdata
今天在网上瞎逛,偶然发现一款监控工具:netdata,感到一惊,监控工具竟然可以这么漂亮! 简单了解一下,这款工具还算比较新,监控系统运行状态的功能非常强大,除了监控cpu,网卡,磁盘,内存,进程等等 ...
- 破解studio 3T
方法一: 打开注册表:regedit 计算机\HKEY_CURRENT_USER\Software\JavaSoft\Prefs\3t\mongochef\enterprise 将里面得数据清零,又是 ...
- Date.prototype.Format---对Date的扩展
// 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...
- DevOps - CI/CD - Jenkins
Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建.测试和部署等功能.本文以 CentOS7 环境为例,总结了 Jenkin ...