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 18 Python
分享15个最受欢迎的Python开源框架
Jul 13 Python
零基础写python爬虫之使用urllib2组件抓取网页内容
Nov 04 Python
简单介绍使用Python解析并修改XML文档的方法
Oct 15 Python
Python提取网页中超链接的方法
Sep 18 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
Python常见工厂函数用法示例
Mar 21 Python
在Python中os.fork()产生子进程的例子
Aug 08 Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 Python
django实现web接口 python3模拟Post请求方式
Nov 19 Python
用python实现名片管理系统
Jun 18 Python
python使用dlib进行人脸检测和关键点的示例
Dec 05 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查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
什么是python的列表推导式
2020/05/26 Python
详解python如何引用包package
2020/06/07 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
出国留学自荐信
2013/10/25 职场文书
经典演讲稿汇总
2014/05/19 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
无故旷工检讨书
2015/08/15 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis