1.django的快取配置
#2.django中session的配置redis在django中的配置
caches =
#"password": "123",
} }
}
#配置完這個2個後,在檢視中再設定session,就會自動將session儲存在redis中session的儲存配置
session_engine = '
django.contrib.sessions.backends.cache
'session_cache_alias = '
default'#
設定session失效時間,單位為秒
session_cookie_age = 60*5
from django.conf.urls import這裡檢視使用的是mbv,還用了restframeworkurlfrom django.contrib import
admin
from api import
views
urlpatterns =[
url(r
'^admin/
', admin.site.urls),
url(r
'^session/$
',views.setsession.as_view() ),
]
from rest_framework.views import這裡使用了postmanapiview
#create your views here.
from rest_framework.response import
response
from api import
models
class
myresponse():
def__init__
(self):
self.status=100self.msg=none
@property
defget_dic(self):
return self.__dict__
class
setsession(apiview):
#設定session,直接request.session就自動把session值儲存到redis中了
defpost(self,request):
response =myresponse()
request.session[
"username
"]="
django
"request.session[
"verify_code
"]="
123"
response.msg="
儲存session成功
"return
response(response.get_dic)
#獲取session,直接從request.session中取session的值
defget(self,request):
response =myresponse()
username_redis=request.session.get("
username")
verify_code_redis=request.session.get("
verify_code")
(username_redis,verify_code_redis)
if username_redis=="
django
"and verify_code_redis=="
123"
: response.msg="
驗證成功
"return
response(response.get_dic)
response.msg="
驗證失敗
"response.status=101
return response(response.get_dic)
設定session用了post請求
獲取session用了get請求
需要聯合restframework認證元件一起使用
1.先建立乙個認證類
from rest_framework.authentication import2.使用apiview寫登入介面baseauthentication
from django.core.cache import
cache
from api import
models
from rest_framework.exceptions import
authenticationfailed
class
loginauth(baseauthentication):
defauthenticate(self, request):
token=request.get.get("
token")
#從redis中取出token,前提是已經在settings中配置redis
user=cache.get(token)
ifuser:
return
user,token
token = models.token.objects.filter(key=token).first()
iftoken:
return
token.user,token
else
:
raise authenticationfailed("
你沒有登入
")
from rest_framework.views import3.最後只要配置需要加登入需求的介面apiview
from rest_framework.response import
response
from api import
models
from django.core.exceptions import
objectdoesnotexist
from uuid import
uuid4
from django.core.cache import
cache
class
myresponse():
def__init__
(self):
self.status=100self.msg=none
@property
defget_dic(self):
return self.__dict__
class
login(apiview):
defpost(self,request):
response =myresponse()
name=request.data.get("
name")
pwd=request.data.get("
pwd"
)
try:
user=models.userinfo.objects.filter(username=name,password=pwd).first()
except
objectdoesnotexist as e:
response.msg = "
沒有查收到
"response.status = 101
return
response(response.get_dic)
ifuser:
token=uuid4()
try:
models.token.objects.update_or_create(user=user,defaults=)
#將token存到redis中,設定超時時間一天
cache.set(token, user, 60 * 60 * 24)
response.msg = '
登入成功
'response.token =token
response.name =name
except
objectdoesnotexist as e:
response.msg = "
沒有查收到
"response.status = 101
return
response(response.get_dic)
else
: response.msg = '
使用者名稱或密碼錯誤
'response.status = 101
return response(response.get_dic)
區域性配置:放在檢視函式中
authentication_classes=[loginauth]
全域性配置:settings中
rest_framework =
Django中使用Redis快取
目錄memecache 資料操作 特點 1.依賴 pip install redis2.直接使用 import redis r redis.redis host 127.0.0.1 port 6379,db 1 3.連線池使用 import redis pool redis.connectionpo...
在Django中使用DISTINCT
有時候想用distinct去掉queryset中的重複項,看django文章中是這麼說的 author.objects.distinct entry.objects.order by pub date distinct pub date entry.objects.order by blog dis...
在django中使用logging
django中似乎沒有專門支援logging的module。想在自己開發程式中使用一下log功能,記錄訪問情況,和輸入debug的一些資訊。於是google到一段 使用的python的標準庫logging,目前工作還算正常.url import logging import threading fr...