Li FRANK 2024-02-22 15:23 采纳率: 68.9%
浏览 5
已结题

Flask验证后转URL出错如何处理?

代码如下:

@app.route('/pass',methods=['GET','POST'])
def login_pass():
   #省略部分代码
  #存储数据库信息的列表:
  #usernames存储所有用户名
  #passwords存储所有密码
  #messages 存储所有信息
  #write_codes存储所有修改码,在用户修改信息时系统做检验用
            for i in range(len(usernames)):
                if usernames[i]==pass_username and passwords[i]==pass_password:
                    if request.method=='GET':
                        href_username=usernames[i]
                        href_write_code=write_codes[i]
                        return redirect(url_for('write',username=href_username,write_code=href_write_code))
                    return render_template('read.html',message=messages[i])
        return render_template('pass.html')

@app.route('/write/<username>/<write_code>')
def write(username,write_code):
   #省略部分代码,含义与login_pass相同
    for i in range(len(usernames)):
        if usernames[i]==username and write_codes[i]==write_code:
            return render_template('write.html',messages=messages[i])

为什么当浏览器返回GET时,后端没有转进/write/……/……,而是/pass?,如何解决?谢谢

  • 写回答

2条回答 默认 最新

  • GISer Liu 2024-02-22 15:57
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    问题的根本在于在处理GET请求时没有正确跳转到/write/<username>/<write_code>这个路由,而是跳转到了/pass路由。这是因为在login_pass函数中,在处理GET请求时,没有指定正确的路由,导致跳转错误。

    解决这个问题的方法是,在login_pass函数中,明确指定跳转的路由为write路由,并将usernamewrite_code参数传递给该路由。具体代码修改如下:

    from flask import redirect, url_for, request
    
    @app.route('/pass', methods=['GET', 'POST'])
    def login_pass():
        # 省略部分代码
        # 存储数据库信息的列表:
        # usernames存储所有用户名
        # passwords存储所有密码
        # messages 存储所有信息
        # write_codes存储所有修改码,在用户修改信息时系统做检验用
        
        for i in range(len(usernames)):
            if usernames[i] == pass_username and passwords[i] == pass_password:
                if request.method == 'GET':
                    href_username = usernames[i]
                    href_write_code = write_codes[i]
                    return redirect(url_for('write', username=href_username, write_code=href_write_code))
                return render_template('read.html', message=messages[i])
        
        return render_template('pass.html')
    

    在这个修改后的代码中,当处理GET请求时,使用redirect函数跳转到write路由,并传递usernamewrite_code参数。这样就可以正确地跳转到/write/<username>/<write_code>这个路由了。

    通过这样的修改,就能够解决浏览器返回GET请求时后端没有正确跳转的问题。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月26日
  • 创建了问题 2月22日

悬赏问题

  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析
  • ¥200 sqlite3数据库设置用户名和密码
  • ¥15 AutoDL无法使用docker install吗?
  • ¥15 cups交叉编译后移植到tina sdk的t113,只需要实现usb驱动打印机,打印pdf文件