django 编程小结

1.增删改查

  add

    obj = Obj(atr=atr..)

    obj.save()

  update:

    __dict__ 遍历

    

  del:

    根据id列表删除

    

  query:

    首次查询:

      直接跳转至页面,前端页面自动调用ajax异步方法查询

    根据条件查询:

      使用分页类和将参数字典化传入

 

工具:

  将request.POST or request.GET 的 keyValue turn into dictionary, 配合method (**kwargs)

    

  分页工具:

  

		# 分页查询工具类
		class Pagination(object):
		    def __init__(self, totalCount, currentPage, perPageItemNum, maxPageNum):
		        # 数据总个数
		        self.total_count = totalCount
		        # 当前页
		        try:
		            v = int(currentPage)
		            if v <= 0:
		                v = 1
		            self.current_page = v
		        except Exception as e:
		            self.current_page = 1
		        # 每页显示的行数
		        self.per_page_item_num = perPageItemNum
		        # 最多显示页面
		        self.max_page_num = maxPageNum

		    def start(self):
		        return (self.current_page-1) * self.per_page_item_num

		    def end(self):
		        return self.current_page * self.per_page_item_num

		    @property
		    def num_pages(self):
		        """
		        总页数
		        """
		        a, b = divmod(self.total_count, self.per_page_item_num)
		        if b == 0:
		            return a
		        return a+1

		    @property
		    def pager_num_range(self):
		        # self.current_page     当前页
		        # self.per_pager_num    每页显示条数
		        # self.num_pages        总页数
		        # self.max_page_num     page导航栏总页数
		        if self.num_pages < self.max_page_num:
		            return range(1, self.num_pages+1)
		        # 总页数特别多 5
		        part = int(self.max_page_num/2)
		        if self.current_page <= part:
		            return range(1, self.max_page_num+1)
		        if (self.current_page + part) > self.num_pages:
		            return range(self.num_pages-self.max_page_num+1, self.num_pages+1)
		        return range(self.current_page-part, self.current_page+part+1)

		    def to_dict(self):
		        return json.loads(json.dumps({‘current_page‘: self.current_page, ‘num_pages‘: self.num_pages,
		                                      ‘max_page_num‘: self.max_page_num, ‘per_pager_num‘: self.per_page_item_num,
		                                      ‘pager_num_range‘: self.pager_num_range,}))

		    def page_str(self):
		        """
		            在后台封装前台分页导航栏,适用于单页面参数
		            前端页面引用方法:
		            <ul class="pagination pagination-sm" style="margin: 0 0">
		                {{ page_obj.page_str | safe }}
		            <ul>
		        :return:  分页导航栏
		        """
		        page_list = []
		        first = "<li><a href=‘?p=1‘>首页</a></li>"
		        page_list.append(first)

		        if self.current_page == 1:
		            prev = "<li><a href=‘#‘>上一页</a></li>"
		        else:
		            prev = "<li><a href=‘?p=%s‘>上一页</a></li>" % (self.current_page-1,)
		        page_list.append(prev)
		        for i in self.pager_num_range():
		            if i == self.current_page:
		                temp = "<li class=‘active‘><a href=‘?p=%s‘>%s</a></li>" % (i, i)
		            else:
		                temp = "<li><a href=‘?p=%s‘>%s</a></li>" % (i, i)
		            page_list.append(temp)

		        if self.current_page == self.num_pages:
		            nex = "<li><a href=‘#‘>下一页</a></li>"
		        else:
		            nex = "<li><a href=‘?p=%s‘>下一页</a></li>" % (self.current_page + 1,)
		        page_list.append(nex)

		        last = "<li><a href=‘?p=%s‘>尾页</a></li>" % (self.num_pages,)
		        page_list.append(last)

		        return ‘‘.join(page_list)

  

时间: 2024-11-05 12:07:43

django 编程小结的相关文章

GDI编程小结

图形设备接口(GDI)是一个可运行程序,它接受Windows应用程序的画图请求(表现为GDI函数调用),并将它们传给对应的设备驱动程序,完毕特定于硬件的输出,象打印机输出和屏幕输出.GDI负责Windows的全部图形输出,包含屏幕上输出像素.在打印机上输出硬拷贝以及绘制Windows用户界面.也就是Windows的图形编程. 一.GDI体系结构 1.  GDI32.DLL导出的函数 GDI提供几百个Windows程序中能够调用的函数.这些函数大多数是从Win32的子系统DLL GDI32.DLL

