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之入门(五)缩进和选择
May 27 Python
简单总结Python中序列与字典的相同和不同之处
Jan 19 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
Jul 07 Python
Python处理文本换行符实例代码
Feb 03 Python
Python中列表与元组的乘法操作示例
Feb 10 Python
Python将图片转换为字符画的方法
Jun 16 Python
解决Python 中英文混输格式对齐的问题
Jul 16 Python
Python使用folium excel绘制point
Jan 03 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
Dec 04 Python
matplotlib实现显示伪彩色图像及色度条
Dec 07 Python
Python标准库shutil模块使用方法解析
Mar 10 Python
Python return语句如何实现结果返回调用
Oct 15 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
PHP5中实现多态的两种方法实例分享
2014/04/21 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
MSN消息提示类
2006/09/05 Javascript
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
javascript数组详解
2014/10/22 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
Javascript继承机制详解
2017/05/30 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
用Python实现换行符转换的脚本的教程
2015/04/16 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
自定义django admin model表单提交的例子
2019/08/23 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
美国派对用品及装饰品网上商店:Shindigz
2016/07/30 全球购物
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
如何高效率的查找一个月以内的数据
2012/04/15 面试题
护士自我鉴定范文
2013/10/06 职场文书
英语自我评价范文
2014/01/24 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
会计学专业自荐信
2014/06/25 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书