Вызов команды управления сторонним пакетом из представления Django

В настоящее время я использую пакет 'django-two-factor-authentication' в своем проекте Django и вижу команды управления здесь (https://django-two-factor-auth.readthedocs.io/en/1.14.0/management-commands.html)

Мой клиент хотел бы иметь специальное сообщение для пользователей, которые не включили двухфакторную аутентификацию. Как мне вызвать это сообщение из представления, чтобы проверить их статус?

Я уже пробовал:

from django.core.management import call_command
authed = call_command('two_factor_status fake_email@gmail.com')
print('authed response')
print(authed)

но я получаю сообщение об ошибке, говорящее, что это неизвестная команда. Если я не указываю email, страница не падает, и я не получаю ошибку, но выводится "None".

***Update С помощью этого специального пакета вы можете проверить, включил ли пользователь двухфакторную аутентификацию с

request.user.is_verified

Я все еще хотел бы знать, есть ли способ вызывать команды управления из представления, когда они из стороннего пакета, хотя.

Вы должны разделить команду и аргументы. Обратите внимание, что вы получите только значение, которое возвращает метод handle() команды, если таковое имеется, а не вывод, который будет напечатан, если вы выполните команду.

from django.core.management import call_command
call_command('two_factor_status', 'fake_email@gmail.com')

Я бы рекомендовал не вызывать команду, а использовать логику непосредственно в представлении. Это снижает накладные расходы и позволяет более детально обрабатывать ответ.

from django.contrib.auth import get_user_model
from two_factor.utils import default_device

def your_view(request):
    # ... your code
    user = User.objects.get_by_natural_key(username)
    if default_device(user):
        # 2FA enabled
    else:
        # 2FA not enabled
Вернуться на верх