一.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. windos安装maven

    1.下载好maven压缩包,并解压到相应位置,本次安装在D: 2.配置环境变量 MAVEN_HOME=D:\apache-maven-3.0.5 path=%MAVEN_HOME% 3.生成maven ...

  2. 记一次阿里云服务器被用作DDOS攻击肉鸡

    事件描述:阿里云报警 ——检测该异常事件意味着您服务器上开启了"Chargen/DNS/NTP/SNMP/SSDP"这些UDP端口服务,黑客通过向该ECS发送伪造源IP和源端口的恶 ...

  3. Java语言支持的3种变量类型

    类变量(静态变量):独立于方法之外的变量,用 static 修饰. 实例变量(全局变量):独立于方法之外的变量,不过没有 static 修饰. 局部变量:类的方法中的变量. 例子如下: public  ...

  4. layui tips

  5. Lodop打印控件 打印透明图问题

    Lodop通过增设transcolor属性实现了“先字后章”效果,这个属性可以把某种颜色转成类似透明的效果.例如:把图章的底色白色变成透明:transcolor="#FFFFFF" ...

  6. openblas下载安装编译

    编译好的库: https://github.com/JuliaLinearAlgebra/OpenBLASBuilder/releases 源码编译 下载:https://github.com/xia ...

  7. hibernate主配置文件中指定session与当前线程绑定

    配置一条属性 <property name="hibernate.current_session_context_class">thread</property& ...

  8. nginx-添加禁止访问规则

    location ~* /application/(admin|index)/static/.*$ { allow all; } location ~* /(applicaion|addos|coe| ...

  9. Codeforces Round #472 Div. 1

    A:某个格子被染黑说明该行和该列同时被选中,使用并查集合并,最后看每个集合中是否有未被染黑的格子即可. #include<iostream> #include<cstdio> ...

  10. 水课 or not

    很不幸,这学期的毛概老师是个老古董,讲的内容也甚是枯燥和迂腐,个人角度是不太喜欢.然而这也仅仅是站在个人感性的角度,唏嘘一下也就够了.听不下去了,写点东西. 有时候会想,是不是随着自己长大,渐渐地对专 ...