昨日回顾
1 基于jwt的多方式登录
-login
-之前写的处理逻辑都是在视图类中
-这次把逻辑拿到序列化类中validate方法中,在视图函数中不用写逻辑,is_valide
-重点:视图类和序列化类之间交互数据的桥梁 context={}
2 自己定义用户表,登录手动签发token,自己定义的认证类
-认证通过,正常情况下查询得到当前登录用户(访问数据库),但是咱们出于效率的考虑没有查询数据,自己构造了一个User对象
3 jwt中重要的
-几个函数:
-payload = jwt_decode_handler(token)
-payload = jwt_payload_handler(user)
-token = jwt_encode_handler(payload)
-配置文件:
-token过期时间
4 book的多表增删查改,群增,群删,群查,群改
-群查,单查
-单增,群增: 序列化类,初始化的时候,指定many=True,得到的是ListSerializer对象
-单删,群删:合二为一
-单改,群改:
两种方法:
-自行for循环
-重写ListBookSerializer,重写update方法,BookSerializer要跟ListBookSerializer建立联系,list_serializer_class=ListBookSerializer
今日内容
1 RBAC-基于角色的访问控制
RBAC :是基于角色的访问控制(Role-Based Access Control )
在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便
用户表 角色表 权限表
用户表 角色表 权限表
用户表和角色表是多对多,需要建立第三张表
角色和权限是多对多,需要建立第三张表
用户表 角色表 权限表
用户表和角色表是多对多,需要建立第三张表
角色和权限是多对多,需要建立第三张表
用户和权限多对多,建立第三张表
auth_user:用户表,扩写
auth_group:角色表(组表)
auth_permission:权限表
auth_user_groups:用户对角色的中间表
auth_group_permissions:角色对权限的中间表
auth_user_user_permissions:用户对权限的中间表
2 xadmin的使用
1 django内置了一个admin,有的人觉得丑,功能不够强大,这群人写了一个叫xadmin的,用来替换admin
2 django的一个app
3 如何使用
-区分1.x和2.x
-1.x :pip3 install xadmin
-2.x :pip3 install git+git://github.com/sshwsfc/xadmin.git@django2
pip3 install https://codeload.github.com/sshwsfc/xadmin/zip/django2
-django2.x+xadmin 2.x 环境搭建
-安装
-在app中注册
'xadmin',
'crispy_forms',
'reversion',
-修改国际化
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
-数据迁移
python3 manage.py makemigrations
python3 manage.py migrate
-配置路由信息
import xadmin
xadmin.autodiscover()
from xadmin.plugins import xversion
xversion.register_models()
urlpatterns = [
path('xadmin/', xadmin.site.urls)
]
-创建超级用户
python manage.py createsuperuser
-登录,访问地址,输入用户名密码进入
http://127.0.0.1:8000/xadmin/
4 美化
-写一个类
class BookClass():
list_display = ['id', 'name', 'price','publish']
search_fields = ['id','name']
list_filter = ['is_delete']
list_export = ('xls', 'xml', 'json')
list_export_fields = ('id', 'name', 'price')
data_charts = {
"order_amount": {
'title': '随便写',
"x-field": "price",
"y-field": ('publish',),
"order": ('id',)
},
}
-注册
xadmin.site.register(models.Book,BookClass)
3 django缓存
3.1 缓存位置
1 内存中
2 文件中(硬盘上)
3 数据库缓存
4 redis中(后期都用它)
5 通过配置,设置缓存位置
-以文件缓存为例
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
'TIMEOUT':300,
'OPTIONS':{
'MAX_ENTRIES': 300,
'CULL_FREQUENCY': 3,
}
}
}
3.2 缓存粒度
1 三种粒度:整站缓存,单页面缓存,局部缓存
2 单页面缓存
from django.views.decorators.cache import cache_page
@cache_page(5)
def index(request):
import time
ctime=time.time()
return render(request,'index.html',context={'ctime':ctime})
3 页面中某个位置缓存(局部缓存)
{% load cache %}
{% cache 3 'xxx'%}
这一部分用缓存
时间为:{{ ctime }}
{% endcache %}
4 整站缓存(两个中间件)
‘django.middleware.cache.UpdateCacheMiddleware’,
'。。。',
‘django.middleware.cache.FetchFromCacheMiddleware’,
CACHE_MIDDLEWARE_SECONDS=5
3.3 前后端分离后缓存使用
1 查出一堆json格式数据,链表查了8个表
2 前后端分离以后,
-只需要会如何是把字典,字符串,对象放到缓存中,
-如何取出来
4 具体使用
from django.core.cache import cache
class BookView(APIView):
def get(self, request):
res_data = cache.get('book_list_dix',)
if res_data:
print('走了缓存')
return Response(res_data)
else:
book_list = models.Book.objects.all()
ser = serializer.BookSer(book_list, many=True)
cache.set('book_list_dix', ser.data,100)
print('没走缓存')
return Response(ser.data)
5 cache可以缓存所有数据类型,包括自定义的类(pickle)
4 django信号
1 Django提供一种信号机制。当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行
2 Django内置信号
Model signals
pre_init
post_init
pre_save
post_save
pre_delete
post_delete
m2m_changed
class_prepared
Management signals
pre_migrate
post_migrate
Request/response signals
request_started
request_finished
got_request_exception
Test signals
setting_changed
template_rendered
Database Wrappers
connection_created
3 内置信号的使用(两种方式)
from django.core.signals import request_started,request_finished
from django.dispatch import receiver
@receiver(request_finished)
def my_callback(sender, **kwargs):
print("请zzou了,走了我")
4 信号的应用场景:
-记录日志(对象创建就写入日志)
-解耦合
补充
环境变量相关
1 用户环境变量,系统环境变量
2 环境变量作用:在任意目录下敲命令能不能找得到
作业
1 整理rbac
2 整理xadmin的使用
3 整理缓存的使用
4 基于文件缓存,实现对查询所有图书接口的缓存
5 整理信号的使用