Задать вопрос
@DannYLook
Программист

Как связать custom user с token в django?

есть код который позволяет регистрировать пользователя, логиниться получая token и потом смотреть информацию по токену и выходить с аккаунта. Как мне сделать custom user со своими полями например name, lastname, age? 
Инструкция и код - https://github.com/FlDanyT/my_Django_documentation...
Код:
models.py
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}' # Ответ серверу

serializers.py
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}
  • Вопрос задан
  • 140 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
wukong
@wukong
познавший пустоту
Перво-наперво вам всё-таки нужно создать желаемую модель юзера, унаследовав её от django.contrib.auth.models.AbstractUser.
Эту модель (традиционно назовём её CustomUser) нужно зарегистрировать в settings.py:
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 = ...


Потом это всё регистрируется в админке и готово, можно делать миграции и пользоваться. Главное, чтобы в остальном ваш проект был готов к замене модели юзера. Для этого документация рекомендует не хардкодить модель User, а получать её при помощи get_user_model (полезно читать всё-таки документацию).
Ответ написан
Ваш ответ на вопрос

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

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