django之session与分页(实例讲解)


Posted in Python onNovember 13, 2017

前面我们介绍了cookies,主要应用在用户登录上,保存用户登录状态,不过cookies直接放在了浏览器上,安全性较低,所以我们便引出了session功能与cookies相同,不同的是它放在了客户端,相比较cookies来说安全性更高。还有分页,这是一个比较常用的功能。

一、session

1、基本语法:

1、设置Sessions值
   request.session['session_name'] ="admin"
2、获取Sessions值
   session_name = request.session["session_name"]
   session_name = request.session.get("session_name")
3、删除Sessions值
   del request.session["session_name"]
   request.session.flush()
4、检测是否操作session值
   if "session_name" is request.session :

2、解析图

django之session与分页(实例讲解)

3、实例

1)views

def login(requset):
 if requset.method=="POST":
  username=requset.POST.get("user")
  password=requset.POST.get("pwd")
  ret=models.UserInfo.objects.filter(username=username,password=password)
  if ret:
   requset.session["IS_LOGON"]=True
   requset.session["USER"]=username

   return redirect("/home/")
  else:
   return redirect("/login/")

 return render(requset,"login.html")

def home(request):
 ret=request.session.get("IS_LOGON",None)

 if ret :
  username=request.session.get("USER")
  return render(request, "home.html",locals())
 else:
  return redirect("/login/")

2)template

<form action="/login/" method="post">
 {% csrf_token %}
 <p>姓名 <input type="text" name="user"></p>
 <p>密码 <input type="password" name="pwd"></p>
 <input type="submit">
</form>

二、分页

1、view

from django.shortcuts import render,HttpResponse

# Create your views here.
from app01.models import *
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def index(request):

 '''
 批量导入数据:

 Booklist=[]
 for i in range(100):
  Booklist.append(Book(title="book"+str(i),price=30+i*i))
 Book.objects.bulk_create(Booklist)
 '''

 '''
分页器的使用:

 book_list=Book.objects.all()

 paginator = Paginator(book_list, 10)

 print("count:",paginator.count)   #数据总数
 print("num_pages",paginator.num_pages) #总页数
 print("page_range",paginator.page_range) #页码的列表



 page1=paginator.page(1) #第1页的page对象
 for i in page1:   #遍历第1页的所有数据对象
  print(i)

 print(page1.object_list) #第1页的所有数据


 page2=paginator.page(2)

 print(page2.has_next())   #是否有下一页
 print(page2.next_page_number()) #下一页的页码
 print(page2.has_previous())  #是否有上一页
 print(page2.previous_page_number()) #上一页的页码



 # 抛错
 #page=paginator.page(12) # error:EmptyPage

 #page=paginator.page("z") # error:PageNotAnInteger

 '''


 book_list=Book.objects.all()

 paginator = Paginator(book_list, 10)
 page = request.GET.get('page',1)
 currentPage=int(page)


 try:
  print(page)
  book_list = paginator.page(page)
 except PageNotAnInteger:
  book_list = paginator.page(1)
 except EmptyPage:
  book_list = paginator.page(paginator.num_pages)


 return render(request,"index.html",{"book_list":book_list,"paginator":paginator,"currentPage":currentPage})

2、templates

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" 
 integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>

<div class="container">

 <h4>分页器</h4>
 <ul>

  {% for book in book_list %}
    <li>{{ book.title }} -----{{ book.price }}</li>
  {% endfor %}

  </ul>


 <ul class="pagination" id="pager">

     {% if book_list.has_previous %}
     <li class="previous"><a href="/index/?page={{ book_list.previous_page_number }}" rel="external nofollow" >上一页</a></li>
     {% else %}
     <li class="previous disabled"><a href="#" rel="external nofollow" rel="external nofollow" >上一页</a></li>
     {% endif %}


     {% for num in paginator.page_range %}

      {% if num == currentPage %}
      <li class="item active"><a href="/index/?page={{ num }}" rel="external nofollow" rel="external nofollow" >{{ num }}</a></li>
      {% else %}
      <li class="item"><a href="/index/?page={{ num }}" rel="external nofollow" rel="external nofollow" >{{ num }}</a></li>

      {% endif %}
     {% endfor %}



     {% if book_list.has_next %}
     <li class="next"><a href="/index/?page={{ book_list.next_page_number }}" rel="external nofollow" >下一页</a></li>
     {% else %}
     <li class="next disabled"><a href="#" rel="external nofollow" rel="external nofollow" >下一页</a></li>
     {% endif %}

   </ul>
</div>



</body>
</html>

3、扩展

def index(request):


 book_list=Book.objects.all()

 paginator = Paginator(book_list, 15)
 page = request.GET.get('page',1)
 currentPage=int(page)

 # 如果页数十分多时,换另外一种显示方式
 if paginator.num_pages>30:

  if currentPage-5<1:
   pageRange=range(1,11)
  elif currentPage+5>paginator.num_pages:
   pageRange=range(currentPage-5,paginator.num_pages+1)

  else:
   pageRange=range(currentPage-5,currentPage+5)

 else:
  pageRange=paginator.page_range


 try:
  print(page)
  book_list = paginator.page(page)
 except PageNotAnInteger:
  book_list = paginator.page(1)
 except EmptyPage:
  book_list = paginator.page(paginator.num_pages)


 return render(request,"index.html",locals())

以上这篇django之session与分页(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 实时遍历日志文件
Apr 12 Python
Python while 循环使用的简单实例
Jun 08 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 Python
Python基础学习之函数方法实例详解
Jun 18 Python
python实现将视频按帧读取到自定义目录
Dec 10 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
解决Keras自带数据集与预训练model下载太慢问题
Jun 12 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
Jul 31 Python
详解Python3 定义一个跨越多行的字符串的多种方法
Sep 06 Python
Python timeit模块原理及使用方法
Oct 10 Python
Python基础之数据结构详解
Apr 28 Python
python实现图片处理和特征提取详解
Nov 13 #Python
Queue 实现生产者消费者模型(实例讲解)
Nov 13 #Python
python图像常规操作
Nov 11 #Python
python中实现k-means聚类算法详解
Nov 11 #Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 #Python
Python内存管理方式和垃圾回收算法解析
Nov 11 #Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 #Python
You might like
php实现按照权重随机排序数据的方法
2015/01/09 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
js实现扫雷源代码
2020/11/27 Javascript
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
Python ZipFile模块详解
2013/11/01 Python
使用Python神器对付12306变态验证码
2016/01/05 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
python 同时运行多个程序的实例
2019/01/07 Python
python将字母转化为数字实例方法
2019/10/04 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
2020/07/30 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
数控专业推荐信范文
2013/12/02 职场文书
酒店中秋节活动方案
2014/01/31 职场文书
《绿色蝈蝈》教学反思
2014/03/02 职场文书
招聘专员岗位职责
2014/03/07 职场文书
高中学生评语大全
2014/04/25 职场文书
法制宣传月活动方案
2014/05/11 职场文书
助理政工师申报材料
2014/06/03 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书