Python flask return javascript 变量和重定向页面

Python flask return javascript variable and redirect page

我正在使用登录脚本在我的 Web 应用程序上启用额外的身份验证。身份验证脚本正在 JavaScript 中编写并使用 flask 嵌入 python。

登录脚本,对用户进行身份验证,并在成功时输出和 ID。

我想在我的 python 后端使用返回到 Javascript 函数的 ID。此外,如果身份验证成功,我想将用户重定向到根页面。

我搜索了这个论坛并在谷歌上搜索了如何使用 javascript 或 jQuery 执行此操作。到目前为止,我确实设法通过 POST 请求将 ID 发送到后端。不知道这是否是最佳做法,感觉有点老套。

另外,当我重定向请求时,我在我的 python 控制台中看到 GET 请求,但页面没有在我的浏览器中重定向。我认为这是因为 Javascript 或 jQuery.

main.py

from flask import Flask, request, render_template, redirect, url_for

app = Flask(__name__, template_folder='/templates', static_folder='/static')

@app.route("/login", methods=['GET', 'POST'])
def login():
    print(request.data)
    if request.method == 'POST':
        response = request.get_json()
        print(response['userwid'])
        return redirect('/')
    else:
        return render_template('login.html')

@app.route("/", methods=['GET', 'POST'])
def loggedin():
    print('User is logged in')
    return render_template('index.html')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug = True)

login.html

<!-- login.html -->

<!DOCTYPE html>
<html>
  <head>
    <title>Login</title>
    <script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>
    <script src="https://unpkg.com/moralis/dist/moralis.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  </head>

  <body>
     
    <button id="btn-login">Login</button>
    <button id="btn-logout">Logout</button>
    <script type="text/javascript" src="/static/main.js"></script>
  </body>
</html>

main.js

// main.js

const serverUrl = "REPLACED-THIS-PART";
const appId = "REPLACED-THIS-PART";
Moralis.start({ serverUrl, appId });

/** Add from here down */
async function login() {
  let user = Moralis.User.current();
  if (!user) {
   try {
      user = await Moralis.authenticate({ signingMessage: "Authenticating" })
      console.log(user)
      console.log(user.get('useracc'))
      userwid= {'useracc': user.get('useracc')}

      $.ajax({
        type: "POST",
        url: "/login",
        data: JSON.stringify(userwid),
        contentType: "application/json",
        dataType: 'json',
      });
   } catch(error) {
     console.log(error)
   }
  }
}


async function logOut() {
  await Moralis.User.logOut();
  console.log("logged out");
}

document.getElementById("btn-login").onclick = login;
document.getElementById("btn-logout").onclick = logOut;

从技术上讲,您可以在成功登录后导航到类似 /login/userid?id=12345 的路由,其中​​ 12345 是用户 ID。

在你的 flask 后端,你使用 id = request.args.to_dict().get("id") 获取 id,使用 return redirect("/") 获取重定向 return。 (关于使用 flask 重定向的信息:https://pythonbasics.org/flask-redirect-and-errors/

我不知道,这是否是最佳做法,但这就是我要做的。