2015-10-01 54 views
1

我在Django中更新,前一段時間我完全停留在與請求有關的問題上。我試圖從Django窗體中做POST。我做到這一點與jsonAJAX 這裏是我的代碼Django中的請求

form.py

class PostForm(forms.ModelForm): 
     class Meta: 
      model = Message 
      fields = ['message_text'] 
      widgets = { 
       'message_text': forms.TextInput(
        attrs={'id': 'message_text', 'required': True, 
          'placeholder': 'new message...', }),} 

views.py

def index(request): 
     if request.method == 'POST': 
      form = PostForm(request.POST) 
      if form.is_valid(): 
       form.cleaned_data 
       message_t = request.POST.get('message_text') 
       response_data = {} 
       new_mess = Message(message_text = message_t, 
            post_time = message_t.created, 
            username="second")  
       new_mess.save() 
       response_data['result'] = message_t 
      else: 
       response_data['result'] = 'nothing...' 
     else: 
      form = PostForm()  
     template = loader.get_template('chat/index.html') 
     context = RequestContext(request, { 
         'form': form, })   
     return HttpResponse(template.render(context)) 

(在views.py的另一個變我試圖分開POST請求處理到另一個功能,但它不工作)

html:

<form method="POST" id="post-form"> 
     <td class="col-lg-6"><div class="fieldWrapper" id="the_post" 
      class="form-control" type="text"> 
      {{ form.message_text }} 
     </div></td> 
     <td class="col-lg-6"> <input type="submit" value="Post" 
      class="btn btn-success" name = "Post"></td> 
    </form> 

JS:

$(function() { 
     $('#post-form').on('submit', function(event){ 
     event.preventDefault(); 
     console.log("form submitted!") // sanity check 
     create_post(); 
    }); 


    function create_post() { 
     console.log("create post is working!") // sanity check 
     $.ajax({ 
     url : "/chat/new_message/", // the endpoint 
     type : "POST", // http method 
     data : { the_post : $('#post-form').val() }, 

     success : function(json) { 
      $('#post-form').val(''); // remove the value from the input 
      console.log(json); // log the returned json to the console 
      console.log("success"); 
     }, 

     error : function(xhr,errmsg,err) { 
      ... 
     } 
      }); 
     }; 
    }); 

在結果我POST成功,沒有出現錯誤,但在基本沒有記錄創建過。 注意:我也排除了csrf everywere

有人可以幫我找出有什麼問題嗎?

+0

在你的視圖中,行'form.cleaned_data'的用法是什麼? – Pynchia

回答

0

我發現我的POST的修復程序。 的主要問題是JSON的身體,我用錯了值的名稱,它必須是:

data : { the_post : $('#message_text').val() }, 

現在的要求是不是空的。

+0

另一個問題是變量命名。 所有對實體的引用應該具有相同的名稱,否則表單將無效。正確的JSON在我的情況是: '$ .ajax({url:「/ chat/new_message /」, type:「POST」, dataType:「json」, data:{message_text:$('#message_text ').val()},' –

1

該表單無效。它永遠不可能是有效的,因爲你正在發送一個帶有關鍵字「the_post」中的表單數據的JSON字典,但是你沒有告訴視圖去看那裏。

而且該視圖無法報告表單的狀態,因爲您構造了一個響應 - 「response_data」 - 然後忽略它。

最後,您的視圖無論如何都不會返回JSON - 它將回報渲染的模板,就好像它是一個普通的非Ajax視圖 - 因此接收JS不知道如何處理它。

+0

好的,謝謝,我會盡力做到這一點。 現在我看到我已經錯過了回覆,但它是我以前的變體之一:) –

+0

再次感謝你!你讓我的方向正確:) –