我剛開始Django和我試圖實現$ http.post角法形成數據發佈到我的Django的數據庫,我的進一步計劃是更新視圖顯示結果沒有頁面refresh.so我想在django數據庫中發佈數據,然後我的視圖函數將返回一個jsonresponse,發佈的數據,我可以使用$ http.get方法更新視圖。
但問題是我存在的就是每當我張貼的數據是無法發佈數據並返回一個空的JSON響應。
這裏是我的代碼,我很努力: -
urls.py
from django.conf.urls import url
from . import views
app_name='demo'
urlpatterns=[
url(r'^$',views.index,name="index"),
url(r'^add_card/$',views.add_card,name="add_card")
]
views.py
from django.shortcuts import render
from django.http import HttpResponse,JsonResponse
from .forms import CardForm
from .models import Card
# Create your views here.
def add_card(request):
saved = False
if request.method == 'POST':
#print('hi')
form = CardForm(request.POST)
#print('hi')
if form.is_valid():
#print('hi')
card = Card()
#print('hi')
card.content = form.cleaned_data['content']
#print('hi')
saved = True
card.save()
#print('hi')
return JsonResponse({'body':list(q.content for q in Card.objects.order_by('-id')[:15])})
else:
return HttpResponse(
json.dumps({"nothing to see": "this isn't happening"}),
content_type="application/json"
)
def index(request):
return render(request,'demo/index.html',{'form':CardForm()})
controller.js
var nameSpace = angular.module("ajax", ['ngCookies']);
nameSpace.controller("MyFormCtrl", ['$scope', '$http', '$cookies',
function ($scope, $http, $cookies) {
$http.defaults.headers.post['Content-Type'] = 'application/json';
// To send the csrf code.
$http.defaults.headers.post['X-CSRFToken'] = $cookies.get('csrftoken');
// This function is called when the form is submitted.
$scope.submit = function ($event) {
// Prevent page reload.
$event.preventDefault();
// Send the data.
var in_data = jQuery.param({'content': $scope.card.content,'csrfmiddlewaretoken': $cookies.csrftoken});
$http.post('add_card/', in_data)
.then(function(json) {
// Reset the form in case of success.
console.log(json.data);
$scope.card = angular.copy({});
});
}
}]);
我models.py:-
from django.db import models
# Create your models here.
class Card(models.Model):
content = models.TextField()
date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.content
我forms.py-
from django import forms
from .models import Card
class CardForm(forms.ModelForm):
class Meta:
model = Card
fields = ['content']
你正在返回一個帶有{'body'的JsonResponse:...}但在你的Angular代碼中你正在記錄json.data。嘗試用**數據**替換** body **,看看你是否得到任何迴應。 – dentemm
如果我改變數據與身體控制檯打印未定義...實際上,我得到的成功響應json是這樣的對象{數據:對象,狀態:200,配置:對象,statusText:「確定」,標題:函數}',其中身體駐留在數據部分,這就是爲什麼我登錄json.data那裏@登錄 –
好吧,如果你登錄json.data.body? – dentemm