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中的pass语句使用方法讲解
May 14 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
对python中的for循环和range内置函数详解
Apr 17 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
Python 新建文件夹与复制文件夹内所有内容的方法
Oct 27 Python
Python3.6.x中内置函数总结及讲解
Feb 22 Python
python redis 批量设置过期key过程解析
Nov 26 Python
Python namedtuple命名元组实现过程解析
Jan 08 Python
selenium 多窗口切换的实现(windows)
Jan 18 Python
基于python实现获取网页图片过程解析
May 11 Python
python3 实现mysql数据库连接池的示例代码
Apr 17 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 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 define()函数以及defined()函数的用法详解
2013/06/05 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
JavaScript的document对象和window对象详解
2010/12/30 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
JS定义函数的几种常用方法小结
2019/05/23 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
python字典排序实例详解
2015/05/20 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
python获取当前用户的主目录路径方法(推荐)
2017/01/12 Python
python使用folium库绘制地图点击框
2018/09/21 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
python logging 日志的级别调整方式
2020/02/21 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
Unix里面如何在后台运行程序
2016/10/14 面试题
大学自荐信
2013/12/12 职场文书
最经典的商业地产项目广告词
2014/03/13 职场文书
父母寄语大全
2014/04/12 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
2016春节慰问信范文
2015/03/25 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
python区块链持久化和命令行接口实现简版
2022/05/25 Python