Для реализации авторизации запросов с использованием API ключа или токена в Django без использования Django Rest Framework (DRF), вы можете самостоятельно создать middleware или использовать декораторы для проверки токена. Вот простой подход, который можно реализовать:
### Шаг 1: Создайте модель для хранения API ключей
Сначала создайте модель, которая будет хранить ваши API ключи. Например:
```python
# models.py
from django.db import models
class APIKey(models.Model):
key = models.CharField(max_length=40, unique=True)
created_at = models.DateTimeField(auto_now_add=True)
```
### Шаг 2: Создайте ключи в базе данных
Сгенерируйте пару ключей (например, UUID) и добавьте их в вашу базу данных:
```python
import uuid
from myapp.models import APIKey
key = uuid.uuid4().hex
APIKey.objects.create(key=key)
print(key) # Сохраняйте этот ключ, чтобы использовать в запросах
```
### Шаг 3: Создайте middleware
Создайте middleware для проверки токена на каждом запросе:
```python
# middleware.py
from django.http import JsonResponse
from myapp.models import APIKey
class APIKeyMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
api_key = request.META.get('HTTP_X_API_KEY')
if not api_key or not APIKey.objects.filter(key=api_key).exists():
return JsonResponse({'error': 'Unauthorized'}, status=401)
response = self.get_response(request)
return response
```
### Шаг 4: Добавьте middleware в проект
Зарегистрируйте ваше middleware в настройках Django:
```python
# settings.py
MIDDLEWARE = [
...
'myapp.middleware.APIKeyMiddleware',
...
]
```
### Шаг 5: Защита ваших представлений (views)
Теперь создайте представления, которые будут защищены авторизацией. Просто используйте их в любом URL-шаблоне:
```python
# views.py
from django.http import JsonResponse
def my_protected_view(request):
data = {'message': 'Success! You have access.'}
return JsonResponse(data)
```
### Шаг 6: Настройка URL
Теперь настройте ваш URL для этого представления:
```python
# urls.py
from django.urls import path
from myapp.views import my_protected_view
urlpatterns = [
path('api/protected/', my_protected_view, name='protected_view'),
]
```
### Шаг 7: Использование API
Теперь любой запрос к вашему защищенному представлению должен включать заголовок `X-API-KEY`:
```bash
curl -H "X-API-KEY: ваш_ключ_здесь" http://localhost:8000/api/protected/
```
### Дополнительные рекомендации
1. **Безопасность:** Убедитесь, что ваши API ключи достаточно сложные и невозможно их угадать.
2. **Логирование:** Рассмотрите возможность логирования запросов для ведения учета их использования.
3. **Ограничение доступов:** Вы можете добавить дополнительные уровни контроля доступа, например, привязывая ключи к конкретным пользователям или IP-адресам.
Таким образом, вы можете реализовать простую авторизацию с помощью API ключей в Django без использования Django Rest Framework.