Невозможно сохранить данные с помощью запроса POST в API django-rest - PullRequest
0 голосов
/ 07 февраля 2019

Отказ от ответственности: - Я новичок.Я пытаюсь создать REST API Django, который может поддерживать все операции CRUD.Я могу получить данные из вызова API (127.0.0.1/api/get), а также могу добавлять, изменять и удалять записи вручную из пользовательского интерфейса (после запроса GET).Я создал одну форму в каталоге шаблонов, которая принимает входные данные от пользователя и при отправке отправляется на тот же URL-адрес (127.0.0.1/api/get), но данные не сохраняются, а вместо этого возвращает следующее: - HTTP 400 Bad RequestРазрешить: GET, POST, HEAD, OPTIONS Тип содержимого: application / json Зависит: Accept

{"sourceName»: [«Это поле обязательно для заполнения».], "sourceURL": ["Это поле обязательно для заполнения."]}

У меня есть только одно приложение (источник).views.py: -

from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
from source import models
from source import serializers
from django.shortcuts import render
from rest_framework import viewsets
from rest_framework.views import APIView

def home(request):
    return render(request, 'Forms/input.html')

class SourceViewset(viewsets.ModelViewSet):
    print("Inside ConnectionInfoViewset..")
    queryset = models.Source.objects.all()
    serializer_class = serializers.SourceSerializer
    print("Inside ConnectionInfoViewset..")

    def post(self,request):
        print("Inside POST")
        return JsonResponse("From POST", safe=False)
        serializer = serializers.SourceSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


source_urls.py
from django.urls import path, include
from source import views
from rest_framework import routers
from . import views
router = routers.DefaultRouter()
router.register('', views.SourceViewset)

urlpatterns = [
    path('', views.home),
    path('get/', include(router.urls)),
]

serializers.py:-

from rest_framework import serializers
from source import models
from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt

class SourceSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Source
        # fields = '__all__'
        fields = ('sourceName','sourceURL')

models.py:- 

from django.db import models

# Create your models here.

class Source(models.Model):
    sourceName =  models.CharField(max_length = 40)
    sourceURL = models.CharField(max_length = 40)    

def __str__(self):
    return self.__all__

input.html:- 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form action="/api/get/"  method = "POST">
        {% csrf_token %}
        <input type="text" placeholder="SourceName" name = 'user_name'> <br>
        <input type="text" placeholder="SourceURL" name = 'password'><br>
        <button type="submit">Submit</button>
    </form>
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019
class SourceViewset(viewsets.ModelViewSet):
    def list(self, request):
        print("inside list")
        queryset = models.Source.objects.all()
        serializer_class = serializers.SourceSerializer

    def create(self, request):
        serializer = serializers.SourceSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Вы хотите реализовать собственный обработчик запросов GET и POST, он должен выглядеть следующим образом?для приведенного выше примера, так как он не работает, как это. Очевидно, я что-то упустил, вы можете исправить этот пример GET и POST?

0 голосов
/ 07 февраля 2019

Это то, как viewset определяется в пакете DRF, вы можете написать свой собственный код метода внутри соответствующих блоков.вам нужно отлавливать submit в ajax и вызывать API.Вот как это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...