Django处理POST请求中JSON数据的两种实现方式
本文介绍Django框架中处理POST请求发送的JSON格式数据的两种常见方法。第一种通过接收字符串并进行Base64解码后解析;第二种直接读取request.body并转换为JSON对象。文中包含完整的Python代码示例,展示如何从请求中提取数据并存储至MongoDB数据库,适用于后端接口开发参考。
接收Base64编码的JSON字符串
在Django视图函数中,若前端通过POST提交的是经过处理的字符串数据,后端需先获取该字段值。例如,从request.POST中获取名为'msg'的参数,该参数通常包含经过Base64编码的JSON字符串。随后,使用base64.b64decode对字符串进行解码,并指定utf-8编码格式将其转换为普通字符串,最后通过json.loads解析为Python字典对象,以便后续业务逻辑处理。
def subscription(request):
msg = request.POST.get('msg')
# tel_no = request.POST.get('tel_no')
# email = request.POST.get('email')
# ico_id = request.POST.get('ico_id')
data = base64.b64decode(msg)
data = data.decode('utf-8')
data = json.loads(data)
client = pymongo.MongoClient(host = 'localhost',port = 27017)
db = client.users
my_set = db.user
if 'ico_id' not in data.keys():
return HttpResponse(json.dumps({"result_code":1}))
result_code = my_set.insert({"tel_no":data.get('tel_no'),"email":data.get('email'),"ico_id":data.get('ico_id'),'date':datetime.datetime.now()})
return HttpResponse(json.dumps({"result_code":0}))
直接解析request.body中的JSON数据
当前端直接发送JSON格式数据时,Django视图可通过request.body属性直接读取原始请求体。由于request.body返回的是字节流,需先调用decode()方法将其转换为字符串。若前端发送的JSON字符串中单引号与双引号混用导致标准JSON解析失败,可先用replace("'", "\"")替换单引号为双引号,再使用json.loads解析为字典。接着,通过.get('id')获取特定字段值,完成数据提取。
def selectedico(request):
if request.method == 'POST':
web_id = json.loads(request.body.decode().replace("'", "\"")).get('id')
client = pymongo.MongoClient(host = 'localhost',port = 27017)
db = client.webdata
my_set = db.webchinadata
values = []
#print(web_id)
print(request.body.decode())
for val in my_set.find():
# value = value.decode('utf-8')
# val = json.loads(value)
val["_id"] = str(val["_id"])
val["date"] = str(val["date"])
discount = (''.join(val["discounts"])).split('\n')
dis = [x.strip(' ') for x in discount if x != '']
val["discounts"] = dis
val["accept_coins"] = val["accept_coins"].split(",")
details = (''.join(val["details"])).replace('\n','')
val["details"] = details
#print(val["_id"])
if val["_id"] == web_id:
values.append(val)
return HttpResponse(json.dumps(values,ensure_ascii=False),content_type="application/json;charset=utf-8")
上述两种方法分别适用于不同场景下的数据接收需求,开发者可根据前端传参方式选择合适的数据解析策略。希望这些代码示例能帮助开发者更高效地处理Django中的POST请求数据,欢迎收藏并参考使用。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













