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制作花瓣网美女图片爬虫
Oct 28 Python
详解TensorFlow在windows上安装与简单示例
Mar 05 Python
python模拟菜刀反弹shell绕过限制【推荐】
Jun 25 Python
python之pexpect实现自动交互的例子
Jul 25 Python
Python操作Sqlite正确实现方法解析
Feb 05 Python
Python 实现平台类游戏添加跳跃功能
Mar 27 Python
Python文本文件的合并操作方法代码实例
Mar 31 Python
超级实用的8个Python列表技巧
Aug 24 Python
利用python 下载bilibili视频
Nov 13 Python
opencv python 对指针仪表读数识别的两种方式
Jan 14 Python
python 调用js的四种方式
Apr 11 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
Jun 10 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实现小型站点广告管理(修正版)
2006/10/09 PHP
构建简单的Webmail系统
2006/10/09 PHP
PHP安全防范技巧分享
2011/11/03 PHP
php利用递归实现删除文件目录的方法
2016/09/23 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
2017/01/19 PHP
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
详解python3中的真值测试
2018/08/13 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
python之语音识别speech模块
2020/09/09 Python
一些Unix笔试题和面试题
2012/09/25 面试题
旷课检讨书2000字
2014/01/14 职场文书
学生实习介绍信
2014/01/15 职场文书
运动会入场词50字
2014/02/20 职场文书
超市工作总结范文2014
2014/12/19 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
Python采集壁纸并实现炫轮播
2022/04/30 Python
Linux安装Docker详细教程
2022/07/07 Servers