一.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"]=""
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=="":
response.msg="验证成功"
return Response(response.get_dic)
response.msg="验证失败"
response.status=101
return Response(response.get_dic)

四.浏览器发送请求

这里使用了postman

设置session用了post请求

获取session用了get请求

五.cache组件存取token

需要联合restframework认证组件一起使用

1.先创建一个认证类

from rest_framework.authentication import BaseAuthentication
from django.core.cache import cache
from api import models
from rest_framework.exceptions import AuthenticationFailed class LoginAuth(BaseAuthentication):
def authenticate(self, request):
token=request.GEt.get("token")
# 从Redis中取出token,前提是已经在settings中配置Redis
user=cache.get(token)
if user:
return user,token
token = models.Token.objects.filter(key=token).first()
if token:
return token.user,token
else:
raise AuthenticationFailed("你没有登入")

2.使用APIView写登入接口

from rest_framework.views import 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=100
self.msg=None @property
def get_dic(self):
return self.__dict__ class Login(APIView):
def post(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)
if user:
token=uuid4()
try:
models.Token.objects.update_or_create(user=user,defaults={'key':token})
# 将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)

3.最后只要配置需要加登入需求的接口

局部配置:放在视图函数中

authentication_classes=[LoginAuth]

全局配置:settings中

REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES":["导入你写的认证类",]
}

在django中使用Redis存取session的更多相关文章

  1. django中使用redis保存session(转)

    原文:https://blog.csdn.net/Enjolras_fuu/article/details/79661582 Django-redis-session官网:https://pypi.o ...

  2. 用Python来操作redis 以及在Django中使用redis

    什么是Redis? Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure server). Redis的键值可以包 ...

  3. {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

    Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...

  4. Django day35 redis连接池,redis-list操作,django中使用redis,支付宝支付

    一:redis连接池, 二:redis-list操作, 三:django中使用redis, 四:支付宝支付

  5. python连接redis、redis字符串操作、hash操作、列表操作、其他通用操作、管道、django中使用redis

    今日内容概要 python连接redis redis字符串操作 redis之hash操作 redis之列表操作 redis其他 通用操作,管道 django中使用redis 内容详细 1.python ...

  6. Django中的cookie与session

    cookie与session的实现原理 HTTP被设计为”无状态”,每次请求都处于相同的空间中. 在一次请求和下一次请求之间没有任何状态保持,我们无法根据请求的任何方面(IP地址,用户代理等)来识别来 ...

  7. Django中的cookie和session

    前言 HTTP协议 是短连接.且状态的,所以在客户端向服务端发起请求后,服务端在响应头 加入cokie响应给浏览器,以此记录客户端状态: cook是来自服务端,保存在浏览器的键值对,主要应用于用户登录 ...

  8. 【转】Django中的cookie与session

    转自:https://www.cnblogs.com/chenchao1990/p/5283725.html cookie与session的实现原理 HTTP被设计为”无状态”,每次请求都处于相同的空 ...

  9. 如何使用django中的cookie和session?

    1.Cookie 介绍 Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Co ...

随机推荐

  1. 移动端Web界面滚动touch事件

    解决办法一: elem.addEventListener( 'touchstart', fn, { passive: false } ); 解决办法二: * { touch-action: pan-y ...

  2. Python:matplotlib绘制散点图

    与线型图类似的是,散点图也是一个个点集构成的.但不同之处在于,散点图的各点之间不会按照前后关系以线条连接起来. 用plt.plot画散点图     奇怪,代码和前面的例子差不多,为什么这里显示的却是散 ...

  3. 莫烦theano学习自修第九天【过拟合问题与正规化】

    如下图所示(回归的过拟合问题):如果机器学习得到的回归为下图中的直线则是比较好的结果,但是如果进一步控制减少误差,导致机器学习到了下图中的曲线,则100%正确的学习了训练数据,看似较好,但是如果换成另 ...

  4. Deploy .NET Core with Docker

    Creating a .NET Core project If you already have an existing .NET Core project you are more than wel ...

  5. SharePoint 2016 installation error The program can not start because api-ms-win-crt-runtime-l1-1-0.dll is missing

    In this post we will discuss how we can resolve the issue The program can not start because api-ms-w ...

  6. python命令里运行正确但是pycharm里面运行就是报错的问题

    这两天在学习爬虫,第一步就是 import scrapy class StackOverflowSpider(scrapy.Spider): 结果一直报错,说是scrapy没有spider这个方法,各 ...

  7. delegate--委托

    delegate--委托 (可以把委托看成用来执行方法的一个东西) eg: namespace delegateTest{ delegate double MathsOp(double x); cla ...

  8. @EnableWebMvc

    1.启用MVC Java config 或 MVC XML namespace 想要启用MVC Java config,只需要将@EnableWebMvc添加到你的一个@Configuration c ...

  9. BZOJ1565[NOI2009]植物大战僵尸——最大权闭合子图+拓扑排序

    题目描述 Plants vs. Zombies(PVZ)是最近十分风靡的一款小游戏.Plants(植物)和Zombies(僵尸)是游戏的主角,其中Plants防守,而Zombies进攻.该款游戏包含多 ...

  10. Destroying the bus stations HDU - 2485(最小割点)

    题意: 就是求最小割点 解析: 正向一遍spfa 反向一遍spfa  然后遍历每一条边,对于当前边 如果dis1[u] + dis2[v] + 1 <= k 那么就把这条边加入到网络流图中, 每 ...