Django身份验证和权限

时间:2016-09-14 10:12:18

标签: python django django-rest-framework

我发布了关于Django身份验证和权限的问题,即使它已经存在。我的问题是,

我有一个后端准备好了DRF的很多视图,模型和序列化器。现在我想对我的应用程序应用身份验证并创建在前端使用的RESTful api。所以我有疑虑

  • 身份验证如何运作? Django是否为每个用户创建了不同的模型表?
  • 如果是这样,我如何从Django中检索每个用户的数据?

现在是第二个案例

  • 如果上述两项都属实,那么我如何在DRF中使用权限仅提供与特定用户相关的数据?

我希望我的问题很明确。如果没有,建议我编辑。 我还想了解一下如何发生的一些例子(如果有的话)。

此外,如果您想查看original post

2 个答案:

答案 0 :(得分:0)

Django使用表auth_user来保存用户和密码

Django有一个用于检查is_authenticated

的API

Django rest框架使用表authtoken_token

Django rest框架具有用于相同目的的API rest_framework.authtoken.views.obtain_auth_token

在DRF中,对于权限,您可以执行以下操作..

class UserDetail(generics.RetrieveUpdateDestroyAPIView):
    """
    User Detail API
    """
    permission_classes = ("check_permission1", "check_permission2",) ### you can define your permissions using this

答案 1 :(得分:0)

  

身份验证如何运作? Django是否为每个用户创建了不同的模型表?

不,Django不会为每个用户创建不同的模型表。用户本身存储为User - 模型中的条目。因此,要为每个用户提供数据,您必须在数据模型中向特定用户添加外键。

class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL)
    text = models.TextField()

因此,一旦您的用户登录(已通过身份验证),您只需根据登录用户过滤后模型。 在DRF中,您可以使用权限进行此过滤:

class PostList(generics.ListCreateAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
    permission_classes = (IsOwner,)


class IsOwner(permissions.BasePermission):
    """
    Custom permission to only allow owners of an object to see it.
    """

    def has_object_permission(self, request, view, obj):
        return obj.author == request.user

我希望这会有所帮助