Linux多线程编程小结

 Linux多线程编程小结 前一段时间由于开题的事情一直耽搁了我搞Linux的进度,搞的我之前学的东西都遗忘了,非常烦躁的说,如今抽个时间把之前所学的做个小节.文章内容主要总结于<Linux程序设计第3版>. 1.Linux进程与线程 Linux进程创建一个新线程时,线程将拥有自己的栈(由于线程有自己的局部变量),但与它的创建者共享全局变量.文件描写叙述符.信号句柄和当前文件夹状态. Linux通过fork创建子进程与创建线程之间是有差别的:fork创建出该进程的一份拷贝,这个新进程拥有自己的

sql编程小结之触发器

对照mysql5.1手册,对这几天学的sql编程进行小结,主要涉及触发器.存储过程.权限管理.主从分离等,权当抛砖引玉,高手请略过. 一.触发器 通俗的说就是在指定的数据表增删改的前或后触发执行特定的sql语句,数据表为引用永久性表.不能将触发程序与TEMPORARY表或视图关联起来.可以从四个方面理解触发器: ---监视地点 table ---监视事件 insert/update/delete ---触发时间 after/before ---触发事件 insert/update/delete

Android开发实践:多线程编程小结

我们知道,Android系统为了提高程序的实时响应能力,不允许在UI线程中进行耗时的操作,否则会出现ANR异常,因此必须将耗时的任务放到非UI线程中执行.Android/Java提供了很多类来帮助大家完成异步操作,比如:Thread类,Timer类,AsyncTask类,HandlerThread类,以及Executor接口.这些类都分别在什么场合下使用呢? 本文简单地总结一下Android开发中常见的多线程类型和解决方案,并比较和分析了各个方案的区别,以便更好地理解和应用这些API接口. 1.

xshell编程小结

初步学完shell脚本编程,通过这篇博客对其小结一下 shell定义:shell其实是一个命令解释器,它的作用是解释用户输入的命令和程序 shell脚本:我们可以在文本中输入一系列的命令.控制语句和变量,这一切有机的结合起来就形成了功能强大的shell脚本. 一.基础语法 查看系统脚本解释器 常用的是bash解释器 使用bash解释器执行脚本的三种方式: bash xx.sh sh xx.sh ./xx.sh(注意是否有权限,没有通过chmod 755 xx.sh 或chmod u+x xx.s

C#高级编程小结----集合的小小总结

集合的小结 以上文章介绍了如何处理不同类型的集合,数组的大小是固定的,但可以使用列表作为动态增长的集合.队列以先进先出的方式访问元素.栈以后进先出的方式访问元素.链表可以快速的插入和删除元素,但搜索操作比较慢.通过键和值可以使用字典,它的搜索和插入操作比较快.集用于唯一项,可以是无序的HashSet,也可以是有序的SortedSet<T>.ObservableCollection<T>提供了在列表中的元素变化发生时触发的时间. 版权声明:本文为博主原创文章,未经博主允许不得转载.

GDI+编程小结

GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息. GDI+不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为Windows图形图像程序开发的首选. 一.              GDI+的特点和新增功能 GDI+与GDI一样,都具有设备无关性.应用程序的程序员可利用GDI+这样

【转】ACE编程小结

转自:http://blog.csdn.net/mjp_mjp/article/details/4406059 1.多线程中的ACE_Reactor::EventLoop,当在多线程(池)中调用EventLoop时,需要注意,在Acceptor/EventHandler中要使用其中的方法Reactor()来获取ACE_Reactor的指针,不要使用ACE_Reactor::instance,道理很简单哟.不过,一定要注意,在编程时,使用Reactor()类方法,比使用单件的方法要好很多,起码安全

网络编程-小结

1-----------------------------------------------------基本知识---------------------------------------------------------------- 网络编程的三要素        A:IP地址            a:点分十进制            b:IP地址的组成            c:IP地址的分类            d:dos命令            e:InetAddress