【发布时间】:2024-04-19 01:25:05
【问题描述】:
首先,我的代码。
HTML
<form action= "/" onSubmit= "return validate(this);" method= "post">
<!--irrelevant from this point-->
Javascript,在文件后面
<script language= "JavaScript">
function validate(form){
if(form.text_box.value == ""){
alert("Please enter something");
return false;
}
search_string = form.text_box.value;
var encoded = encodeURIComponent(search_string).replace(/%20/g,'+');
form.action = "/search_results/" + encoded;
return true;
}
</script>
最后,python/flask 后端。
@maverick.route('/search_results/<search>', methods= ['GET', 'POST'])
def generateSearchResults(search = None):
search_string = urllib.unquote_plus(search)
为了解释,我试图在将字符串放入我的 url 之前引用它,因为该字符串将包含斜杠。但是,当我进行搜索时,页面没有加载,我看到这是 url 栏。
http://localhost:7666/search_results/%2Fthis%2Fis%2Fmy%2Fsearch
有人发现我的设置有什么问题吗?
【问题讨论】:
-
它可能不起作用,因为 Flask 在将 URL 映射到视图之前在内部取消引用 URL,并且
/阻止它被映射到您的视图。您可以在 JS 中对字符串进行两次编码,然后在服务器端将其解码两次。或者,如何将字符串作为 URL 查询参数传递,例如?q=this/is/my/search? -
试过查询参数的事情。不幸的是没有工作
-
另外,当我尝试编码两次时,我只是在 url 栏中看到了两次编码的版本。
-
对它进行两次编码对我来说有效(烧瓶服务于页面)。你能确认
/search/%252Fthis%252Fis%252Fmy%252FsearchURL 没有打开吗?另外,我在服务器端解码两次是错误的。 Flask 会自动解码一次,然后你必须再解码一次。 -
要使查询字符串起作用,您需要从 url 模式中删除
/<search>,然后打开/search?q=this/is/my/search。我很快会以详细的方式将其作为答案发布。
标签: javascript python flask urllib encodeuricomponent