使用Postman发送请求,Django提示解码失败

使用Postman发送如下请求

https://127.0.0.1:8000/api/admin/xxxxxxxxx/

报错如下

[19/Nov/2018 14:15:56] code 400, message Bad request version (’\x00"JJ\x13\x01\x13\x02\x13\x03\xc0+\xc0/\xc0,\xc00\xcc\xa9\xcc\xa8\xc0\x13\xc0\x14\x00\x9c\x00\x9d\x00/\x005\x00’)
File “/…/lib/python2.7/site-packages/django/core/servers/basehttp.py”, line 138, in log_message
msg = “[%s] %s\n” % (self.log_date_time_string(), format % args)
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xfc in position 9: ordinal not in range(128)

0 errors found
November 19, 2018 - 14:20:45
Django version 1.6.11, using settings ‘settings’
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

这个原因是因为我们起的是http服务器,而Postman发送的是Https请求,修改为http后成功

### Django 中如何解析和获取 JSON 数据 在 Django 应用程序中处理来自前端的 JSON 数据是一项常见需求。以下是关于如何实现这一功能的具体说明。 #### 1. 前端发送 JSON 数据 为了使 Django 能够接收并解析 JSON 数据,前端需要通过 AJAX 请求将数据以 `application/json` 的 MIME 类型发送到后端。例如: ```javascript fetch('/api/endpoint/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ key1: 'value1', key2: 'value2' }) }); ``` 上述代码展示了如何从前端向 `/api/endpoint/` 发送 POST 请求,并附带 JSON 格式的请求体[^1]。 --- #### 2. 后端配置 URL 和视图函数 在 Django 中,URL 配置文件 (`urls.py`) 定义了路由规则。假设我们希望监听路径 `/api/endpoint/` 上的请求,则可以这样定义: ```python from django.urls import path from .views import handle_json_data urlpatterns = [ path('api/endpoint/', handle_json_data), ] ``` 接着,在对应的视图函数中编写逻辑来解析接收到的数据。 --- #### 3. 解析 JSON 数据 当客户端以 `application/json` 形式发送数据时,Django 不会自动将其放入 `request.POST` 或其他内置对象中。相反,开发者需手动读取 HTTP 请求主体 (body),并通过 Python 的标准库模块 `json` 进行解码。以下是一个完整的示例: ```python import json from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt @csrf_exempt def handle_json_data(request): if request.method == 'POST': try: data = json.loads(request.body.decode('utf-8')) # 访问 JSON 数据中的键值对 value1 = data.get('key1') value2 = data.get('key2') response_data = {'status': 'success', 'received_key1': value1, 'received_key2': value2} return JsonResponse(response_data) except Exception as e: error_message = f'Error parsing JSON: {str(e)}' return JsonResponse({'error': error_message}, status=400) return JsonResponse({'error': 'Invalid request'}, status=405) ``` 在此代码片段中: - 使用 `request.body` 获取原始请求体内容。 - 利用 `json.loads()` 方法将字符串形式的 JSON 转换为 Python 字典。 - 提供了一个错误捕获机制,以便更优雅地处理潜在异常情况[^2]。 注意:由于此示例禁用了 CSRF 保护(通过装饰器 `@csrf_exempt`),因此仅适用于 API 场景或其他无需 CSRF 验证的情况。对于常规表单提交,请保留默认的安全措施[^3]。 --- #### 4. 测试接口 可以通过工具如 Postman 或 curl 来测试该接口的功能是否正常工作。例如使用 curl 执行如下命令: ```bash curl -X POST http://localhost:8000/api/endpoint/ \ -H "Content-Type: application/json" \ -d '{"key1": "test_value", "key2": "another_test"}' ``` 如果一切设置无误,应该能够看到返回的成功消息及其所含参数值。 --- #### 总结 综上所述,在 Django 中获取 JSON 数据涉及以下几个关键步骤:确保前端正确传递 JSON 格式化的内容;调整后端 URL 映射至适当处理器;最后由自定义视图负责提取与验证传入的信息流[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值