django认证和权限

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',   # 基本认证
        'rest_framework.authentication.SessionAuthentication',  # session认证
    )
}

一、基本认证:所有请求都需要用户名密码

session认证:只有第一次请求需要用户名密码

配置文件中配置全局的认证方案;

视图中可以单独设置authentication_classess属性来设置

from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.views import APIView

class ExampleView(APIView):
    authentication_classes = (SessionAuthentication, BasicAuthentication)
    ...

二、认证失败返回值

  • 401 Unauthorized 未认证
  • 403 Permission Denied 权限被禁止

三、配置只是有认证功能,但是需要在权限中具体指明如何使用

----------------------------------------------------------------------------------------------------------

权限:

  • AllowAny 允许所有用户
  • IsAuthenticated 仅通过认证的用户
  • IsAdminUser 仅管理员用户
  • IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取

可以在配置文件中全局设置权限管理类:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )
}

也可以在视图中设置:

from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView

class ExampleView(APIView):
    permission_classes = (IsAuthenticated,)
    ...
class BookDetailView(RetrieveAPIView):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer
    authentication_classes = [SessionAuthentication]
    permission_classes = [IsAuthenticated]

自定义权限

继承rest_framework.permissions.BasePermission,实现

  • .has_permission(self, request, view)

    是否可以访问视图, view表示当前视图对象

  • .has_object_permission(self, request, view, obj)

    是否可以访问数据对象, view表示当前视图, obj为数据对象

class MyPermission(BasePermission):
    def has_object_permission(self, request, view, obj):
        """控制对obj对象的访问权限,此案例决绝所有对对象的访问"""
        return False

class BookInfoViewSet(ModelViewSet):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer
    permission_classes = [IsAuthenticated, MyPermission]

 

 

 

 

 

 

 

 

 

 

 

 

Django提供了内置的用户认证权限管理功能,可以方便地实现用户注册、登录、注销以及不同用户角色的权限管理。下面是一些常用的Django用户认证权限管理的功能方法: 1. 用户注册: - 创建一个注册视图函数,接收用户提交的注册信息,并进行表单验证。 - 使用Django的内置User模型创建用户,并保存到数据库中。 2. 用户登录: - 创建一个登录视图函数,接收用户提交的登录信息,并进行表单验证。 - 使用Django的`authenticate()`函数验证用户的用户名密码是否匹配。 - 使用Django的`login()`函数将用户登录状态保存到会话中。 3. 用户注销: - 创建一个注销视图函数,调用Django的`logout()`函数注销当前用户。 4. 访问控制: - 使用Django的`@login_required`装饰器,限制只有登录用户才能访问特定页面或执行特定操作。 - 使用Django的`@permission_required`装饰器,限制只有具备特定权限的用户才能访问。 5. 用户角色权限管理: - 使用Django的内置Group模型,创建不同的用户组或角色。 - 将用户添加到相应的用户组中,实现不同权限的分配。 - 使用Django的`@group_required`装饰器,限制只有属于特定用户组的用户才能访问。 6. 自定义权限: - 使用Django的内置Permission模型,创建自定义的权限。 - 将权限分配给用户组或用户。 7. 表单验证: - 使用Django的内置表单验证功能,确保用户输入的数据符合要求。 8. 记住登录状态: - 使用Django的`SESSION_COOKIE_AGE`设置会话cookie的过期时间,以保持用户的登录状态。 以上是一些常用的Django用户认证权限管理的功能方法。通过使用这些功能方法,可以轻松实现用户认证权限管理的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值