在django中使用Redis存取session

一.Redis的配置

1.django的缓存配置

# redis在django中的配置
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100}
            # "PASSWORD": "123",
        }
    }
}

2.django中session的配置

# session的存储配置
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'

# 设置session失效时间,单位为秒
SESSION_COOKIE_AGE = 60*5

配置完这个2个后,在视图中再设置session,就会自动将session保存在Redis中

二.路由

from django.conf.urls import url
from django.contrib import admin
from api import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^session/$',views.SetSession.as_view() ),
]

三.视图

这里视图使用的是MBV,还用了restframework

from rest_framework.views import APIView
# Create your views here.
from rest_framework.response import Response
from api import models


class MyResponse():
    def __init__(self):
        self.status=100
        self.msg=None

    @property
    def get_dic(self):
        return self.__dict__


class SetSession(APIView):
    # 设置session,直接request.session就自动把session值保存到Redis中了
    def post(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的值
    def get(self,request):
        response = MyResponse()
        username_redis=request.session.get("username")
        verify_code_redis=request.session.get("verify_code")
        print(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)

四.浏览器发送请求

这里使用了postman

设置session用了post请求

获取session用了get请求

猜你喜欢

转载自www.cnblogs.com/angelyan/p/10451648.html
今日推荐