Django拾遗--pagination、sitemap、admin、form

pagination

其实这个分页模块的原理就是根据设定的每页条数来分割queryset。查询结果/每页子项数目=页数

使用方法

传入实现了__iter__的object(一般来讲就是queryset)和期望的每页子项数给Pagination来生成分页处理器的实例。

根据这个分页生成器的page方法,传入页数就可以得到相应页数的内容。

page = pagination.page(1)

常用方法

生成器

num_pages:分页后的总页数

page_range:分页后总页数的迭代

分页对象

has_next()/has_previous():判断前后是否还有

next_page_number()/previous_page_number():前后的页数数字

常见异常处理

遇到超出页数范围时会抛出emptypage

个人踩坑

在做文章的前后翻页时,也用了这个,将每页子项数设为1,就可以达到效果。

但是这个生成的分页的页数是以1为base的,所以前后页的跳转url参数不能直接用页数。

sitemap

最开始生成的sitemap是自己通过查数据库然后生成的,后面发现Django有内置的模块。

启用相关模块

django.contrib.sitemaps加到INSTALLED_APPS中去。

已经启用了sites framework

关于sites framework

其作用主要是提供一个钩子函数get_current_site来获取当前的主域信息。

实现原理是先在DB建立一个存放site信息的表,然后在settings文件中指明site_id,这样就可以在调用钩子函数时,根据这个id来得到对应的信息。

至于如何启用这个功能,先是将django.contrib.sites加到INSTALLED_APPS中,然后设置SITE_ID,然后执行migrate来生成表。

使用方法

其实具体实现起来跟普通视图大同小异,只是Django内置了一个专门处理这个的视图函数,也就是django.contrib.sitemaps.views中的sitemap,这是一个函数型的视图函数。

至于需要渲染出来的信息也是用Django内置的Sitemaps类包裹,其实就是在类中指明要查找的信息。

最后在配置URLCONF的时候,视图函数用内置的,参数Sitemaps用我们自己重写的,如果有自定义模版也一起附上就可以了。

当sitemap信息超过50000条的时候,需要分页,则需要用到sitemap的索引函数,暂时还没有这个需求,所以先不做。

admin

启用相关模块

默认配置是启用了后台管理模块的,然后需要做的先是manage.py createsuperusr创建管理者用户,然后再URLCONF中配置好路由url(r'^admin', admin.site.urls)就可以了。

使用方法

在用后台管理之前,我要修改数据时,要么通过python调用Django的orm去操作数据库,要么通过数据库的相关管理软件来对数据库进行操作,后台管理的便利之处就在于可以在这个管理后台的页面对数据进行修改。(其实就是我暂时只知道能这样做,更多功能在有相关需求的时候再去挖掘吧)

既然这个后台管理是方便我们管理这些数据的,那么我们需要关注的地方就在选择展示哪些数据。如何展示呢,其实就是创建admin.ModelAdmin的子类,在这里面选择要展示的model(也就是那一个表),指出要展示的数据字段,展示规则,是否只读,排列顺序等各种配置。最后将这个子类和对应的model注册到admin.site.register里,这样在后台管理就能看到对应的信息了。

form

Django内置了表单模块,用这个表单模块可以直接生成表单。

个人理解

Django内置了几种类,首先是Form类,这个类的申明跟model差不多,对每个字段进行定义,在view视图使用的时候就是将其实例化即可。

对原有的视图逻辑影响不大,只需要增加判断,在post请求的时候,将post内容传入给类生成实例,然后处理,跳转;在其他请求的时候,生成一个内容为空的实例,实际上就是在页面生成一个空的表单。

在模版文件中,只需传入这个实例就可以自动生成表单了,当然一定要记得加上{% csrf_token %}这个,防止跨站伪造攻击。

然后就是Formset这个类,个人理解这个就是多个form加起来而已,也就是同时生成多个表单,个人在理解max_numextra这个两个参数的时候有些犯浑,现在也记录一下,max_num是这些表单的总数,extra是生成的空白表单数,生成表单的时候,分为有初始值和无初始值,无初始值的那个表单个数就由extra决定,如果有初始值的表单个数大于或等于max_num,则extra这个参数等于没有用了,最终只会生成有初始值表单的个数,这个数是可以大于max_num的。

接着是ModelForm,这个类的好处在于根据已存在的model来生成form,类似继承,选择性继承字段,并且可以直接对已存在数据进行修改。不过也正是因为这样,验证数据的时候会有两步,先是验证表单数据,然后验证这个实例的数据与DB是否相符(表单数据类型是可以再定义的,所以不一定与model相等),注意的是,第一步完了之后会生成一个实例,如果在验证后需要更改数据的话,也需要改两次,一个是cleaned_data,一个是实例的。

