【发布时间】:2016-08-23 19:14:34
【问题描述】:
我觉得这可能是我缺少的一些简单的东西,但是由于发布数据来自我的 Angular javascript 中的 AJAX 调用,我不能太确定。简而言之,我从 request.body 中的 AJAX 调用获取数据,我有一个函数来处理它并将其转换为查询字典以绑定到我的表单。它一直工作到这一点。根据form.is_valid,表单是有效的,我可以看到数据正在发布,但它的clean_data属性中没有任何内容。
def requestPost(request):
querystring = urllib.urlencode(ast.literal_eval(request.body))
postdata = QueryDict(query_string=querystring)
return postdata
def send(request, thread_id):
# """Send a message to the thread."""
account = Account.objects.get(email=request.user.username)
thread = Thread.objects.get(id=thread_id)
if request.method == "POST":
x = requestPost(request)
form = NewChat(requestPost(request))
if form.is_valid():
cleaned_data = form.cleaned_data
threadchat = ThreadChat.objects.create(text=cleaned_data['message'], account=account, thread=thread)
broadcast(threadchat.id)
context = {"threadchat": threadchat}
return composeJsonResponse(200, "", context)
class NewChat(forms.Form):
message = forms.Textarea()
【问题讨论】:
-
requestPost 函数的意义何在?为什么不直接访问 request.POST 呢?
-
由于发布数据来自 Angular 作为 AJAX 调用,因此数据在请求的正文属性中作为字符串传入。所以我必须处理字符串,并将其转换为 QueryDict