django之使用redis儲存session
阿新 • • 發佈:2018-12-12
首先配置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':'使用者名稱或密碼錯誤'})