Django API 接口互相调用实战:获取请求信息与发送 HTTP 请求

周叙
周叙
发布时间:2026-10-13 | 5人浏览过
原创

本文详解 Django 中 API 接口的互相调用方法。首先介绍如何从请求元数据中提取客户端 IP、端口及各类 HTTP 请求头信息。随后通过具体代码示例,演示使用 Python requests 库发起 GET 和 POST 请求的关键步骤,重点解析 JSON 数据序列化、Content-Type 设置及常见错误码(如 400、415)的排查与解决。

Django API 接口调用与请求信息获取

为便于理解,此处直接展示核心代码实现。


 url = "http://%s:%s/api-token-auth/" % (ip, port)
 query_args = {
  "username": username,
  "password": password
 }
 resp = requests.post(url=url, data=query_args)
 token = json.loads(resp.text)["token"]
 headers = {"Authorization": "JWT" + " " + token}  # 拿到token,拼成headers


 post_url = "http://%s:%s/message/message-level-two/"% (ip, port)
 data = {
  "app": app,
  "url": url,
  "message_id": message_id,
  "head": head,
  "title": title,
  "userprofile_id_list": userprofile_id_list
 }
 headers = self.headers
 requests.post(url=post_url, data=data, headers=headers)

提取当前请求的客户端 IP 地址与服务器端口号。

获取客户端 IP 与端口


 host_ip, host_port = self.request.META.get("HTTP_HOST").split(':')[0], \
        self.request.META.get("HTTP_HOST").split(':')[1]

常见 HTTP 请求头解析

常见的 HTTP 请求头字段包括以下各项:

CONTENT_LENGTH – 请求体的长度(字符串格式)。 CONTENT_TYPE – 请求体的 MIME 类型。 HTTP_ACCEPT – 响应可接受的媒体类型。 HTTP_ACCEPT_ENCODING – 响应可接受的编码方式。 HTTP_ACCEPT_LANGUAGE – 响应可接受的语言。 HTTP_HOST – 客户端发送的 HTTP Host 头。 HTTP_REFERER – 来源页面(若存在)。 HTTP_USER_AGENT – 客户端的用户代理字符串。 QUERY_STRING – 查询字符串(未解析的单字符串)。 REMOTE_ADDR – 客户端的 IP 地址。 REMOTE_HOST – 客户端的主机名。 REMOTE_USER – 经 Web 服务器认证的用户(若存在)。 REQUEST_METHOD – 请求方法字符串,如 "GET" 或 "POST"。 SERVER_NAME – 服务器的主机名。 SERVER_PORT – 服务器的端口号(字符串格式)。

获取上述请求头内容需通过 request.META 字典。

具体调用示例如下:


def index(request):
 ip = request.META.get("REMOTE_ADDR")
 return HttpResponse("你的ip地址是%s"%ip)

http://10.254.30.27/1 self.kwargs['pk'] # 用于获取路径末尾的参数值,例如这里的 1

补充知识:在 Django 中使用 requests 库调用相关接口。

1、若发起 GET 请求且需携带参数,可参考以下代码结构:

使用 Requests 发起 GET 请求


import requests
 
from django.http import JsonResponse
 
def get_info(request):
 url = 'http://www.baidu.com'
 params = {'id': 1, 'user': 'lin'}
 response = requests.get(url=url, params=params)
 return JsonResponse(response.text, safe=False)

执行后将返回 JSON 格式的字符串数据。

2、若发起 POST 请求且需携带参数,可参考以下代码结构:

使用 Requests 发起 POST 请求及注意事项


import requests
 
from json import dumps
from django.http import JsonResponse
 
def get_info(request):
 url = 'http://www.baidu.com'
 data = {'id': 1, 'user': 'lin'}
 response = requests.post(url=url, data=dumps(data))
 return JsonResponse(response.text, safe=False)

注意事项:

(1)必须注意 data 参数,需使用 json.dumps(data) 进行转换,否则可能报错,导致 response 状态码为 400(Bad Request)。

(2)若需在 POST 请求中添加特定请求头,可参考以下代码:


import requests
 
from json import dumps
from django.http import JsonResponse
 
def get_info(request):
 url = 'http://www.baidu.com'
 data = {'id': 1, 'user': 'lin'}
 headers = {'content-Type': 'application/json', 'Accept': '*/*'}
 response = requests.post(url=url, data=dumps(data), headers=headers)
 return JsonResponse(response.text, safe=False)

若 response 状态码返回 415 错误,即 HTTP 415 Unsupported Media Type(不支持的媒体类型),通常是因为 Content-Type 设置错误。需注意接口可能要求将参数封装在请求头中,因此务必检查 Content-Type 配置。

以上关于 Django API 中接口互相调用的实例分享完毕,希望能提供有益参考。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表