从 Ajax 调用 Django 视图
Posted
技术标签:
【中文标题】从 Ajax 调用 Django 视图【英文标题】:Calling Django View from Ajax 【发布时间】:2015-10-30 23:18:24 【问题描述】:我正在使用 Ajax(连同 Django)对按钮单击执行一些操作。我成功调用了 javascript 函数,但我无法调用 Django 视图。没有错误但我认为打印语句不打印...?
urls.py
urlpatterns = patterns('polls.views',
url(r'^request_access/$', 'request_access',
name='request_access'),
)
views.py
def request_access(request):
print("DJANGO VIEW")
if request.method == "POST":
print("DATA: ", request.POST.get('request_data'))
return HttpResponse(
json.dumps(response_data),
content_type="application/json"
)
模板.html
<button class="btn btn-green btn-sm" onclick="request_access(this)" id=" data "><i class="fa fa-plus"></i> Join Group</button>
javascript.js
function request_access($this)
console.log("button clicked");
var request_data = $this.id;
console.log("data: " + request_data);
$.post(
url: "request_access/",
data : request_data: request_data,
success : function(json)
$("#request-access").hide();
console.log("requested access complete");
)
【问题讨论】:
【参考方案1】:将代码中的“post”替换为“ajax”,现在打印语句将在您的视图中运行。
function request_access($this)
console.log("button clicked");
var request_data = $this.id;
console.log("data: " + request_data);
$.ajax(
url: "request_access/",
data : request_data: request_data,
success : function(json)
$("#request-access").hide();
console.log("requested access complete");
)
Difference between $.post and $.ajax?
$.post vs $.ajax
【讨论】:
谢谢@chandu,它越来越近了,但打印语句没有显示。我收到500 (INTERNAL SERVER ERROR)
?
我添加了type: "POST",
,现在我得到了403 (FORBIDDEN)
@steph 在您的数据中添加 csrfmiddlewaretoken。 , 'csrfmiddlewaretoken':$.cookie('csrftoken'),【参考方案2】:
这将返回空值。
views.py
def request_access(request):
print("DJANGO VIEW")
a = request.POST.get('request_data')
print a
return HttpResponse(json.dumps(a),content_type="application/json")
js
function request_access($this)
console.log("button clicked");
var request_data = $this.id;
alert(request_data);
console.log("data: " + request_data);
$.ajax(
type: 'GET',
url: "/crm/request_access/",
data : 'request_data': request_data,
success : function(json)
$("#request-access").hide();
console.log("requested access complete");
)
【讨论】:
【参考方案3】:我遇到了同样的问题,即我的视图没有错误,但我的视图没有被调用。 这是我解决它的方法:
我试图获取以下网址:
url(r'users/change_rights', 'change_user_right', name='change_user_right'),
但 users/change_rights 网址也与我注册的另一个网址匹配:
url(r'users', 'users_table', name='users_table'),
所以 django 只是调用了第一个非 ajax 视图并没有返回任何错误。
要修复它,请在第二个 url 的末尾添加一个“$”,这样它就不会包含 users/change_rights:
url(r'users$', 'users_table', name='users_table'),
【讨论】:
以上是关于从 Ajax 调用 Django 视图的主要内容,如果未能解决你的问题,请参考以下文章
从 AJAX 请求调用 django 视图(解析 celery task_id)