【问题标题】:Handling JSON Post request in Django rest framework在 Django rest 框架中处理 JSON Post 请求
【发布时间】:2014-04-01 14:10:40
【问题描述】:

我想使用POST 请求在数据库中创建模型实体。 GET 工作正常,但 POST 没有被触发。 views.py如下:

    <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 请求中。当我访问 GET 的 url 时,我可以看到结果和记录器控制台,但对于 POSt 请求,我没有得到任何记录器信息。谁能告诉我我错过了什么?

提前致谢。

【问题讨论】:

    标签: python django django-models django-views django-rest-framework


    【解决方案1】:

    django server 结尾没有任何问题。我从android-client 端打错了电话,因为android json object 中的keysmodels 中的fields 不同。更正键已解决问题。

    【讨论】:

      猜你喜欢
      • 2021-05-06
      • 2018-12-20
      • 2018-07-14
      • 2018-07-31
      • 1970-01-01
      • 2012-08-17
      • 2021-03-07
      • 2016-08-04
      • 2023-03-16
      相关资源
      最近更新 更多