Django 專案中設定快取

2022-05-02 01:06:11 字數 2916 閱讀 6054

一.配置檔案settings.py中

#

設定django快取存放位置為redis資料庫,並設定乙個預設(default)選項,在redis中(配置檔案/etc/redis/redis.conf)開啟了rdb持久化儲存

#pip install django-redis, 然後在檢視中可以通過 from django_redis import get_redis_connection 這個方法和redis資料庫進行連線

caches =

}}

二.某個應用的視**件views.py中

from django.shortcuts import

render, redirect

from django.views.generic import

view

from goods.models import

goodstype, indexgoodsbanner, indexpromotionbanner, indextypegoodsbanner, goodssku

from order.models import

ordergoods

from django_redis import

get_redis_connection

#使用該模組的方法, 可以設定和取出快取(快取一些無須使用者登入就可以獲取的資料)

#儲存快取的載體已經在settings中設定成redis

from django.core.cache import

cache

from django.core.urlresolvers import

reverse

from django.core.paginator import

paginator

#class

indexview(view):

"""首頁

"""def

get(self, request):

"""顯示網頁

"""#

每次來自瀏覽器首頁的請求,都先嘗試獲取快取

context = cache.get('

index_page_data')

# 刪除快取

# cache.delete("鍵名")

if context is

none:

#獲取商品分類資訊, 有那幾大類商品

types =goodstype.objects.all()

#獲取首頁輪播商品的資訊

index_banner = indexgoodsbanner.objects.all().order_by('

index')

#獲取首頁**活動的資訊

promotion_banner = indexpromotionbanner.objects.all().order_by('

index')

#獲取首頁分類商品活動的資訊

#types_goods_banner = indextypegoodsbanner.objects.all()

for type in

types:

#根據type查詢type種類首頁展示的文字商品資訊和商品資訊

title_banner = indextypegoodsbanner.objects.filter(type=type, display_type=0).order_by('

index')

image_banner = indextypegoodsbanner.objects.filter(type=type, display_type=1).order_by('

index')

#給type物件增加兩個屬性title_banner, image_banner

#分別儲存type種類首頁展示的文字商品資訊和商品資訊

type.title_banner =title_banner

type.image_banner =image_banner

#將購物車顯示數量設定為零

cart_count =0

#組織快取的上下文

context =

#設定快取, 第乙個引數是鍵名,第二個值,第三個是過期時間, 不設定過期時間,就是永不過期

cache.set('

index_page_data

', context, 3600)

#獲取登入使用者後購物車商品的數目,先設定為零

cart_count =0

#獲取user

user =request.user

ifuser.is_authenticated():

#使用者已登入

conn = get_redis_connection('

default')

cart_key = '

cart_%d

'%user.id

cart_count =conn.hlen(cart_key)

#更新模板上下文

context.update(cart_count=cart_count)

#使用模板

return render(request, '

index.html

', context)

這裡既使用cache模組將資料儲存到redis中(已經在配置檔案中將快取資料庫設定為了redis), 也使用了django_redis模組的get_redis_connection()方法進行儲存資料, 個人理解:快取這裡和redis肯定建立的是長連線,使用get_redis_connection()可能建立的是短鏈結。但是直接使用cache,只可以使用cache,get()進行獲取資料, 使用cache.set()進行設定快取. 但是,使用get_redis_connection(),可以自由使用redis的各種資料格式進行儲存資料,更加靈活多變.

Django專案中使用Redis

django redis redis 是乙個 key value 儲存系統,常用於快取的儲存。django redis 基於 bsd 許可,是乙個使 django 支援 redis cache session 後端的全功能元件.安裝 django redis 最簡單的方法就是用 pip pip in...

Django專案中使用Redis

django redis redis 是乙個 key value 儲存系統,常用於快取的儲存。django redis 基於 bsd 許可,是乙個使 django 支援 redis cache session 後端的全功能元件.安裝 django redis 最簡單的方法就是用 pip pip in...

django 專案中遇到的問題

問題1 in include provide the namespace argument to include instead 描述 在最外層的urls.py 新增專案的urls後報錯,錯誤顯示 in include provide the namespace argument to includ...