django之session與分頁(實(shí)例講解)
前面我們介紹了cookies,主要應(yīng)用在用戶登錄上,保存用戶登錄狀態(tài),不過cookies直接放在了瀏覽器上,安全性較低,所以我們便引出了session功能與cookies相同,不同的是它放在了客戶端,相比較cookies來說安全性更高。還有分頁,這是一個(gè)比較常用的功能。
一、session
1、基本語法:
1、設(shè)置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、檢測(cè)是否操作session值 if "session_name" is request.session :
2、解析圖
3、實(shí)例
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): ''' 批量導(dǎo)入數(shù)據(jù): 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) #數(shù)據(jù)總數(shù) print("num_pages",paginator.num_pages) #總頁數(shù) print("page_range",paginator.page_range) #頁碼的列表 page1=paginator.page(1) #第1頁的page對(duì)象 for i in page1: #遍歷第1頁的所有數(shù)據(jù)對(duì)象 print(i) print(page1.object_list) #第1頁的所有數(shù)據(jù) page2=paginator.page(2) print(page2.has_next()) #是否有下一頁 print(page2.next_page_number()) #下一頁的頁碼 print(page2.has_previous()) #是否有上一頁 print(page2.previous_page_number()) #上一頁的頁碼 # 拋錯(cuò) #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" 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、擴(kuò)展
def index(request): book_list=Book.objects.all() paginator = Paginator(book_list, 15) page = request.GET.get('page',1) currentPage=int(page) # 如果頁數(shù)十分多時(shí),換另外一種顯示方式 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與分頁(實(shí)例講解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 在Python的Django框架的視圖中使用Session的方法
- 在Django的session中使用User對(duì)象的方法
- Django的session中對(duì)于用戶驗(yàn)證的支持
- 在Django的視圖(View)外使用Session的方法
- 深入探究Django中的Session與Cookie
- django項(xiàng)目搭建與Session使用詳解
- django session完成狀態(tài)保持的方法
- Django項(xiàng)目開發(fā)中cookies和session的常用操作分析
- django進(jìn)階之cookie和session的使用示例
- Django框架會(huì)話技術(shù)實(shí)例分析【Cookie與Session】
- Django框架自定義session處理操作示例
相關(guān)文章
Python使用Selenium實(shí)現(xiàn)模擬登錄的示例代碼
Selenium(本文基于python3.8)是一個(gè)功能強(qiáng)大的自動(dòng)化測(cè)試工具,它可以用于模擬用戶在瀏覽器中的行為,比如點(diǎn)擊、輸入、滾動(dòng)等等,本教程將詳細(xì)介紹如何使用Python編寫一個(gè)模擬登錄地爬蟲,使用XPath等多種元素匹配方法,需要的朋友可以參考下2023-08-08詳解Python連接MySQL數(shù)據(jù)庫的多種方式
這篇文章主要介紹了Python連接MySQL數(shù)據(jù)庫方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04python、PyTorch圖像讀取與numpy轉(zhuǎn)換實(shí)例
今天小編就為大家分享一篇python、PyTorch圖像讀取與numpy轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01python對(duì)指定目錄下文件進(jìn)行批量重命名的方法
這篇文章主要介紹了python對(duì)指定目錄下文件進(jìn)行批量重命名的方法,涉及Python中replace及join方法的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04Python+Tkinter創(chuàng)建一個(gè)簡(jiǎn)單的鬧鐘程序
這篇文章主要為大家詳細(xì)介紹了如何使用 Python 的 Tkinter 庫創(chuàng)建一個(gè)簡(jiǎn)單的鬧鐘程序,它可以在指定的時(shí)間播放一個(gè)聲音來提醒你,感興趣的可以學(xué)習(xí)一下2023-04-04Python 用matplotlib畫以時(shí)間日期為x軸的圖像
這篇文章主要介紹了Python 用matplotlib畫以時(shí)間日期為x軸的圖像,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08