1. 程式人生 > >django之使用redis儲存session

django之使用redis儲存session

首先配置settings裡的環境

# ********************************************配置快取所用
# session使用的儲存方式
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
# 指明使用哪一個庫儲存session資料
SESSION_CACHE_ALIAS = "session"

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1", # 指明使用redis的1號資料庫
        "OPTIONS": {
        "CLIENT_CLASS": "django_redis.client.DefaultClient",
                    }
                },
    "session": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/2", # 指明使用redis的2號資料庫
        "OPTIONS": {
        "CLIENT_CLASS": "django_redis.client.DefaultClient",
                    }
                }
}

myapp裡的views.py

須要的包

from django.contrib.auth import authenticate, login#由於使用的是django的內建認證系統,所以要用這個包認證賬號和密碼
# /登入類
class LoginView(View):
    '''登入'''
    def get(self, request):
        '''顯示登入頁面'''
        # 判斷是否記住了使用者名稱
        if 'username' in request.COOKIES:
            username = request.COOKIES.get('username')
            checked = 'checked'
        else:
            username = ''
            checked = ''
        # 使用模板
        return render(request, 'login.html', {'username':username, 'checked':checked})
    def post(self, request):
        '''登入校驗'''
        # 接收資料
        username = request.POST.get('username')
        password = request.POST.get('pwd')
        # 校驗資料
        if not all([username, password]):
            return render(request, 'login.html', {'errmsg':'資料不完整'})
        # 業務處理:登入校驗,django認證系統自己區分加密的賬號密碼,正確返回user,不正確返回None
        user = authenticate(username=username, password=password)
        if user is not None:
            # 使用者名稱密碼正確
            if user.is_active:
                # 使用者已啟用
                # 記錄使用者的登入狀態
                login(request, user)
                #獲取登入後所需要跳轉到的地址,剛開始“next”沒有值,如果沒有值就返回首頁
                #預設跳轉到首頁,返回點選個人中心
                next_url=request.GET.get("next",reverse("goods:index"))
                # 跳轉到首頁
                response = redirect(next_url) # HttpResponseRedirect
                # 判斷是否需要記住使用者名稱
                remember = request.POST.get('remember')
                if remember == 'on':
                    # 記住使用者名稱,設定cookie,儲存一週
                    response.set_cookie('username', username, max_age=7*24*3600)
                else:
                    response.delete_cookie('username')
                # 返回response,跳轉到首頁
                return response
            else:
                # 使用者未啟用
                return render(request, 'login.html', {'errmsg':'賬戶未啟用'})
        else:
            # 使用者名稱或密碼錯誤
            return render(request, 'login.html', {'errmsg':'使用者名稱或密碼錯誤'})