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中获取网页状态码的两个方法
Nov 03 Python
python numpy 一维数组转变为多维数组的实例
Jul 02 Python
使用Python机器学习降低静态日志噪声
Sep 29 Python
python实现一组典型数据格式转换
Dec 15 Python
Python实现的合并两个有序数组算法示例
Mar 04 Python
python如何将多个PDF进行合并
Aug 13 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
Mar 27 Python
django 数据库返回queryset实现封装为字典
May 19 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
python实现学生管理系统开发
Jul 24 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
pytorch显存一直变大的解决方案
Apr 08 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
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
Thinkphp无限级分类代码
2015/11/11 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
IE 下的只读 innerHTML
2009/08/21 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
puppeteer实现html截图的示例代码
2019/01/10 Javascript
详解关于微信setData回调函数中的坑
2019/02/18 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
打开电脑上的QQ的python代码
2013/02/10 Python
Python构造函数及解构函数介绍
2015/02/26 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
详解python 中in 的 用法
2019/12/12 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
动物科学专业毕业生的自我评价
2013/11/29 职场文书
广告语设计及教案
2014/03/21 职场文书
汽车转让协议书范本
2014/12/07 职场文书
质量负责人岗位职责
2015/02/15 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
财务部岗位职责范本
2015/04/14 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
Python实现数据的序列化操作详解
2022/07/07 Python