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 相关文章推荐
Pyramid添加Middleware的方法实例
Nov 27 Python
python字符串加密解密的三种方法分享(base64 win32com)
Jan 19 Python
python opencv 图像拼接的实现方法
Jun 27 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
Jul 30 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
Sep 03 Python
如何用Python和JS实现的Web SSH工具
Feb 23 Python
python将图片转为矢量图的方法步骤
Mar 30 Python
python获取淘宝服务器时间的代码示例
Apr 22 Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
May 22 Python
Python面向对象之成员相关知识总结
Jun 24 Python
Python获取字典中某个key的value
Apr 13 Python
python的html标准库
Apr 29 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
记录mysql性能查询过程的使用方法
2013/05/02 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
PHP数组函数知识汇总
2016/05/12 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
用jscript启动sqlserver
2007/06/21 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
2013/12/31 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
[45:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第二场 6.2
2018/06/04 DOTA
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
Python中shutil模块的常用文件操作函数用法示例
2016/07/05 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
pandas.cut具体使用总结
2019/06/24 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
澳洲的服装老品牌:SABA
2018/02/06 全球购物
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
奖学金自我鉴定范文
2013/10/03 职场文书
建筑工程毕业生自我鉴定
2014/01/14 职场文书
纪念九一八事变演讲稿1000字
2014/09/14 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
承诺书范本
2015/01/21 职场文书
Python机器学习之基础概述
2021/05/19 Python
Mysql 文件配置解析介绍
2022/05/06 MySQL