import secrets
from django.db import models
from django.contrib.auth.models import User # Встроенная модель пользователя Django
class UserToken(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='token')
token = models.CharField(max_length=64, unique=True, blank=True)
def generate_token(self):
self.token = secrets.token_hex(32) # Генерируем безопасный токен
self.save()
return self.token
def __str__(self):
return f'Token for {self.user.username}' # Ответ серверу
from django.contrib.auth.models import User
from rest_framework import serializers
from .models import UserToken
class UserRegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True, min_length=8)
class Meta:
model = User
fields = ['username', 'email', 'password']
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
UserToken.objects.create(user=user) # Создаем токен для пользователя
return user
class UserLoginSerializer(serializers.Serializer):
username = serializers.CharField()
password = serializers.CharField(write_only=True)
def validate(self, data):
from django.contrib.auth import authenticate
user = authenticate(username=data['username'], password=data['password'])
if not user:
raise serializers.ValidationError("Неверные учетные данные")
token, _ = UserToken.objects.get_or_create(user=user)
token.generate_token()
return {'token': token.token}
AUTH_USER_MODEL = 'your_app.CustomUser'
# your_app/forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ...
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = ...