Вызов команды управления сторонним пакетом из представления 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