我有這樣的代碼,運行得很好(前端還沒有想好,但它完成了注冊用戶和更新資料庫的作業)
export default class apiservice {
static RegisterUser(username, email, password, base_city, about_me) {
return fetch(`/register`, {
'method': 'POST',
mode: 'cors',
headers: {
'Content-Type':'application/json'。
},
body: JSON.stringify(username, email, password)
})
.then(resp => window。 location.href = "login")
.catch(span class="hljs-params">error => console. log(error, "Not In the APIService")
}
從app.py中
@app.route("/register", methods=['POST'/span>])
def register():
username = request.json['username']
電子郵件 = request.json['email']
密碼 = request.json['password']
base_city = request.json['base_city']
about_me = request.json['about_me']
hashed_password = bcrypt.generate_password_hash(password)
user = User(username=用戶名, email=email, password=hashed_password, base_city=base_city, about_me=about_me)
db.session.add(user)
db.session.commit()
我的理解是,我在RegisterUser函式中傳遞了一堆資訊,它將這些資訊轉化為JSON格式,然后在后端將這些資訊上傳到資料庫中。
在我遇到問題的下一個函式中,我想根據輸入的用戶名和密碼來登錄用戶:
const logitin = async({ username, password })=> {
try {
await fetch(`/userlookup`, {
method: "POST"。
mode: "cors",
headers: {
"Content-Type": "application/json"。
},
body: JSON.stringify(用戶名,密碼)。
});
return console.log('logitin'/span>, username, password);
} catch (error) {
console.log("錯誤時間!", username, password)。
return false。
}
};
logitin({username, password})
我認為這是把用戶名和密碼,做成一個JSON物件,并在我的app.py中把它送到這里:
@app. route("/userlookup", methods=['GET','POST'))
def userlookup()。
username = request.json['username']
password = request.json['password']
hashed_password = bcrypt.generate_password_hash(password)
user = User.query.filter_by(username=用戶名).first()
print(username)
if user and bcrypt.check_password_hash(user.password, password):
print('youre in')
login_user(user)
return用戶名
else:
print('tripped')
在這里,我希望它從JSON物件中獲取username和password項,并將它們分別分配給username和password變數,最終檢查這兩個變數是否在資料庫中。
當我運行這個程式時,我得到了這樣的錯誤:
File "/home/ionic_apps/pobblebonk/backend/app. py", line 136, inuserlookup
username = request.json['username']
TypeError: 字串索引必須是整數
我很困惑,因為它似乎沒有得到username = request.json['username']一行,而我在/register路由中使用了完全相同的語法,它似乎理解這一點。 知道這是為什么嗎?
編輯:
包括完整的跟蹤記錄
127.0.0。 1 - - [16/Sep/2021 09:07:47] "POST /userlookup HTTP/1.1" 500 -
回溯(最近一次呼叫)。
檔案 "/home/ionic_apps/pobblebonk/venv/lib/python3.8/Site-packages/flask/app. py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
檔案 "/home/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app. py", line 2450, in wsgi_app
回應 = self.handle_exception(e)
檔案 "/home/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask_cors/extension. py", line 165, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs) ))
檔案 "/home/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app. py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
檔案 "/home/ionic_apps/pobblebonk/venv/lib/python3.8/Site-packages/flask/_compat. py", line 39, in reraise
加注值
檔案 "/home/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app"。 py", line 2447, in wsgi_app
回應 = self.full_dispatch_request()
檔案 "/home/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app. py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
檔案 "/home/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask_cors/extension. py", line 165, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs) ))
檔案 "/home/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app. py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
檔案 "/home/ionic_apps/pobblebonk/venv/lib/python3.8/Site-packages/flask/_compat. py", line 39, in reraise
加注值
檔案 "/home/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app"。 py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
檔案 "/home/ionic_apps/pobblebonk/venv/lib/python3.8/Site-packages/flask/app. py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)。
檔案 "/home/ionic_apps/pobblebonk/backend/app.py", 線 136, in userlookup
username = request.json['username']
TypeError: 字串索引必須是整數
uj5u.com熱心網友回復:
老實說,不知道為什么你的注冊路線可以作業,但你需要為你的JSON.stringify創建一個單一的物件,就像下面這樣:
static RegisterUser(用戶名,電子郵件,密碼,base_city, about_me) {
return fetch(`/register`, {
'method': 'POST',
mode: 'cors',
headers: {
'Content-Type':'application/json'。
},
body: JSON.stringify({ username, email, password })
})
.then(resp => window。 location.href = "login")
.catch(span class="hljs-params">error => console. log(error, "Not In the APIService")
}
和登錄
const logitin = async ({ username, password })=> {
try {
await fetch(`/userlookup`, {
method: "POST"。
mode: "cors",
headers: {
"Content-Type": "application/json"。
},
body: JSON.stringify({ username, password })。
});
return console.log('logitin'/span>, username, password)。
} catch (error) {
console.log("錯誤時間!", username, password)。
return false。
}
};
logitin({username, password})
否則,你的JSON將是一個單一的字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/316984.html
標籤:
