1 需求:django实现班级管理:查看(分页); 数据库采用django自带的sqlite3

2 数据库表创建

  1. from django.db import models
  2.  
  3. class Classes(models.Model):
  4. title = models.CharField(max_length=64)
  5.  
  6. class Student(models.Model):
  7. name = models.CharField(max_length=64)
  8. age = models.IntegerField()
  9. email = models.EmailField()
  10. cls = models.ForeignKey('Classes')
  11.  
  12. class Teacher(models.Model):
  13. name = models.CharField(max_length=64)
  14. age = models.IntegerField()
  15. email = models.EmailField()
  16. cls = models.ManyToManyField('Classes')

执行python manage.py makemigrations, python manage.py migrate使得数据库表创建生效

3 视图设计

  1. # -*- coding: utf-8 -*-
  2. from django.shortcuts import render, redirect
  3. from app01 import models
  4. from django.forms import Form, fields
  5.  
  6. class ClassForm(Form):
  7. title = fields.RegexField("^全栈\w+")
  8.  
  9. def classes(request):
  10. from utils.pagation_define import PageInfo
  11. current_page_number = request.GET.get('page')
  12. all_count = models.Classes.objects.all().count()
  13. page_info = PageInfo(current_page_number, all_count, "/app01/classes")
  14. class_list = models.Classes.objects.all()[page_info.start():page_info.end()]
  15. # 列表切片操作 a[start:end] start<= index < end
  16. return render(request, 'app01_class_list.html', {'class_list': class_list, 'page_info': page_info})

