我是Django的新手,也是Ajax的新手.我正在开展一个项目,我需要整合这两个项目.我相信我理解他们背后的原则,但没有找到两者的良好解释.
有人可以快速解释一下代码库如何随着它们中的两个集成在一起而改变吗?
例如,我是否仍然可以使用HttpResponse
Ajax,或者我的响应是否必须使用Ajax进行更改?如果是这样,请您提供一个示例,说明请求的响应必须如何变化?如果它有任何区别,我返回的数据是JSON.
我可以通过我的AJAX帖子使用一些符合Django的CSRF保护机制的帮助.我按照这里的指示:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/
我已经完全复制了他们在该页面上的AJAX示例代码:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
我getCookie('csrftoken')
在xhr.setRequestHeader
打电话之前打印了一个警告打印内容,确实填充了一些数据.我不确定如何验证令牌是否正确,但我鼓励它发现并发送一些东西.
但是Django仍然拒绝我的AJAX帖子.
这是我的JavaScript:
$.post("/memorize/", data, function (result) {
if (result != "failure") {
get_random_card();
}
else {
alert("Failed to save card data.");
}
});
Run Code Online (Sandbox Code Playgroud)
这是我从Django看到的错误:
[23/Feb/2011 22:08:29]"POST/memorize/HTTP/1.1"403 2332
我确定我错过了一些东西,也许这很简单,但我不知道它是什么.我一直在搜索SO,并看到一些关于通过csrf_exempt
装饰器关闭CSRF检查我的视图的信息,但我发现它没有吸引力.我已经试过了,但它确实有效,但我宁愿让我的POST以Django的设计方式工作,如果可能的话.
为了防止它有用,这里是我的观点的主旨:
def myview(request):
profile = request.user.profile
if request.method == 'POST':
"""
Process the post...
"""
return HttpResponseRedirect('/memorize/')
else: # request.method == 'GET'
ajax = request.GET.has_key('ajax')
"""
Some irrelevent code...
"""
if ajax:
response = HttpResponse()
profile.get_stack_json(response)
return response
else:
"""
Get …
Run Code Online (Sandbox Code Playgroud) 当我使用以下Python代码向我的Django网站发送POST请求时,我得到403:Forbidden错误.
url = 'http://www.sub.domain.com/'
values = { 'var': 'test' }
try:
data = urllib.urlencode(values, doseq=True)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
except:
the_page = sys.exc_info()
raise
Run Code Online (Sandbox Code Playgroud)
当我打开任何其他网站时,它正常工作.domain.com也是Django网站,也可以正常使用.我认为,这是Django配置问题,任何人都可以告诉我应该怎么做才能提供对我脚本的访问权限?
使用django 1.4即时获取403错误当我尝试从我的javascript做一个帖子做我的django服务器.虽然问题只在于帖子,但我的工作正常.也试过@csrf_exempt没有运气
更新:我现在可以发帖添加{% csrf_token %}
,但是后期响应是空的,虽然GET正确,任何想法?
我的django观点:
@csrf_protect
def edit_city(request,username):
conditions = dict()
#if request.is_ajax():
if request.method == 'GET':
conditions = request.method
elif request.method == 'POST':
print "TIPO" , request.GET.get('type','')
#based on http://stackoverflow.com/a/3634778/977622
for filter_key, form_key in (('type', 'type'), ('city', 'city'), ('pois', 'pois'), ('poisdelete', 'poisdelete'), ('kmz', 'kmz'), ('kmzdelete', 'kmzdelete'), ('limits', 'limits'), ('limitsdelete', 'limitsdelete'), ('area_name', 'area_name'), ('action', 'action')):
value = request.GET.get(form_key, None)
if value:
conditions[filter_key] = value
print filter_key , conditions[filter_key]
#Test.objects.filter(**conditions)
city_json = json.dumps(conditions)
return HttpResponse(city_json, mimetype='application/json')
Run Code Online (Sandbox Code Playgroud)
这是我的javascript代码:
function …
Run Code Online (Sandbox Code Playgroud) 我想让ajax工作,但我一直收到403错误.我对jquery很新.
以下是我的代码
$('#prod_search_button').click(function(){
if ($('#inv_prod_list').length) {
//insert a new record
}
else
{
//create the #inv_prod_list table and insert first record
var inv_table= '<table id="inv_prod_list" style="border: 2px solid #dddddd;"></table>';
// create query object
var prod_query = {
query: jQuery.trim($('#id_prod_query').val())
};
// convert object to JSON data
var jsonQuery = JSON.stringify(prod_query);
$.ajax({
type: 'POST',
url: '/company/product/item_search.json/',
data: jsonQuery,
success: function(jsonData){
var parsed = JSON.parse(jsonData);
$('#inv_prod_wrap').html(inv_table);
var new_record = 'this is html for new row'
$('#inv_prod_list tr:last').after(new_record);
//off rows alt color
} …
Run Code Online (Sandbox Code Playgroud)