Python 在Django rest框架中处理JSON Post请求
我想使用Python 在Django rest框架中处理JSON Post请求,python,django,django-models,django-views,django-rest-framework,Python,Django,Django Models,Django Views,Django Rest Framework,我想使用POSTrequest在数据库中创建模型实体获取工作正常,但未触发发布视图.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_f
POST
request在数据库中创建模型实体<代码>获取工作正常,但未触发发布
<代码>视图.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>
下面是我的url.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>
<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>
<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>
和serializers.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>
<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>
<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>
models.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>
<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>
<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
放入GET
和POST
请求中。当我访问GET
的url时,我可以看到结果和记录器控制台,但对于POSt
请求,我没有获得任何记录器信息。谁能告诉我我错过了什么
提前感谢。django服务器端没有问题。我从
android客户端
端错误地调用,因为androidjson对象
中的键与模型
中的字段不同。校正钥匙解决了这个问题