django-rest-framework搭建平台实战教程三:接口编写及权限校验(前后端分离)
1.flask搭建平台实战教程一:生成数据库数据2.flask搭建平台实战教程二:快速实现用户注册和登录3.fastapi搭建平台实战教程二:快速实现用户注册和登录4.fastapi搭建平台实战教程一:生成数据库数据5.fastapi框架docs文档Responses去掉默认的异常响应422Validation Error6.flask搭建平台实战教程三:接口编写及权限校验(前后端分离)
7.django-rest-framework搭建平台实战教程三:接口编写及权限校验(前后端分离)
8.django-rest-framework搭建平台实战教程二:快速实现用户注册和登录9.django-rest-framework搭建平台实战教程一:生成数据库数据10.fastapi搭建平台实战教程三:接口编写及权限校验(前后端分离)11.fastapi搭建平台实战教程四:使用已有数据库编写api接口12.django-rest-framework搭建平台实战教程四-使用fast-crud集成后端权限功能自定义权限校验
重写添加用户接口增加groups字段
class DUserViewSet(CustomViewSet): ... def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) self.perform_create(serializer) serializer.instance.create_user_id = request.user.id serializer.instance.set_password(request.data['password']) serializer.instance.groups.set(request.data['roles']) serializer.instance.save() headers = self.get_success_headers(serializer.data) return Response({ "code": 0, "data": serializer.data },headers=headers) def update(self, request, *args, **kwargs): partial = kwargs.pop('partial', False) instance = self.get_object() serializer = self.get_serializer(instance, data=request.data, partial=partial) serializer.is_valid(raise_exception=True) self.perform_update(serializer) serializer.instance.set_password(request.data['password']) serializer.instance.groups.set(request.data['roles']) serializer.instance.save() if getattr(instance, '_prefetched_objects_cache', None): # If 'prefetch_related' has been applied to a queryset, we need to # forcibly invalidate the prefetch cache on the instance. instance._prefetched_objects_cache = {} return Response({ "code": 0, "data": serializer.data })
请求参数加groups:[id...]就能关联到用户组
请求/permission/接口能查到所有权限id,和codename
1. 视图类校验权限
由于Django REST framework的增删改查接口添加permissions.DjangoModelPermissions来判断用户是否已经拥有相应权限。
class DUserViewSet(CustomViewSet): ... permission_classes = [permissions.IsAuthenticated,permissions.DjangoModelPermissions]
此时请求新增用户和删除用户会提示用户无权限You do not have permission to perform this action.
group视图添加set_permissions方法
... @action(methods=['POST'],detail=True,permission_classes=[permissions.IsAuthenticated]) def set_permissions(self,request: Request, pk=None): if request.user.has_perm("auth.change_permission"): group = Group.objects.filter(id=pk).first() group.permissions.set(request.data["permissions"]) return Response({ "code": 0, "msg": "操作成功" }) else: raise PermissionDenied
根据/permission/接口查到权限id赋予用户接口增删改查权限
再次添加用户接口就能正常响应。
2. 自定义视图校验权限
添加的自定义视图也可以给权限,使用@permission_required这个装饰器。设置了raise_exception=True, 会直接返回403无权限的错误,而不会跳转到登录页面。
views.py添加info接口
... @api_view(['POST']) @permission_classes([permissions.IsAuthenticated])def info(request: Request): user: User = request.user response = Response({ "code": 0,"data": { "id": user.id, "username": user.username, "nickName": user.username } }) return response
urls.py加入路由
path('user/info',views.info),
请求user/info接口就能返回用户信息
至此django用户管理及权限验证的后台接口基本后端框架就完成了,还有一些细节需要自己去改进,然后就是选择前端框架编写前端页面。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现