如何在Python Django中集成百度地图API进行地理编码_通过requests调用外部接口

雨瑶同学_6489

雨瑶同学_6489

2026-05-07

823人浏览

原创

地理编码失败时应先检查address是否含特殊字符并url编码,确认ak已启用地理编码权限;requests.get()返回400或空结果多因参数错误或ak无效,需用urllib.parse.quote严格编码、显式设置timeout、双重校验status和result字段。

如何在python django中集成百度地图api进行地理编码_通过requests调用外部接口

地理编码失败时 requests.get() 返回 400 或空结果怎么办

百度地图 API 对请求参数极其敏感,status=0 仅表示接口调用成功,不代表地理编码成功;真正要看 result.location.lng 和 result.location.lat 是否存在。常见 400 错误多因 address 参数含特殊字符(如全角空格、换行)、未 URL 编码,或 ak(API Key)未正确拼接在 URL 中。

实操建议:

  • 用 urllib.parse.quote(address, safe='') 对地址做严格编码,不要手动替换空格为 %20
  • 检查 ak 是否已申请并启用「地理编码 API」权限(控制台 > 应用管理 > 启用服务)
  • 调试时先用浏览器直接访问拼好的 URL,确认返回 JSON 中 status 为 0 且 result 非空
  • Django 视图中避免硬编码 ak,应从 settings.py 读取:BDMAP_AK = os.getenv('BDMAP_AK')

在 Django View 中安全调用百度地理编码接口

不能在模板或模型里直接发 HTTP 请求,必须收口到视图层,并做好异常兜底——百度 API 不稳定,超时或限流很常见。别用 requests.get(...).json() 一步到位,中间没机会捕获网络错误。

实操建议:

  • 设置显式超时:requests.get(url, timeout=(3, 5))(3 秒连接,5 秒读取)
  • 用 try/except requests.exceptions.RequestException 捕获所有网络异常,返回默认坐标或提示
  • 对返回 JSON 做双重校验:resp.json().get('status') == 0 且 'result' in resp.json()
  • 示例片段:
    import requests
    from django.conf import settings
    
    def baidu_geocode(address):
        base_url = "https://api.map.baidu.com/geocoding/v3/"
        params = {
            'address': address,
            'output': 'json',
            'ak': settings.BDMAP_AK
        }
        try:
            resp = requests.get(base_url, params=params, timeout=(3, 5))
            data = resp.json()
            if data.get('status') == 0 and 'result' in data:
                loc = data['result']['location']
                return float(loc['lng']), float(loc['lat'])
        except (requests.exceptions.RequestException, ValueError, KeyError):
            pass
        return None, None

    为什么不用 Django REST Framework 就直接写 View?

    地理编码是纯工具型外部调用,不涉及序列化、权限控制或数据库操作,上 DRF 反而增加路由配置、Serializer 定义、Response 包装等冗余成本。一个函数式视图 + JsonResponse 足够清晰。

    Galileo python sdk
    Galileo python sdk

    Galileo AI 平台 Python SDK 完整参考,用于评估、监控和保护 GenAI 应用,适用于构建 Python 应用。

    下载

    实操建议:

    • 路由直接配 path('api/geocode/', views.geocode_view),别卷 CBV
    • 前端传参统一用 query string(?address=北京市海淀区中关村),后端用 request.GET.get('address') 取值
    • 返回结构保持轻量:{'lng': 116.31, 'lat': 39.99, 'formatted_address': '...'},不套 data 外壳
    • 加个简单缓存:对相同 address 的结果用 cache.set(key, result, 3600) 存 1 小时,减少重复调用

    生产环境必须处理的三个隐藏坑

    本地调试通了不等于上线能用。百度 API 在服务器环境常因 DNS、代理、IP 白名单或 HTTPS 证书问题静默失败。

    实操建议:

    • 确认服务器能解析 api.map.baidu.com(nslookup api.map.baidu.com),某些内网环境需配 DNS 或 hosts
    • 如果用了 Nginx 反向代理,确保没把 User-Agent 或 Host 头改掉——百度会校验请求头完整性
    • 百度后台绑定的「IP 白名单」必须填服务器出口公网 IP(不是内网 IP),且每行一个,末尾不能有空格
    • HTTPS 站点调用 HTTP 接口会被浏览器拦截,但这是前端问题;Django 后端用 requests 调用不受影响,无需强制 HTTPS

    地理编码本身不难,难的是让每次请求都稳、可查、可退。重点盯住 ak 权限、URL 编码、超时控制、白名单 IP 这四点,其他都是浮云。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

百度地图
百度地图

百度地图作为新一代人工智能地图,服务覆盖全球200+城市及国家。导航可信赖、语音交互更简单、数据丰富更贴心的百度地图,致力于为用户提供更准确、更丰富、更易用的出行服务。有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1691

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4284

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1689

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

24977

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3047

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3067

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1163

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2383

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程