Я хочу поместить базовую HTTP-аутентификацию где-нибудь в свой код, если выполняется определенное условие. Условие является параметром запроса. Чтобы упростить, скажем, я хочу, чтобы это было в представлении Django.
Я знаю, как это сделать на PHP. Это кусок кода, который делает именно то, что я хочу:
if (isset($_REQUEST['key']) && $_REQUEST['key'] === 'value') {
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
}
Я могу поместить этот кусок кода в любое место моего PHP-скрипта, и когда выполнение достигнет этих строк, будет запрошена аутентификация. Если аутентификация не удалась, выполнение скрипта остановится, и вместе с указанным сообщением будет отправлен заголовок 401 Unauthorized. Это то, что я хочу в Python/Django. Вот кусок кода, помогите мне его заполнить:
def some_view(request):
if request.REQUEST.get('key') == 'value':
# FILL ME IN
Что я хочу:
- чтобы иметь возможность поместить этот фрагмент в код в любом месте кода и потребовать аутентификации от пользователя (предположим, что переменная запроса доступна мне, экземпляр django.http.response.HttpResponse также в качестве ответа)
- чтобы иметь возможность указать условие, при котором будет запрашиваться аутентификация (например, наличие параметра в запросе)
- остановить дальнейшее выполнение, если пользователь предоставит неверные учетные данные, и вернуть ответ 401 Unauthorized
- чтобы решение было переносимым (скопируйте/вставьте фрагмент кода в другое место, и аутентификация будет запущена там, как только до него дойдет выполнение)
Чего я НЕ хочу:
- иметь жестко закодированное требование аутентификации при вызове функции (с помощью декоратора)
- изменить любые глобальные настройки моего веб-приложения
- чтобы изменить что-либо еще за пределами части кода, я хочу, чтобы моя аутентификация запускалась
- чтобы для этого были установлены какие-либо дополнительные пакеты
- совместно использовать учетные данные этой аутентификации со стандартной аутентификацией для доступа к CMS, уже настроенной в приложении