Flask中非ASCII URL路由问题:含#及俄语字符的路由实现
解决Flask中含#符号及俄语词汇的URL路由问题
嘿,我来帮你搞定这个问题!你遇到的问题主要有两个核心点:#符号在URL中的特殊行为,以及俄语字符的路由匹配处理,咱们一步步拆解解决:
1. 先搞清楚#符号的坑
浏览器会把URL里的#当作「片段标识符」,这部分内容是不会发送给服务器的!也就是说,如果你直接在地址栏输入/hashtags/#привет,Flask后端根本收不到#привет这串内容——浏览器只把/hashtags/发给了服务器。
解决办法很直接:把#编码成URL转义字符%23,这样浏览器就会把它当作路径的一部分发送给服务器。比如访问/hashtags/%23привет,后端就能完整接收到#привет了。
2. 修正Flask路由的写法
你原来的路由写法有点绕,其实Flask原生就支持处理非ASCII字符的路由变量,只要用正确的变量规则定义就行。推荐用两种规则:
<string:names>:默认匹配除了/之外的所有字符,完全适配你的hashtag场景<path:names>:如果你的hashtag里可能包含/,就用这个,它能匹配带/的完整路径
修改后的完整代码如下:
# -*- coding: utf-8 -*- from flask import Flask, jsonify app = Flask(__name__) @app.route('/hashtags/<string:names>', methods=['GET']) def get_hashtags(names): # 这里可以直接处理接收到的内容,比如返回给前端确认 return jsonify({"received_hashtag": names}) if __name__ == '__main__': app.run(debug=True)
3. 测试验证
启动Flask服务后,在浏览器访问:http://localhost:5000/hashtags/%23привет
或者http://localhost:5000/hashtags/%23ПомогитеМнеПожалуйста
你会看到返回的JSON里包含了你发送的完整hashtag,包括#和俄语词汇,完全符合预期。
额外小提示
如果是通过前端页面跳转或发送请求,记得用encodeURIComponent()(JavaScript)把#编码成%23,不用手动输入转义字符,前端会自动处理好~
内容的提问来源于stack exchange,提问作者ksusha
相关产品推荐
相关产品推荐

