Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django自定义身份验证_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django自定义身份验证

Python Django自定义身份验证,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在我的应用程序中使用Django REST框架。我需要身份验证,但不是默认身份验证。我有一个模型: class Worker(models.Model): token = models.CharField(...) ip = models.GenericIPAddressField(...) created_date = models.DateTimeField(...) last_update = models.DateTimeField(...) Wor

我正在我的应用程序中使用Django REST框架。我需要身份验证,但不是默认身份验证。我有一个模型:

class Worker(models.Model):
    token = models.CharField(...)
    ip = models.GenericIPAddressField(...)
    created_date = models.DateTimeField(...)
    last_update = models.DateTimeField(...)
Worker通过MyAPI发送消息以查看WorkerView,WorkerView继承自Django REST框架的APIView。在请求的标头中发送令牌:

class WorkerView(APIView):
    def post(self, request):
        # some not important code
我有一个验证方法:

def authenticate(request):
    try:
        ip = request.META.get("REMOTE_ADDR", None)
        token = request.META.get("HTTP_AUTHORIZATION", None)
    ...
我考虑了两种解决方案:

  • 创建一个mixin类并在my WorkerView中继承它:

    class WorkerView(AuthenticationMixin, APIView)
        ...
    
  • 从我的authenticate方法生成一个类装饰器,并按如下方式使用它:

    @authenticate
    class WorkerView(APIView)
    
  • 但在这两种情况下,我都需要将请求参数传递给authenticate方法。
    怎么做?或者可能有更好的解决方案来解决我的问题?

    为什么不按照这里的定义创建一个自定义身份验证类?

    因为我需要将使用登录/密码登录的用户和使用令牌登录的用户分开。我不想破坏/扩展用户模型。相反,我想授权我的模型对象,而不是用户对象。我知道,我使用了自定义身份验证。如果我想用的话,我不会问。我看这里没有问题。您可以一次使用任意多个身份验证类,创建自定义身份验证类是完成任务的好方法。