Django表单输入带空格城市时URL缺下划线,出现InvalidURL错误求助
问题原因
URL规范禁止直接出现空格、中文、&等特殊字符,你直接将用户输入的未编码城市名拼接到请求URL中,才会触发该报错。
修复方案
方案一:基于现有urllib写法修复(无需额外安装依赖)
- 首先导入urllib的编码模块:
import urllib.parse
- 替换你原有的URL拼接+请求代码,修改为如下内容:
# 统一构造查询参数字典 query_params = { "q": city, "appid": "1b79ea7b1251b76ccda81d6bd" } # 自动对所有参数做URL编码 encoded_params = urllib.parse.urlencode(query_params) # 拼接为合法请求URL request_url = f"http://api.openweathermap.org/data/2.5/weather?{encoded_params}" res = urllib.request.urlopen(request_url).read()
该方案会自动处理所有特殊字符的转义,除空格外也支持含中文、特殊符号的城市名请求。
方案二:使用requests库简化写法(自动处理参数编码)
如果项目允许引入第三方库,requests会自动完成参数编码操作,代码更简洁:
- 先安装依赖:
pip install requests - 修改请求逻辑为:
import requests query_params = { "q": city, "appid": "1b79ea7b1251b76ccda81d6bd" } resp = requests.get("http://api.openweathermap.org/data/2.5/weather", params=query_params) json_data = resp.json()
可选优化
建议在请求逻辑外层增加try-except异常捕获,处理网络异常、城市名不存在导致的接口404等场景,避免用户端直接看到报错信息。
内容的提问来源于stack exchange,提问作者Tomek r
相关产品推荐
相关产品推荐