最后是ModelFormset,这个暂时用不上,先放下。

在css和js方面,可以在class Media属性中设置自定义。

Django拾遗--pagination、sitemap、admin、form的更多相关文章

  1. Django App(六) Customing Admin Form

    这一篇主要是呼应第二篇时留下来的一个问题,就是如何自定义默认app admin下的Form  1.绑定数据实体 通过第二篇的努力,已经完成了数据实体到数据库的映射,可以将界面的更改保存到数据库,我们建 ...

  2. Django中的ModelForm与Form

    django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm. 关于django中的表单系统有两种: 基于django.forms.Form 基于dj ...

  3. 第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍

    第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍 配置django的admin数据库管理后台 首先urls.py配置数据库后台路由映射,一 ...

  4. django 用model来简化form

    django里面的model和form其实有很多地方有相同之处,django本身也支持用model来简化form 一般情况下,我们的form是这样的 from django import forms ...

  5. Django如何重设Admin密码(转)

      django的admin用户被我多动症一样的测试,给密码弄丢了,需要重置. 从数据库重置的可能性为0,因为django对于密码有保护策略.考虑从运行程序的地方进行重置: 1.在程序的文件夹下,执行 ...

  6. django笔记三之admin的管理

    django笔记三之admin的管理 设置自动admin应用 vim todos/settings.py INSTALLED_APPS = ( 'django.contrib.admin', 新版本已 ...

  7. Django 学习之内置Admin

    一.Admin组件 Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: Django Admin内部依赖: 依赖APP: django.contrib.au ...

  8. Django中间件之实现Admin后台IP白名单

    Django自带的Admin管理后台很方便,但是实际生产环境真的会有挺多安全问题的,在admin的安全防护这方面,我之前就研究实现了给admin加上登录验证码和限流功能,可以参考这篇文章: 不过就在内 ...

  9. Python开发【Django】:重构Admin

    自定义KingAdmin 通过admin样式自己做KingAdmin 提前需知道的model操作 # 获取app名 >>> models.Customer._meta.app_lab ...

随机推荐

  1. awk对列/行进行统计求和【转】

    场景]--类似于excel中的sum函数对列/行进行统计求和 A01 A02 A03 A09 [要求1]--对列进行统计求和 A01 A02 A03 A09 TOTAL [要求2]--对行进行统计求和 ...

  2. 001_a记录和canme的区别

    1.什么是域名解析? 域名解析就是国际域名或者国内域名以及中文域名等域名申请后做的到IP地址的转换过程.IP地址是网路上标识您站点的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址.域名的解 ...

  3. JS排序算法之快速排序

    const Arr = [85, 24, 63, 45, 17, 31, 96, 50]; function quickSort(arr) { 80 if (arr.length <= 1) { ...

  4. UITableView滑动性能优化扩展

    一点UITableView滑动性能优化扩展 影响UITableView的滑动,有哪些因素呢?  关于这一点,人眼能识别的帧率是60左右,这也就是为什么,电脑屏幕的最佳帧率是60Hz.  屏幕一秒钟会刷 ...

  5. Java基础97 json插件的使用(java对象和json字符串对象之间的转换)

    1.需要用到的包 2.实例 实体类 people package com.shore.entity; /** * @author DSHORE/2019-4-19 * */ public class ...

  6. 分享一些 Java 无关基础方面的书籍

    个人认为看书有两个点好处: 1. 能出版出来的书一定是经过反复思考,雕琢和审核的,因此从专业性的角度来说,一本好书的价值超其他资料 2. 对着书上的代码自己敲的时候方便 “看完书之后再次提升自我的最好 ...

  7. sublime text 3配置c/c++编译环境

    关于gcc和g++ 安装编译器是后面所有工作的基础,如果没有编译器,后面的一切都无从谈起.在windows下使用gcc和g++,是通过安装MinGW实现的. 安装MinGW MinGW是Minimal ...

  8. 洛谷P1099 树网的核

    传送门 80分 $ Floyd $ 树的直径可以通过枚举求出.直径的两个端点$ maxi,maxj $ ,由此可知对于一个点 $ k $ ,如果满足 $ d[maxi][k]+d[k][maxj]== ...

  9. jmeter打开其他设备转过来的历史脚本出现报错

    报错大概如下 missing class com.thoughtworks.xstream.converters.ConversionException Debugging information 还 ...

  10. 步步为营-73-asp.net的简单练习(根据美工提供静态页面,编写后台代码)

    说明:实际企业中开发分工是很明确,往往程序员根据美工提供的UI界面进行后台代码的编写. 1.1 原始HTML页面 1.2 使用aspx进行修改 这里使用到了三层架构 using System; usi ...