4 模板设计

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
  7. <link rel="stylesheet" href="/static/plugins/font-awesome-4.7.0/css/font-awesome.css">
  8. </head>
  9. <body>
  10. <h4>班级管理</h4>
  11. <p>
  12. <a href="/app01/add_class" class="btn btn-primary">添加</a>
  13. </p>
  14. <table class="table table-striped table-bordered table-hover table-condensed">
  15. <thead>
  16. <tr>
  17. <th>班级ID</th>
  18. <th>班级名称</th>
  19. <th>操作</th>
  20. </tr>
  21. </thead>
  22. <tbody>
  23. {% for item in class_list %}
  24. <tr>
  25. <td>{{ item.id }}</td>
  26. <td>{{ item.title }}</td>
  27. <td>
  28. <a href="/app01/edit_class/nid={{ item.id }}" class="glyphicon glyphicon-pencil">编辑</a>|
  29. <a href="/app01/del_class/nid={{ item.id }}" class="glyphicon glyphicon-trash">删除</a>
  30. </td>
  31. {#点击删除是一个get请求,要想告诉服务器id,可以通过url get请求获取,或者url匹配到传递给视图#}
  32. </tr>
  33. {% endfor %}
  34.  
  35. </tbody>
  36. </table>
  37. <nav aria-label="Page navigation">
  38. <ul class="pagination">
  39. {{ page_info.pager|safe }}
  40. </ul>
  41. </nav>
  42. </body>
  43. </html>

5 补充分页模块

  1. class PageInfo(object):
  2. def __init__(self, current_page_num, all_count, base_url, per_page=10, show_page=11):
  3. try:
  4. self.current_page_num = int(current_page_num)
  5. except Exception as e:
  6. self.current_page_num = 1
  7. self.per_page = per_page
  8. a,b = divmod(all_count, per_page)
  9. if b:
  10. a = a + 1
  11.  
  12. self.all_page = a
  13. self.show_page = show_page
  14. self.base_url = base_url
  15.  
  16. def start(self):
  17. return (self.current_page_num - 1) * self.per_page
  18.  
  19. def end(self):
  20. return self.current_page_num * self.per_page
  21.  
  22. def pager(self):
  23.  
  24. page_list = []
  25. # 如果总的页码数小于11
  26. if self.show_page >= self.all_page:
  27. begin = 1
  28. stop = self.all_page
  29. # 总页码数大于11
  30. else:
  31. half,_ = divmod(self.show_page,2)
  32. if self.current_page_num <= half:
  33. begin = 1
  34. stop = self.show_page
  35. else:
  36. temp = self.all_page - half
  37. if self.current_page_num >= temp:
  38. begin = self.all_page - self.show_page + 1
  39. stop = self.all_page
  40. else:
  41. begin = self.current_page_num - half
  42. stop = self.current_page_num + half
  43.  
  44. prev_page = ''
  45. if self.current_page_num == 1:
  46. prev_page = '<li class="disabled"><a aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>'
  47. else:
  48. prev_page = '<li><a href="%s?page=%s" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>'% (self.base_url, self.current_page_num -1)
  49. page_list.append(prev_page)
  50. for i in range(begin, stop + 1):
  51. if i == self.current_page_num:
  52. temp = '<li class="active"><a href="%s?page=%s">%s</a></li>' % (self.base_url, i,i)
  53. else:
  54. temp = '<li><a href="%s?page=%s">%s</a></li>' % (self.base_url,i,i)
  55. page_list.append(temp)
  56.  
  57. next_page= ''
  58. if self.current_page_num == self.all_page:
  59. next_page = '<li class="disabled"><a aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>'
  60. else:
  61. next_page = '<li><a href="%s?page=%s" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>' % (self.base_url,self.current_page_num +1)
  62. page_list.append(next_page)
  63. return ''.join(page_list)

  

[oldboy-django][2深入django]班级管理(Form)--查看的更多相关文章

  1. [oldboy-django][2深入django]班级管理(Form)--添加

    1.需求: 添加班级,当有某个输入框数据格式不对时,会保留所有输入框的上次输入数据, 同时给出错误信息 2.视图 def add_class(request): # 提交数据都要用form来实现,因为 ...

  2. [oldboy-django][2深入django]班级管理(Form)--编辑

    1.需求:编辑班级,难点:点击编辑按钮后,页面如何显示 待编辑 班级的信息(用Form实现), 以及Url 设置 2 url url(r'^edit_class/nid=(?P<nid>\ ...

  3. 【django小练习之主机管理界面】

    需求: 利用django,js,bootstrap等实现登录,主机管理等操作. 实现截图 登录界面 主机界面,添加及编辑 部门管理界面 代码实现 目录层级 settings.py "&quo ...

  4. Django的Mov逻辑的管理特色

    Django的MOV逻辑的管理特色 首先我们谈论到一个逻辑上的概念都从它的起点说起,在我看来mov的起点肯定就是Model了,那么Model有什莫特色呢 如果一个项目定义的Django那么Django ...

  5. 72、django之简单验证码实现与form表单钩子函数补充

    本篇主要讲解简单的验证码实现,验证码使用基本都是找现成的组件来实现,用代码实现这个简单功能主要是了解了解验证码内部的实现. 本篇导航: 五位验证码图示 代码实现 登录验证 Form组件钩子函数补充 一 ...

  6. Python(Django)项目与Apache的管理

    (开开心心每一天~ ---虫瘾师) Python(Django)项目交给Apache的管理(一) 准备:Django的环境(Python).Apache.Wsgi(必须文件) 首先需要电脑有Pytho ...

  7. Python(Django)项目与Apache的管理交互

    (开开心心每一天~ ---虫瘾师) Python(Django)项目交给Apache的管理(一) 准备:Django的环境(Python).Apache.Wsgi(必须文件) 首先需要电脑有Pytho ...

  8. Django学习笔记(6)——Form表单

    知识储备:HTML表单form学习 表单,在前端页面中属于最常见的一个东西了.基本上网站信息的提交都用到了表单,所以下面来学习Django中优雅的表单系统:Form 表单的主要作用是在网页上提供一个图 ...

  9. django中怎么使用自定义管理后台xadmin

    django中怎么使用自定义管理后台xadmin 2018年05月19日 15:48:08 LH_python 阅读数:1001   首先创建基本的django项目,配置好基本的model ,url, ...

随机推荐

  1. php:生成的时间与本地电脑的时间不匹配

    如题,在php中我发现在数据库中的时间跟电脑上的时间没有同步 本地时间: 数据库中,生成的时间: 很明显,时分秒是对应不上去的,那么我们只要在php.ini中找到 这里被注释掉了,那我们就改成这样: ...

  2. 【硬盘整理】使用UltimateDefrag将常用文件放置在磁盘最外圈

    使用方法未知.软件截图如下: 官方网站(英文):http://www.disktrix.com/ 汉化破解版V3.0下载地址:http://page2.dfpan.com/fs/7com9monca3 ...

  3. ES6中set和map的区别

    Set ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化. // 例一 var set = ne ...

  4. Ajax的open方法

    Ajax的open()方法有3个参数:1.method:2.url:3.boolean: 参数1有get和post两个取值 参数2是表单的action属性值 参数3:boolean的取值 当该bool ...

  5. myeclipse引入工程后运行出错

    An internal error occurred during: Launching efax on Tomcat 7.x . 项目运行时报错 因为你项目建的时候用的是Tomcat5.x 服务器 ...

  6. IOS UIApplication使用

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  7. systemd 中的requires, wants, before, after

    man systemd.unit    man systemd.service ###依赖关系和前后顺序* 依赖关系:Requires和Wants * 前后顺序:After,Before 依赖关系,前 ...

  8. Java实现随机出题,10道10以内加减法计算

    package com.swift; import java.awt.Toolkit; import java.util.Scanner; public class PlusQuiz { public ...

  9. 洛谷P2908 [USACO08OPEN]文字的力量Word Power

    题目描述 Farmer John wants to evaluate the quality of the names of his N (1 <= N <= 1000) cows. Ea ...

  10. 十一、Shell 文件包含

    Shell 文件包含 和其他语言一样,Shell 也可以包含外部脚本.这样可以很方便的封装一些公用的代码作为一个独立的文件. Shell 文件包含的语法格式如下: . filename # 注意点号( ...