如何在Python/Django项目中获取Typeform表单的提交数据
Typeform表单提交数据获取方案(Python/Django环境)
方法1:Webhook实时推送(推荐,适合实时处理场景)
- 首先在Typeform后台对应表单的Webhook设置中,添加你的Django服务的公网可访问端点地址,比如
https://你的域名/typeform/webhook/,同时可设置签名密钥用于校验请求合法性,避免恶意伪造的提交请求。 - 在Django项目中新增对应接口视图,示例代码如下:
from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt from django.views.decorators.http import require_http_methods import hmac import hashlib # 替换为你在Typeform后台设置的签名密钥 TYPEFORM_SIGNING_SECRET = "你的签名密钥" @csrf_exempt @require_http_methods(["POST"]) def typeform_webhook(request): # 校验请求签名 signature = request.headers.get("Typeform-Signature", "") body = request.body expected_signature = hmac.new( TYPEFORM_SIGNING_SECRET.encode("utf-8"), body, hashlib.sha256 ).hexdigest() if not hmac.compare_digest(f"sha256={expected_signature}", signature): return HttpResponse(status=403) # 解析表单提交数据 submission_data = request.json() # 此处编写你的业务处理逻辑,比如数据入库、统计分析、触发通知等 print("收到新的表单提交:", submission_data) return HttpResponse(status=200)
- 在项目的
urls.py中添加路由配置:path("typeform/webhook/", views.typeform_webhook, name="typeform_webhook") - 本地测试时可使用内网穿透工具将本地服务映射到公网,即可接收Typeform的推送请求。
方法2:调用Responses API定时拉取(适合非实时批量处理场景)
- 首先在Typeform后台申请个人访问令牌,授予表单数据读取权限。
- 在Django中可通过requests库拉取指定表单的所有提交数据,示例代码如下:
import requests TYPEFORM_TOKEN = "你的个人访问令牌" FORM_ID = "目标表单的ID" def get_typeform_responses(): url = f"https://api.typeform.com/forms/{FORM_ID}/responses" headers = { "Authorization": f"Bearer {TYPEFORM_TOKEN}" } # 可添加参数筛选拉取范围,比如提交时间、分页数量等 params = { "page_size": 100 } resp = requests.get(url, headers=headers, params=params) if resp.status_code == 200: responses_data = resp.json() # 此处编写批量数据的处理逻辑 return responses_data return None
- 如果需要定期自动拉取,可搭配django-celery-beat等定时任务插件实现。
内容的提问来源于stack exchange,提问作者Saud Zubedi
相关产品推荐
相关产品推荐

