Я создаю сервер с пользовательскими страницами регистрации, используя rest и django (последние версии).
У меня есть 3 обязательных поля (уникальное имя пользователя, уникальный номер телефона, пароль) и 1 необязательное.
Схема это:
Пользователь отправляет номер телефона на сервер, мы проверяем, существует ли пользователь, а если нет - запрашивают регистрацию. В обоих случаях я хочу отправить токен и user_id в качестве ответа, если учетные данные верны.
Темы 2016 года не работают в моем случае, я думаю, из-за последних обновлений Framework и Python.
Вот что у меня сейчас в view.py
:
class RegisterView(APIView):
renderer_classes = [renderers.JSONRenderer]
def post(self, request):
phone = request.POST.get('phone')
username = request.POST.get('username')
password = request.POST.get('password')
name = request.POST.get('name', '')
try:
ChatUser.objects.create_user(username, phone, password, name)
return Response({'success': True, 'token': """THERE SHOULD BE TOKEN"""})
except Exception:
return Response({'success': False})
class CheckPhone(APIView): # works fine
renderer_classes = [renderers.JSONRenderer]
def post(self, request):
phone_number = request.POST.get('phone_number')
try:
User.objects.get(phone=phone_number)
return Response("""asks for login""")
except User.DoesNotExist:
return Response("""asks for registration""")
models.py
:
class ChatUserManager(BaseUserManager):
"""Define a model manager for User model with no username field."""
use_in_migrations = True
def _create_user(self, username, phone, password, name, **extra_fields):
"""Create and save a User with the given phone and password."""
if not phone:
raise ValueError('The given phone must be set')
if not username:
raise ValueError('The given username must be set')
username = self.model.normalize_username(username)
user = self.model(phone=phone, username=username, name=name, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return username
def create_user(self, username, phone, password, name, **extra_fields):
"""Create and save a regular User with the given phone and password."""
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_superuser', False)
return self._create_user(username, phone, password, name, **extra_fields)
class ChatUser(AbstractUser):
REQUIRED_FIELDS = ['phone', 'name']
groups = models.ManyToManyField(
Group,
verbose_name=_('groups'),
blank=True,
help_text=_(
'The groups this user belongs to. A user will get all permissions '
'granted to each of their groups.'
),
related_name="chatuser_set",
related_query_name="user",
)
user_permissions = models.ManyToManyField(
Permission,
verbose_name=_('user permissions'),
blank=True,
help_text=_('Specific permissions for this user.'),
related_name="chatuser_set",
related_query_name="user",
)
username = models.CharField(_('username'), max_length=25, unique=True)
phone_regex = RegexValidator(regex=r'^\+?7?\d{9,15}$', message="Phone number must be entered in the format: '+71234567890'. Up to 15 digits allowed.")
phone = models.CharField(_('phone_number'), validators=[phone_regex], max_length=17, unique=True) # validators should be a list
name = models.CharField(_('name'), max_length=30, blank=True)
USERNAME_FIELD = 'username'
objects = ChatUserManager()
Итак, как я могу получить токен и user_id в этих случаях, а также я что-то пропустил при создании пользовательских моделей?