Weryfikacja numeru telefonu w formularzu Django

0

Mam zwykły model form w Django:


class UserProfile(forms.ModelForm):
    class Meta:
        fields = ['name', 'description', 'mobile_phone']

w szablonie normalnie:

...
{{ form|crispy }}
...

Jak zrobić weryfikację, czy dany numer telefonu należy do osoby która go wpisuje?

Mogę użyć Nexmo Verify: https://github.com/Nexmo/nexmo-python#verify-api ale jak to zrobić od strony UI?

  1. Jeśli numer nie zostanie potwierdzony kodem z SMS to user powinien mieć zablokowaną możliwość zapisania formularza / wyświetlony validation error message
  2. Formularz jest na stronie /profile/update/ więc jeśli user już raz potwierdzi dany numer to kolejnym razem powinien móc zapisać formularz bez weryfikacji o ile nie zmieni numeru na inny, a edytuje inne dane.

Będę wdzięczny za wszelkie sugestie i jakiś optymalny "plan" jak to rozwiązać.

1

Ja bym to zrobił w sposób następujący:

  1. Dorzucił dodatkowe pole do modelu usera: phone_confirmed, z default = False
  2. Na /profile/update/ w szablonie wrzucił kod w stylu:
{% if request.user.phone_confirmed %}
    {{ form|crispy }}
{% else %}
   To edit your account you first need to confirm you phone number. You can do that <a href=""> here. </a>
{% endif %}

Przy czym ten link z here. przekierowywałby do innego widoku. Tam znowu: foremka z numerem telefonu i tam robisz cały flow z tym związany - zależnie od biblioteki. Jeśłi się uda -> zmień phone_confirmed na True

Szybki edit: to rozwiązanie, które ci zaproponowałem, jest trochę nieczyste. Najlepiej by było żebyś wyświetlał dwa różne szablony - dynamicznie je wybierał w widoku, bo ogółem umieszczanie logiki w szablonach to zło.
Edit2: z tego co pamiętam to powinna cię zainteresować metoda get_template_names() z TemplateView/FormView, coś takiego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1