当前位置: 首页 > news >正文

鄂州英文网站建设线上营销推广公司

鄂州英文网站建设,线上营销推广公司,校园微网站建设方案ppt模板下载,单位门户网站是什么意思这里写目录标题一、权限的数据的特点二、首先settings.py文件中配置redis连接redis数据库一、权限的数据的特点 需要去数据库中频繁的读和写,为了项目提高运行效率,可以把用户的权限在每次登录的时候都缓存到redis中。这样的话,权限判断的中…

这里写目录标题

  • 一、权限的数据的特点
  • 二、首先settings.py文件中配置redis
    • 连接redis数据库

一、权限的数据的特点

需要去数据库中频繁的读和写,为了项目提高运行效率,可以把用户的权限在每次登录的时候都缓存到redis中。这样的话,权限判断的中间件就可以方便的从redis中得到当前用户的所有权限,从而判断。
对于那些数据量大,并且需要频繁的读写,一定需要做缓存的

在默认的app中定义utils包,创建cache_permissions.py

二、首先settings.py文件中配置redis

# 配置Redis数据库
CACHES = {"default": { # 默认"BACKEND": "django_redis.cache.RedisCache",#"LOCATION": "redis://82.156.178.247:6379/0","LOCATION": "redis://127.0.0.1:6379/0","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}},"session": { # session"BACKEND": "django_redis.cache.RedisCache",# "LOCATION": "redis://82.156.178.247:6379/1","LOCATION": "redis://127.0.0.1:6379/1","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}},"verify_code": { # 验证码"BACKEND": "django_redis.cache.RedisCache",# "LOCATION": "redis://82.156.178.247:6379/2","LOCATION": "redis://127.0.0.1:6379/2","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}},
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"

连接redis数据库

首先安装django-redis

pip install django-reids

获得redis数据库的连接

from django_redis import get_redis_connection
redis_conn=get_redis_connection(“default”)

以哈希的方式,存储数据到redis中

redis_conn.hmset(f’user.id’,permissions_dict)

把当前用户的权限信息,缓存到redis数据库中
redis中存放用户权限的结构为:user_用户id——>字典{key:path,value[列表]}——》json字符串

from erp_system.models import MenuModel,PermissionsModel
import json
from django_redis import get_redis_connectiondef redis_storage_permissions(user):"""把当前用户的权限信息,缓存到redis数据库中redis中存放用户权限的结构为:user_用户id——>字典{key:path,value[列表]}——》json字符串"""#查询当前登录用户,拥有的权限id列表,values_list: 返回列表中套元组,values:返回列表中套字典permission_ids = user.roles.values_list('permissions', flat=True).distinct()#根据权限id,获取权限的所有值,一级菜单的权限除外permissions=PermissionsModel.objects.filter(is_menu=False,id__in=permission_ids).values('id','path','method','name')#permissions是查询集,嵌套字典的列表if not permissions.exists():    #没有查询到权限returnpermissions_dict={}             #todo 存放当前用户的权限,path为keyfor permission in permissions:#因为数据需要转换成json格式的字符串,所以排除那些特殊符号#'\u200b'是Unicode中的零度字符,可以理解为不可见字符,例如回车、换行符、制表符method=str(permission.get('method')).replace('\u200b','')path=str(permission.get('path')).replace('\u200b','')_name=str(permission.get('name')).replace('\u200b','')_id=permission.get('id')if path in permissions_dict:permissions_dict[path].append({     #todo 一个请求路径有很多的权限(增删改查),只是method不同'method':method,'sign':_name,'id':_id})else:permissions_dict[path]=[{           #如果没有path,添加进去'method': method,'sign': _name,'id': _id}]for key in permissions_dict:permissions_dict[key]=json.dumps(permissions_dict[key])print(permissions_dict)#todo 存放到redis中redis_conn=get_redis_connection("default")      #todo 获得redis数据库的连接redis_conn.hmset(f'user_{user.id}',permissions_dict)        # todo 以哈希的方式,存放数据到redis

用户认证通过后,自动调用redis_storage_permissions(user)方法

from django.contrib.auth.backends import ModelBackend
from .models import UserModel
import logging
from erp_project.utils.cache_permissions import redis_storage_permissionslogger = logging.getLogger('erp')class UserLoginAuth(ModelBackend):def authenticate(self, request, username=None, password=None, **kwargs):"""实现用户认证"""try:user = UserModel.objects.get(username=username)logger.info(user)except:return None#判断密码if user.check_password(password):redis_storage_permissions(user)     #todo 调用缓存数据的方法return user  # 把user对象放到request对象中

登录操作后,查看缓存中的数据

在这里插入图片描述

http://www.yayakq.cn/news/868757/

相关文章:

  • 如何做律师网站重庆网站开发建设
  • 东莞专业做外贸网站株洲做网站定制
  • 企业网站建设的主要目的是深圳网站建设大全
  • 扬州做网站做棋牌网站违法嘛
  • 镇江网站优化推广立码软件做网站
  • 肇庆企业自助建站系统网站风格确定
  • 深圳专业制作网站哪个公司好怎么看网站到期时间
  • 做网站有什么js特效旅游网站哪个好
  • 睢县房产网站建设做问卷的网站好
  • 有什么做网站优化公司苏宁易购网站建设的目标
  • 西安苗木行业网站建设价格短网址生成器手机版
  • 国家开发银行生源地助学贷款网站网站建设中项目经理的职责
  • 网站怎么做图片动态图片不显示不出来的技术号的网站建设
  • 威海住房建设局网站电影网站网页设计实训报告
  • 做优化的网站网页编辑器绿色版
  • 做服装加工哪个网站比较好wordpress 中文文件
  • 博物馆网站制作武进建设局网站首页
  • 企业网站标签页是什么wordpress集中页面地址
  • 百度推广做网站吗施工企业的描述
  • 自己怎么样建网站视频网络软文发布平台
  • 做网站的 简历江西智慧团建登录入口
  • 做HH的网站页面设计的怎么样
  • 长春火车站到龙嘉机场动车时刻表中国菲律宾男篮
  • 高明网站设计分形科技做网站怎么样
  • 做网站需要前台和后台吗网页与网站的区别与联系是什么
  • 徐州做网站公司微信公众号登录入口怎么找
  • 免费空间访客领取网站服装定制设计公司
  • 网站建设与设计主要是干什么的环保创业项目
  • 网站改版对优化的影响h5网站快速搭建
  • 那家公司做网站好wordpress 快速发布