从小白到小黑 python学习之旅 日常总结 90(自定义封装Response对象 异常处理 RBAC-基于角色的访问控制)
class APIResponse(Response): def __init__(self,code=100,msg='成功',data=None,status=None,headers=None,**kwargs): dic = {'code': code, 'msg': msg} if data: dic = {'code': code, 'msg': msg,'data':data} dic.update(kwargs) super().__init__(data=dic, status=status,headers=headers)
自定义异常处理
#统一接口返回 # 自定义异常方法,替换掉全局 # 写一个方法 # 自定义异常处理的方法 from rest_framework.views import exception_handler from rest_framework.response import Response from rest_framework import status def my_exception_handler(exc, context): response=exception_handler(exc, context) # 两种情况,一个是None,drf没有处理 #response对象,django处理了,但是处理的不符合咱们的要求 # print(type(exc)) if not response: if isinstance(exc, ZeroDivisionError): return Response(data={'status': 777, 'msg': "除以0的错误" + str(exc)}, status=status.HTTP_400_BAD_REQUEST) return Response(data={'status':999,'msg':str(exc)},status=status.HTTP_400_BAD_REQUEST) else: # return response return Response(data={'status':888,'msg':response.data.get('detail')},status=status.HTTP_400_BAD_REQUEST) # 全局配置setting.py 'EXCEPTION_HANDLER': 'app01.app_auth.my_exception_handler',
RBAC-基于角色的访问控制
一 什么是RBAC
概念
1
|
RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。
|
应用
1 |
# RBAC - Role-Based Access Control |
前后台权限控制
1 |
# 1)后台用户对各表操作,是后台项目完成的,我们可以直接借助admin后台项目(Django自带的) |
二 Django的内置RBAC(六表)
权限三表

权限六表

三 实操
models.py
1 |
from django.db import models |
admin.py
1 |
from . import models |
这样就可以登陆到admin后台进行操作了
# 前端混合开发缓存的使用 -缓存的位置,通过配置文件来操作(以文件为例) -缓存的粒度: -全站缓存 中间件 MIDDLEWARE = [ 'django.middleware.cache.UpdateCacheMiddleware', 。。。。 'django.middleware.cache.FetchFromCacheMiddleware', ] CACHE_MIDDLEWARE_SECONDS=10 # 全站缓存时间 -单页面缓存 在视图函数上加装饰器 from django.views.decorators.cache import cache_page @cache_page(5) # 缓存5s钟 def test_cache(request): import time ctime=time.time() return render(request,'index.html',context={'ctime':ctime}) -页面局部缓存 {% load cache %} {% cache 5 'name' %} # 5表示5s钟,name是唯一key值 {{ ctime }} {% endcache %} # 前后端分离缓存的使用 - 如何使用 from django.core.cache import cache cache.set('key',value可以是任意数据类型) cache.get('key') -应用场景: -第一次查询所有图书,你通过多表联查序列化之后的数据,直接缓存起来 -后续,直接先去缓存查,如果有直接返回,没有,再去连表查,返回之前再缓存

浙公网安备 33010602011771号