Python 如何在重定向时使用flask将参数传递到HTML表单

Python 如何在重定向时使用flask将参数传递到HTML表单,python,flask,Python,Flask,当使用重定向(url\u for('some End Point'))而不是render\u template()时,我想从flask向HTML表单传递一些参数。我已经访问了这两个问题 但他们都没有我想要的答案。在一些冲浪之后,我确实发现我必须使用session来实现这一点,但问题是我也不知道如何使用它。当我使用此选项时: 返回重定向(url\u for('register',neg\u resp=“Username ready take”) 问题是,我的输出消息确实生成了,但却带有UR

当使用
重定向(url\u for('some End Point'))
而不是
render\u template()
时,我想从flask向HTML表单传递一些参数。我已经访问了这两个问题




  • 但他们都没有我想要的答案。在一些冲浪之后,我确实发现我必须使用
    session
    来实现这一点,但问题是我也不知道如何使用它。当我使用此选项时:
    返回重定向(url\u for('register',neg\u resp=“Username ready take”)

    问题是,我的输出消息确实生成了,但却带有
    URL
    ,因此我的
    jinja模板
    没有收到它。链接从
    120.0.0.1:5000/注册/
    更改为
    120.0.0.1:5000/注册/?=用户名已被使用

    当我这样做时:
    返回重定向(url\u for('register'),neg\u resp=“Username ready take”)

    生成一个错误,
    TypeError:redirect()得到一个意外的关键字参数'neg\u resp'
    这是我的Python代码
#设置注册页面的路由
@app.route('/register/',methods=['GET','POST'])
def寄存器():
#获取表单数据
用户={
“name”:request.form.get('name'),
“email”:request.form.get(“email”),
“用户名”:request.form.get('username'),
“密码”:request.form.get('password'),
“任务”:[]
}
#成功注册后,将数据插入数据库并重定向到登录页面
如果用户['name']!=无:
用户['password']=pbkdf2_sha256.加密(用户['password'])
如果mongo.db.appname.find_one({“username”:user[“username”]}):
返回重定向(url_for('register'),neg_resp=“用户名已获取”)
其他:
mongo.db.appname.insert(用户)
返回重定向(url_for('login',pos_resp=“Registered Successfully”))
返回呈现模板('register.html')
错误
TypeError:redirect()得到一个意外的关键字参数'neg_resp'

这不起作用:

return redirect(url_for('register'), neg_resp="Username Already Taken")
因为它将
neg_resp
作为
redirect
的参数传递,而不是
url_传递给

下面是一个基本示例,说明如何在管线之间传递参数并将参数传递给模板:

@app.route('/first/')
def first():
    return redirect(url_for('second', passed_value='string value'))

@app.route('/second/')
def second():
    passed_value = request.args.get('passed_value')
    return render_template('index.html', val_name=passed_value)

这就是我所尝试的,我制作了一个
全局字典
,并在需要时不断更新它,现在每当我想访问一些值时,我就直接从字典中访问它,并使用
jinja
模板进行渲染。除了此方法之外,还有其他方法,如将数据存储在
flask.session
中,也可以使用
flask.flash()
呈现消息,并在jinja模板中使用
messages.get()
函数访问消息,但问题是,它只提供有限的大小,如果传递的对象或字符串超过该大小,浏览器将忽略该对象或字符串,并且不会显示您的消息,因为传递的消息是以
浏览器cookies
的形式传递的。因此,将它们存储在我的全球词典中对我来说很有用: 下面是我最后一段代码的一小部分,它与我作为问题发布的代码相似:

#全局
信息={
“登录”:False,
'用户':{},
“任务”:[],
“状态”:{
“值”:“,
“肯定”:正确
}
}
def reset():
'''
函数重置信息对象的值
'''
全球信息
信息['logged_in']=False
信息['user']={}
信息['tasks']=[]
信息['status']={
“值”:“,
“肯定”:正确
}
#设置注册页面的路由
@app.route('/register/',methods=['GET','POST'])
def寄存器():
'''
函数将帐户注册到服务器和数据库中
'''
全球信息
#获取表单数据
用户={
“name”:request.form.get('name'),
“email”:request.form.get(“email”),
“用户名”:request.form.get('username'),
“密码”:request.form.get('password'),
“任务”:[]
}
#成功注册后,将数据插入数据库并重定向到登录页面
如果用户['name']!=无:
用户['password']=pbkdf2_sha256.加密(用户['password'])
如果mongo.db.appname.find_one({“username”:user[“username”]}):
信息['status']['value']='Username ready take'
信息['status']['positive']=False
返回重定向(url_for('register'))
其他:
mongo.db.appname.insert(用户)
信息['status']['value']='Registered Successfully'
信息['status']['positive']=True
返回重定向(url_用于('login'))
状态值=信息['status']['value']
积极的状态=信息['status']['positive']
重置()
返回呈现模板('register.html',value=status\u val,positive=positive\u status)

它确实有效,但问题是我正在尝试传递一个列表,我确实先将其转换为字符串,然后再将其转换为列表,但字符串模式也显示为url,您能否告诉我如何删除额外不需要的部分
return render_template('index.html',mylist=vals)
其中vals是列表,而
my_list=request.args.getlist('mylist')
应该做到这一点
render_template
只呈现html网页,它不会改变URL,这就是为什么我们不能使用
request.args.getlist('mylist')
或者
返回重定向(URL\u for('blueprint.route\u name',mylist=vals))
可以工作
redirect()
有效,但问题是,如果您试图发送一个值以重定向,它只会将该值添加到url,我不希望这样,因为它可能还会显示一些安全数据,请参阅我发布的答案,它对我有效