一、微信小程序部分,这里要注意:content-type的设置与后台接收的格式相关,在这里设置成application/x-www-form-urlencoded
submitForm: function (e) {
var that = this;
// 使用云函数取得用户openid,将openid添加到formData中
console.log('formData: ' + JSON.stringify(that.data.formData)),
wx.request({
url: app.globalData.host + 'user/userinfo/', // 后台的API接口地址
method: 'POST',
data: JSON.stringify(that.data.formData),
header: { 'content-type': 'application/x-www-form-urlencoded'},
success: function (res) {
if (res.data.status === 'success') {
wx.showToast({
title: '提交成功',
icon: 'success',
duration: 2000
});
} else {
wx.showToast({
title: '提交失败',
icon: 'none',
duration: 2000
});
}
}
});
},
二、python部分,这里用 json.loads方法加载整个 request.body,因为整个body就是一个json数据
from django.shortcuts import render
from django.http import HttpResponse
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from .models import User
import json
# 接收来自微信小程序的用户信息
@csrf_exempt
def userinfo(request):
if request.method == 'POST':
# 获取用户信息
data = json.loads(request.body)
openid = data['openid']
username = data['username']
mobile = data['mobile']
idcard = data['idcard']
# 将用户信息保存到数据库,识别 openid 是否存在,存在则更新,不存在则创建
user, created = User.objects.update_or_create(
openid=openid,
defaults={
'username': username,
'mobile': mobile,
'idcard': idcard,
}
)
return JsonResponse({'status': 'success'})
else:
return HttpResponse('Hello, userinfo!')
原始数据是这样的:
data: {
formData:{
"username" : '',
"mobile" : '',
"idcard" : '',
"openid" : ''
}
},