Django REST API POST返回200但无法将请求体存入SQLite数据库
Django REST API 模型保存失败问题解决方案
第一步:先解锁被吞的报错信息
你当前用了无任何过滤的裸except块,所有运行异常都会被直接捕获吞掉,所以服务端没有任何报错输出,先修改视图代码打印异常信息:
# 顶部先导入两个依赖 import traceback from django.views.decorators.csrf import csrf_exempt # 加csrf_exempt装饰器跳过POST请求的CSRF校验,Postman调用时不需要额外传Token @csrf_exempt def add_planet(request): if request.method == 'POST': payload = json.loads(request.body) planet_name = payload['name'] avg_temp = payload['temp'] day_hrs = payload['hrs'] planet_mass = payload['mass'] planet_diameter = payload['diameter'] planet_circumference = payload['circumference'] print(planet_name,avg_temp,day_hrs,planet_mass,planet_diameter,planet_circumference) planet = Planet(name=planet_name,temp=avg_temp,hrs=day_hrs,mass=planet_mass, diameter=planet_diameter, circumference=planet_circumference) try: planet.save() response = json.dumps([{ 'Success': 'Planet added successfully!'}]) except Exception as e: # 打印异常信息和栈追踪 print("保存错误原因:", e) print("详细错误栈:", traceback.format_exc()) response = json.dumps([{ 'Error': 'Planet could not be added!'}]) return HttpResponse(response, content_type='text/json')
修改后重新发请求,看控制台的报错就能直接定位根因。
常见的报错原因(90%概率是以下问题)
- 没有执行模型迁移命令,SQLite中还没有创建
Planet模型对应的表:
进入项目根目录执行两条迁移命令即可:python manage.py makemigrations python manage.py migrate - 存放
Planet模型的应用没有注册到settings.py的INSTALLED_APPS列表中,导致迁移不生效,表无法创建 - 传入的字段内容长度超过了模型定义的
max_length=20限制,你当前传的参数长度符合要求,仅当后续传更长内容时需要注意
优化建议
如果是长期做Django接口开发,更推荐使用Django REST Framework(DRF)框架,内置的序列化器可以自动完成参数校验、JSON解析、模型序列化操作,不需要手动处理JSON加载、参数提取逻辑,容错性更高。
内容的提问来源于stack exchange,提问作者luther wardle
相关产品推荐
相关产品推荐

