Задать вопрос
dmnBrest
@dmnBrest
Salesforce for money. Python, Go, Ruby for soul.

Как прикрутить авторизация запросов по API key или Token в Django?

Пилю небольшой врутренний web проект на Django. Просто Django, не DRF. Прикручена стандартная работа с пользователями по username/password. Появилась необходимость дать доступ не некоторые url для другого сервиса. Что-то типа мини API. Не хочу заморачиваться с DRF. Но мне нужно как-то прикрутить простую авторизацию запросов по API Key. (токен) Все что гуглится ведет на DRF, а без DRF такое никто не делает? Не хочется колхозить с нуля, я уверен что все уже придумано до меня просто надо уметь гуглить. Буду признателен если поделитесь решением.
  • Вопрос задан
  • 25 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Модель
from django.db import models
from django.contrib.auth.models import User

class APIKey(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    key = models.CharField(max_length=64, unique=True)


Проверка ключа API
from django.http import JsonResponse
from your_app.models import APIKey

def api_key_required(view_func):
    @wraps(view_func)
    def _wrapped_view(request, *args, **kwargs):
        api_key = request.headers.get("X-API-Key")
        if not api_key or not APIKey.objects.filter(key=api_key).exists():
            return JsonResponse({"error": "Unauthorized"}, status=403)
        return view_func(request, *args, **kwargs)
    
    return _wrapped_view


Вью для API
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
@api_key_required
def my_api_view(request):
    return JsonResponse({"message": "Success"})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы