来自ajaxtowards flask的发布请求后页面未呈现

Posted

技术标签:

【中文标题】来自ajaxtowards flask的发布请求后页面未呈现【英文标题】:page is not rendering after post request from ajaxtowards flask 【发布时间】:2021-09-26 04:26:23 【问题描述】:

我正在使用 FLASK + Ajax 制作登录页面。如果用户名和密码正确,它应该重定向到另一个页面。

我做了一个表格。并且请求成功通过。我可以在 python ( flask ) 中捕获数据。但我的问题是渲染页面后没有发生重定向。使用渲染模板

这里是在请求root url时重定向到登录页面

@app.route('/')
def OperationPage():
    log_screenprint('User Has Requested / URL >> Redirect to /login')
    return  redirect(url_for('page_login'))

这是验证用户名和密码的功能。那么它应该重定向到下一页

@app.route('/login' , methods=["POST","GET"])
def page_login() :
    log_screenprint('Got Request From GUI User to login With Cred.')

    for key,value in securityFile.items() :
        dbUser = securityFile[key]['username']
        dbpass = securityFile[key]['defaultpass']

        username = request.form.get('username')
        password = request.form.get('password')
        sessionId = request.form.get('session')

        if dbUser == username :
            if dbpass == password :
                socketio.emit('userDb' , json.dumps(securityFile[key]) , session = sessionId)
                return render_template('/index.html' ,  title= 'Home Page')

    return render_template('/login.html')

这是我在 javascript 中使用的请求。

  $('#login-form').submit(function (e) 
  e.preventDefault();
  var username = document.querySelector('.login-username').value
  var password = document.querySelector('.login-password').value
    $.ajax(
      url: '/login',
      data: 
              username: username,
              password: password,
              session : (socket.id),
          ,
        type: 'POST',
        success: function (response) 
          console.log('response');
        ,
        error: function (error) 
          console.log(error);
        
      );
  );

这个问题又来了。甚至是正确的用户名和密码。 index.html 没有呈现

【问题讨论】:

您应该将标签从 java 更改为 javascript 【参考方案1】:

在使用 ajax 时,您负责处理服务器响应。服务器返回的响应是您需要向用户显示的 html 网页(index.html)。在您的情况下,您只是向网页控制台打印单词“响应”:

success: function (response) 
  console.log('response');
,

我建议以其他方式进行。我会创建另一条路线:

@app.route('/index')
def index():
    return render_template('/index.html' ,  title= 'Home Page')

并在服务器响应成功时将用户重定向到它。

success: function (response) 
  window.location.replace('index')
,

它还需要对auhtentication 功能进行一些更改,因为您的服务器每次都返回成功的http 代码。你可以使用类似的东西:

return "", 200

成功登录,并且

return "", 401

失败。

【讨论】:

以上是关于来自ajaxtowards flask的发布请求后页面未呈现的主要内容,如果未能解决你的问题,请参考以下文章

无法使用来自axios请求的request.form在flask api中获取请求正文[重复]

来自 HTML 表单的 Flask 请求返回无值,我该怎么办?

Flask学习-Flask请求处理过程

Flask 和 Werkzeug:使用自定义标头测试发布请求

没有收到来自 Flask 后端的 React-Native 前端

架构 Flask 与 FastAPI