Я относительно новичок в Flask
и разработке веб-приложений в целом.
Итак, я создал базовую страницу входа в систему, и у меня есть сеть API
с аутентификацией ldap для аутентификации пользователей в моей организации.
Я пытаюсь отправить результаты формы входа в веб-адрес API
, он принимает 2 параметра: имя пользователя и пароль.
Это мой логин.html:
<link rel = "stylesheet" href = "/static/style.css" type = "text/css">
{% block body %}
<form action = "/login2" method = "POST">
<div class = "login">
<div class = "login-screen">
<div class = "app-title">
<h1>Login</h1>
</div>
<div class = "login-form">
<div class = "control-group">
<input type = "text" class = "login-field" value = "" placeholder = "username" name = "username">
<label class = "login-field-icon fui-user" for = "login-name"></label></div>
<div class = "control-group">
<input type = "password" class = "login-field" value = "" placeholder = "password" name = "password">
<label class = "login-field-icon fui-lock" for = "login-pass"></label></div>
<input type = "submit" value = "Log in" class = "btn btn-primary btn-large btn-block">
</div>
</div>
</div>
</form>
{% endblock %}
И это соответствующий код Flask
:
@app.route('/', methods=['GET', 'POST'])
def home():
return render_template('login.html')
@app.route('/login2', methods=['POST'])
def logger():
if request.method == 'POST':
url = "my url to authenticate"
response = requests.post(url, json = {"username": "myusername","password": "mypassword"}, verify=False)
data = request.get_json()
print(data)
return "Done"
Прямо сейчас я просто пытался протестировать API
, отправив свои действительные учетные данные в API
, но он всегда возвращает None вместо фактического результата, который он должен был вернуть.
Проблема не в API
, потому что он работает на терминале с CURL
.
В идеале я хотел бы отправить данные для входа в API
.
Затем:
API
равен 200
, аутентификация прошла успешноAPI
равен 401
, аутентификация должна завершиться неудачей, и я могу добавить сообщение для этого и перенаправить их обратноПожалуйста помоги ОБНОВЛЯТЬ: Итак, теперь это мой login.html. Я пытаюсь отправить данные формы с помощью JS из login.html. Но я все еще не уверен, как я могу вернуть ответ, а также этот код не дает вывода в консоль, поэтому я не уверен, что я делаю неправильно
<link rel = "stylesheet" href = "/static/style.css" type = "text/css">
{% block body %}
<body>
<form method = "POST" id = "myForm">
<div class = "login">
<div class = "login-screen">
<div class = "app-title">
<h1>Login</h1>
</div>
<div class = "login-form">
<div class = "control-group">
<input type = "text" class = "login-field" value = "" placeholder = "username" name = "username">
<label class = "login-field-icon fui-user" for = "login-name"></label></div>
<div class = "control-group">
<input type = "password" class = "login-field" value = "" placeholder = "password" name = "password">
<label class = "login-field-icon fui-lock" for = "login-pass"></label></div>
<input type = "submit" value = "Log in" class = "btn btn-primary btn-large btn-block">
</div>
</div>
</div>
</form>
<script>
const myForm = document.getElementById('myForm');
myForm.addEventListener('submit', function(e) {
e.preventDefault;
const formData = new FormData(this);
url = "url to authenticate"
response = requests.post(url, json = {"username": "myusername","password": "mypassword"}, verify=False)
data = request.get_json()
console.info(data)
flash(data)
});
</script>
</body>
{% endblock %}
Избавьтесь от второго обновления. В первой версии вашего кода:
response = requests.post(url, json = {"username": "myusername","password": "mypassword"}, verify=False)
data = request.get_json()
print(data)
В этих строках вы отправляете запрос к вашему API авторизации с библиотекой Python под названием requests
, он возвращает ответ в переменную response
. Обратите внимание, что переменная response
содержит информацию, возвращаемую вашим API авторизации (вы вызываете для нее метод call json()
, чтобы получить тело JSON). Однако тогда вы вызываете get_json()
на объекте request
Flask с помощью request.get_json()
вместо вызова response.json()
. Вот почему у тебя всегда есть None
.
Следовательно, вы должны использовать код ниже:
response = requests.post(url, json = {"username": "myusername","password": "mypassword"}, verify=False)
data = response.json()
print(data)
Я разобрался, еще раз большое спасибо!
Это сработало, большое спасибо. Можете ли вы также помочь мне с тем, как я могу использовать фактические данные формы вместо передачи моих переменных для их проверки?