0

我想使用POST請求在數據庫中創建模型實體。 GET工作正常,但沒有觸發POSTviews.py如下:在Django rest框架中處理JSON Post請求

<code> 
from django.shortcuts import render 
from rest_framework import viewsets, generics 
from server_app.serializers import DataSerializer 
from server_app.models import DataModel 
from rest_framework.views import APIView 
from rest_framework.parsers import JSONParser 
from rest_framework.renderers import JSONRenderer 
from django.http import HttpResponse 
from django.views.decorators.csrf import csrf_exempt 
from server_app.serializers import DataSerializer 
import logging 
import json 
from django.http import HttpResponse 
from django.views.generic import View 

class MyView(View): 
    def get(self, request, *args, **kwargs): 
     return HttpResponse('This is GET request') 

    def post(self, request, *args, **kwargs): 
     return HttpResponse('This is POST request') 

class JSONResponse(HttpResponse): 
    def __init__(self, data, **kwargs): 
     content = JSONRenderer().render(data) 
     kwargs['content_type'] = 'application/json' 
     super(JSONResponse, self).__init__(content, **kwargs) 

    logger = logging.getLogger(__name__) 

@csrf_exempt 
def DataModel_list(request): 
    if request.method == 'GET': 
     logger.error("GET DATA SERVER") 
     queryset = DataModel.objects.all() 
     serializer_class = DataSerializer(queryset, many=True) 
     #return HttpResponse(json.dumps(serializer_class.data),content_type="application/json") 
     return JSONResponse(serializer_class.data) 
    elif request.method == 'POST': 
     logger.error("POST DATA SERVER") 
     json_data = JSONParser().parse(request) 
     serializer_class = DataSerializer(data=json_data) 
     if serializer_class.is_valid(): 
      serializer_class.save() 
      return JSONResponse(serializer_class.data, status=201) 
     return JSONResponse(serializer_class.errors, status=400) 
    </code> 

而以下是我urls.py

<code> 
from django.conf.urls import patterns, include, url 
from rest_framework import routers 
from django.contrib import admin 
from server_app import views 
admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^getDataModel/$', views.DataModel_list), 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) 
) 
</code> 

而且serializers.py

<code> 
from rest_framework import serializers 
from server_app.models import DataModel 

class DataSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = DataModel 
     fields = ('first_name', 'last_name', 'chapter', 'category', 'email', 'mantinada') 
</code> 

models.py

<code> 
from django.db import models 

# Create your models here. 
class DataModel(models.Model): 
    first_name = models.CharField(max_length = 200) 
    last_name = models.CharField(max_length = 200) 
    chapter = models.CharField(max_length = 200) 
    category = models.CharField(max_length = 200) 
    email = models.CharField(max_length = 200) 
    mantinada = models.CharField(max_length = 200) 

</code> 

我已將logger置於GETPOST請求中。當我訪問url爲GET我可以看到結果和記錄器控制檯,但對於POSt請求,我沒有得到任何記錄器信息。任何人都可以告訴我我失蹤了什麼?

在此先感謝。

回答

0

django server末端沒有錯。我錯誤地從android-client方撥打電話,因爲android json object中的keys不同於fieldsmodels。更正密鑰解決了這個問題。