Я веб-разработчик ладьи ie и пытаюсь реализовать приложение Flask + React. В React у меня есть форма, которая запрашивает user_id и пароль. После того, как пользователь вводит необходимые данные, React (Ax ios) отправляет их в мой бэкэнд с функцией updateDoneStatus
, как показано (она вызывает getName
для извлечения полученных данных):
getName = () => {
axios.get('http://127.0.0.1:5000/data')
.then(res => {
const name = res.data['name'];
this.setState({name: name})
}).catch(e => {
console.log(e);
});
updateDoneStatus = () => {
this.setState({done: true})
axios.post("http://127.0.0.1:5000/login",{
data: {
id: this.state.id,
pw: this.state.pw
}
}).catch(e => {
console.log(e);
}).then(this.getName)};
Когда пользователь заполняет форму, моему бэкэнду удается получить отправленные данные и начать просмотр веб-страниц, как показано ниже:
from flask import *
from flask_session.__init__ import Session
import requests
from bs4 import BeautifulSoup
from flask_cors import CORS
import re
app = Flask(__name__)
CORS(app)
app.config['SECRET_KEY'] = 'super secret key'
userID = ""
userPW = ""
@app.route("/login", methods=['POST'])
def getData():
nameArr = []
if request.get_json() != None:
data = request.get_json()
userID = str(data["data"]["id"])
userPW = str(data["data"]["pw"])
login_data = {
'userid' : userID,
'pwd' : userPW,
'Submit' : 'Sign In'
}
with requests.Session() as s:
url = 'SOME URL'
r = s.post(url,data = login_data)
newUrl = 'SOME OTHER URL'
a = s.get(newUrl)
src = a.content
soup = BeautifulSoup(src,features="html.parser")
text = soup.get_text()
nameArr = re.findall("some regex",re.findall("some regex",text)[0])
session.permanent = True
session["name"] = nameArr[0]
session.modified = True
return {'name' : session["name"]}
else:
return {'name' : "it's not saved to session"}
@app.route("/data", methods=['POST', 'GET'])
def sendData():
if "name" in session:
return {'name': session["name"]}
else
return {"name was not in session :("}
Из моих тестов я вижу, что он успешно входит на нужный URL и может получить очищенные данные, поэтому нет проблем с отправкой данных на сервер или веб-очисткой этих данных.
Насколько я понял из документов сессий в Flask, моя реализация должна хранить данные в session["name"]
и сохраняйте его, пока пользователь не закроет браузер. Но всякий раз, когда я хочу отправить данные на мой интерфейс с помощью sendData()
, он всегда печатает «имя не было в сеансе :(», что означает, что он не смог найти ключ «имя» в сеансе.
Некоторые догадки, почему это происходит:
- Сеанс сбрасывается после каждого запроса.
- Может быть, он создает новый сеанс каждый раз, когда я делаю запрос.
- Может быть библиотека «запросы» и Flask «запрос» пересекаются.
Мне кажется, я не совсем понял, как работают сессии, и я не смог найти достаточно информации в Интернете.
Я знаю, что что-то упустил, кто-то может помочь?
Кроме того, я прочитал, что сеанс хранит данные на сервере, есть ли способ сохранить данные в браузере клиентов (например, куки), если так Как вы реализуете такую вещь? Если бы вы могли объяснить это, внедрив ее в свой собственный код, это было бы здорово!
(если вам нужна какая-либо другая информация, пожалуйста, дайте мне знать)
Спасибо