我尝试访问从JS-jquery发送的带有$ .post的JSON对象到Django脚本,
我尝试了在Stackoverflow上看到的很多东西的组合,但我不能让它工作:
在.js方面:
$("#submitbtn").click(function() {
var payload = {"name":"Richard","age":"19"};
$("#console").html("Sending...");
$.post("/central/python/mongo_brief_write.py",{'data': JSON.stringify(payload)},
function(ret){alert(ret);});
$("#console").html("Sent.");
});
我的脚本名为mongo_brief_write.py的内容是:
#!/usr/bin/env python
import pymongo
from pymongo import Connection
from django.utils import simplejson as json
def save_events_json(request):
t = request.raw_post_data
return t
con = Connection("mongodb://xxx.xxx.xxx.xxx/")
db = con.central
collection = db.brief
test = {"name":"robert","age":"18"}
post_id = collection.insert(t)
def index(req):
s= "Done"
return s
如果我按下提交按钮,我会正确显示“完成”警告,但我的mongoDB中没有任何内容。
如果我在
中通过测试替换tpost_id = collection.insert(test)
我也有完成警报,我的对象是在我的mongo数据库集合中创建的。
我的错误在哪里?在我的POST请求中?我在Apache下工作,我使用modpython。
答案 0 :(得分:1)
看起来它是因为python命名空间规则而发生的。如果在函数中定义变量:
>>>def random_func(input):
t = input
return t
>>>t
Traceback (most recent call last): File "<input>", line 1, in <module>
NameError: name 't' is not defined
它不会是全局变量。 那么,你需要做的就是: 首先,在函数save_events_json中放置带有基本操作的代码:
def save_events_json(request):
t = request.raw_post_data
con = Connection("mongodb://xxx.xxx.xxx.xxx/")
db = con.central
collection = db.brief
test = {"name":"robert","age":"18"}
post_id = collection.insert(t)
from django.http import HttpResponse
return HttpResponse(content=t)
或将变量“t”设置为global:
def save_events_json(request):
global t
t = request.raw_post_data
return t
答案 1 :(得分:0)
亲爱的@Kyrylo Perevozchikov,我已经更新了我的代码:
import pymongo
from pymongo import Connection
from django.utils import simplejson as json
from django.http import HttpResponse,HttpRequest
request = HttpRequest()
if request.method == 'POST':
def index(request):
global t
t = request.raw_post_data
post_id=Connection("mongodb://xxx.xxx.xxx.xxx/").central.brief.insert(t)
return HttpResponse(content=t)
else:
def index(req):
s="Not A POST Request"
return s
当我点击jquery按钮时,我有“Not A POST Request”