django之session與分頁(yè)(實(shí)例講解)
前面我們介紹了cookies,主要應(yīng)用在用戶登錄上,保存用戶登錄狀態(tài),不過(guò)cookies直接放在了瀏覽器上,安全性較低,所以我們便引出了session功能與cookies相同,不同的是它放在了客戶端,相比較cookies來(lái)說(shuō)安全性更高。還有分頁(yè),這是一個(gè)比較常用的功能。
一、session
1、基本語(yǔ)法:
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>
二、分頁(yè)
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)
'''
'''
分頁(yè)器的使用:
book_list=Book.objects.all()
paginator = Paginator(book_list, 10)
print("count:",paginator.count) #數(shù)據(jù)總數(shù)
print("num_pages",paginator.num_pages) #總頁(yè)數(shù)
print("page_range",paginator.page_range) #頁(yè)碼的列表
page1=paginator.page(1) #第1頁(yè)的page對(duì)象
for i in page1: #遍歷第1頁(yè)的所有數(shù)據(jù)對(duì)象
print(i)
print(page1.object_list) #第1頁(yè)的所有數(shù)據(jù)
page2=paginator.page(2)
print(page2.has_next()) #是否有下一頁(yè)
print(page2.next_page_number()) #下一頁(yè)的頁(yè)碼
print(page2.has_previous()) #是否有上一頁(yè)
print(page2.previous_page_number()) #上一頁(yè)的頁(yè)碼
# 拋錯(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>分頁(yè)器</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" >上一頁(yè)</a></li>
{% else %}
<li class="previous disabled"><a href="#" rel="external nofollow" rel="external nofollow" >上一頁(yè)</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" >下一頁(yè)</a></li>
{% else %}
<li class="next disabled"><a href="#" rel="external nofollow" rel="external nofollow" >下一頁(yè)</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)
# 如果頁(yè)數(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與分頁(yè)(實(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)目開(kāi)發(fā)中cookies和session的常用操作分析
- django進(jìn)階之cookie和session的使用示例
- Django框架會(huì)話技術(shù)實(shí)例分析【Cookie與Session】
- Django框架自定義session處理操作示例
相關(guān)文章
Python針對(duì)不同文本長(zhǎng)度的處理方案總結(jié)與對(duì)比
這篇文章主要為大家詳細(xì)介紹了Python如何針對(duì)不同文本長(zhǎng)度的處理方案,結(jié)合層次化編碼和檢索優(yōu)化策略,感興趣的小伙伴可以參考一下2025-02-02
解決tensorflow1.x版本加載saver.restore目錄報(bào)錯(cuò)的問(wèn)題
今天小編就為大家分享一篇解決tensorflow1.x版本加載saver.restore目錄報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Python實(shí)現(xiàn)緩存的兩個(gè)簡(jiǎn)單方法
緩存是一種用于提高應(yīng)用程序性能的技術(shù),它通過(guò)臨時(shí)存儲(chǔ)程序獲得的結(jié)果,以便在以后需要時(shí)重用它們,本文將學(xué)習(xí)Python中的不同緩存技術(shù),感興趣的可以了解下2024-11-11
Python JSON格式數(shù)據(jù)的提取和保存的實(shí)現(xiàn)
這篇文章主要介紹了Python JSON格式數(shù)據(jù)的提取和保存的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
把項(xiàng)目從Python2.x移植到Python3.x的經(jīng)驗(yàn)總結(jié)
這篇文章主要介紹了把項(xiàng)目從Python2.x移植到Python3.x的經(jīng)驗(yàn)總結(jié),包括作者所使用的Jinja2框架中一些需要注意的地方,需要的朋友可以參考下2015-04-04
精選39道Python數(shù)據(jù)分析面試題提早備戰(zhàn)金三銀四
這篇文章主要為大家介紹了39道Python數(shù)據(jù)分析的面試題問(wèn)答攻略幫助大家提早備戰(zhàn)金三銀四,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多精進(jìn),早日度過(guò)寒冬2023-12-12
Selenium使用Chrome模擬手機(jī)瀏覽器方法解析
這篇文章主要介紹了Selenium使用Chrome模擬手機(jī)瀏覽器方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
python中前綴運(yùn)算符 *和 **的用法示例詳解
這篇文章主要介紹了python中前綴運(yùn)算符 *和 **的用法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-05-05

