我们如何在django中的views.py中使用ajax()?

时间:2014-02-17 11:57:15

标签: python ajax django

我这里的代码很少。

请你详细解释一下那段代码到底做了什么。请。

在脚本中这里是ajax调用:

    $.ajax({
            url : "{% url 'upload_document' %}",
            type: "POST",
            data : {csrfmiddlewaretoken:    document.getElementsByName('csrfmiddlewaretoken')[0].value,
                    title: document.getElementById('title').value,
                    //document: document: document.getElementById('document'),
            },
            dataType : "json",
            success: function( response ){
               if(response == "True"){
                // success
               }
               else {
                //append errors
               }
            }
          });

ajax如何在django中运行,我们如何在视图中使用ajax请求 在这里我的看法  views.py

def upload_document(request): 
    print request.POST
    print request.FILES
    if request.is_ajax():
        if request.method == 'POST':
            form = UploadForm(request.POST, request.FILES, user = request.user)

            if form.is_valid():
                form.save()
                return HttpResponse(simplejson.dumps('True'), mimetype = 'application/json' )
            else:
                errors = form.errors
                return HttpResponse(simplejson.dumps(errors), mimetype = 'application/json' )

先谢谢。

1 个答案:

答案 0 :(得分:1)

通常,$.ajax方法发送异步http请求。

您可以阅读here

第一个参数是url,我们发送请求。

其次,请求方法可能是GET,POST,PUT,DELETE等。请参阅wiki

第三个参数是带有数据的键值字典,您可以在服务器端使用它。 在django中,您可以在request.POST(在发布请求的情况下)访问它

第四个参数是function,当服务器成功返回响应时调用。 你不需要在这个函数中使用if语句,因为当请求失败或服务器没有给出响应,或者服务器返回错误(例如40*代码之类的代码)时,不会调用此函数。

此函数接受服务器响应的一个参数。您需要处理此数据,例如向用户显示Invalid data, please correct errors...Valid data. your request is in process now.等消息以及此类人员。

最后一个参数是服务器响应的数据类型。 jQuery非常聪明,可以为你解析json或html,所以在这种情况下,response(成功函数的参数)是纯JS对象,从JSON反序列化。

在服务器端(Django视图)中,您必须对请求的数据进行一些验证。并用它做点什么。例如,将其保存到数据库。当我必须实现ajax表单处理时,我会做这样的事情:

if request.method == 'POST':
    response = {}
    form = UploadForm(request.POST, request.FILES, user = request.user)
    if form.is_valid():
        form.save()
        response['success'] = 1
    else:
        response['success'] = 0
        response['errors'] = dict(form.errors)
    return HttpResponse(simplejson.dumps(response), mimetype = 'application/json' )

在客户端,js就是这样的

$.post('/url/to/view',
       function(json){
           if(json['success']){
               alert('Yahooo! Successfull request')
           }
           else{
               alert('Oooops. Looks like you send invalid data')
           }
       }, 'json')
祝你好运!