随笔分类 - drf
摘要:用户\权限\菜单关系 前端逻辑与实现 vuex内 import {createStore} from 'vuex' export default createStore({ state: { token: localStorage.getItem('username') || '', routers
阅读全文
摘要:基于角色+权限配置模式 可以将权限粒度设置的更细致一些。 具体参考 前端:登录成功后,再获取权限列表,在页面上进行权限判断。 后端:不变 登录 当用户登录时,将用户角色写入到vuex,保存当前用户角色信息。 vuex中 import {createStore} from 'vuex' export
阅读全文
摘要:绝大多数,用户角色和功能固定时,推荐在这种方式。 开发简单,工作量少,可以快速交付。 1 前端 1. 登录 当用户登录时,将用户角色写入到vuex,保存当前用户角色信息。 # store/index.js import {createStore} from 'vuex' export default
阅读全文
摘要:contenttypes组件的内部帮我们讲django的ORM中定义的所有表都自动手机起来,并保存至 后续开发中如果遇到 一张表 与 其他n张表进行关联,就可以基于contenttypes实现。 表定义 from django.db import models from django.contrib
阅读全文
摘要:自定义信号 定义信号 import django.dispatch # 自定义信号 cut_info_signal = django.dispatch.Signal() 注册回调 from utils.signals import cut_info_signal def callback_1(sen
阅读全文
摘要:Logging日志 什么时候用到日志? 可预知的情况,写日志 不可预知情况,写日志 基础版 CRITICAL = 50 FATAL = CRITICAL ERROR = 40 WARNING = 30 WARN = WARNING INFO = 20 DEBUG = 10 NOTSET = 0 im
阅读全文
摘要:settings REST_FRAMEWORK = { # 自定义错误返回 "EXCEPTION_HANDLER": "utils.handler.exception_handler", } exceptions(重写错误类) from rest_framework import status fr
阅读全文
摘要:settings # MEDIA 存放路径 MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # MEDIA 路由前缀 MEDIA_URL = "/media/" urls.py urlpatterns = [ # 匹配media路由 re_path(r"^m
阅读全文
摘要:过滤器 常用于数据筛选,如只查单个user下的东西 from rest_framework.filters import BaseFilterBackend class MineFilterBackend(BaseFilterBackend): FILED="id" def filter_query
阅读全文
摘要:方法1 安装django-cors-headers pip install django-cors-headers settings INSTALLED_APPS = [ 'corsheaders', ] MIDDLEWARE = [ 'corsheaders.middleware.CorsMidd
阅读全文
摘要:安装第三方包 pip install django-filter 过滤1 view from django_filters.rest_framework import DjangoFilterBackend class BlogView(ModelViewSet): queryset = model
阅读全文
摘要:自动生成路由对应关系 路由 from rest_framework import routers router = routers.SimpleRouter() router.register(r'blog', blogViews.BlogView) router.register(r'regist
阅读全文
摘要:根据是否有pk 切换序列化器 get_serializer_class源码 def get_serializer_class(self): """ Return the class to use for the serializer. Defaults to using `self.serializ
阅读全文
摘要:ListModelMixin 源码 class ListModelMixin: """ List a queryset. """ def list(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_qu
阅读全文
摘要:关系 from rest_framework.generics import GenericAPIView from rest_framework.viewsets import ViewSetMixin, GenericViewSet ViewSetMixin+GenericAPIView = G
阅读全文
摘要:list APIView class DemoView(APIView): def get(self, request): queryset = models.UserInfo.objects.all() pager = PageNumberPagination() result = pager.p
阅读全文
摘要:settings REST_FRAMEWORK = { # 分页,limit大小 "PAGE_SIZE": 2, } views class BlogView(APIView): def get(self, request, *args, **kwargs): queryset = models.B
阅读全文
摘要:分页类 # 自定义分页类 class MyPageNumberPagination(PageNumberPagination): # 默认每页大小 page_size = 1 # 最大每页大小 max_page_size = 3 # 控制每页大小的查询字段 page_size_query_param
阅读全文
摘要:settings REST_FRAMEWORK = { # 分页,每页大小 "PAGE_SIZE": 2, } views class BlogView(APIView): """ get: 返回所有blog """ def get(self, request, *args, **kwargs):
阅读全文
摘要:安装 pip install coreapi 设置接口文档路径 from rest_framework.documentation import include_docs_urls urlpatterns = [ ... path('docs/', include_docs_urls(title='
阅读全文