Рама Djnago Rest работа на заказ аутентификация

Я новичок в DRF. У меня есть приложение django и мой проект должен создать rest api для приложения. Внутри приложения у меня есть модель для создания пользователей api и пароля. Модель выглядит следующим образом,

class APIManger(models.Model):
    id = models.BigAutoField(primary_key=True)
    user = models.CharField(max_length=50, unique=True, verbose_name='API Name')
    apiuid = models.CharField(max_length=128, default=None, blank=True, null=True, verbose_name='API ID')
    password = models.CharField(max_length=128, default=None, blank=True, null=True, verbose_name='API Password')
    REQUIRED_FIELDS = ['user']   
    class Meta:
        managed = True
        db_table = 'adminapi'
        verbose_name_plural = "Admin API"

    def get_name(self):
        return self.user
   
    def __str__(self):
        return self.user

    def __unicode__(self):
        return self.user

Теперь я настраиваю работу остального фрейма следующим образом,

authentication.py

from rest_framework import authentication
from rest_framework import exceptions
from myapp.models.adminapi import APIManger
class APIUser(authentication.BaseAuthentication):
    def authenticate(self, request):        
        username = request.data.get('username', None)
        password = request.data.get('password', None)        

        if not username or not  password:
            return None               
        try:
            user=APIManger.objects.get(apiuid=username)
        except Exception:
            raise exceptions.AuthenticationFailed('No such user')
        return (user, None)

views.py выглядит следующим образом,

from .authentication import APIUser
class LoginView(APIView):
    authentication_classes = (APIUser,)   
    def post(self, request, format=None):               
        content = {
            'username': str(request.user),
            'auth': str(request.auth),  # None
        }
        return Response(content)

Settings.py выглядит следующим образом,

REST_FRAMEWORK = {   
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'api.authentication.APIUser',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}

Теперь мой AIM должен аутентифицироваться по модели APIManger для остального API. У меня есть другая модель пользователя для основного приложения. Я не хочу использовать модели пользователей основного приложения для остальных API. Как я могу реализовать правильную аутентификацию для остального API, чтобы использовать apiuid и пароль для проверки логинов DRF. Это первый раз, когда я использую этот API фреймворк, я немного потерялся

Вернуться на верх