Django Rest API выдает код состояния 500

Передо мной стоит задача создать Django Rest API, содержащий сериализатор. Вот конкретные инструкции:

Инструкции

Вот мой model.py:

from django.db import models

class Wish(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=100,blank=True,default='')
    wishtext = models.TextField()

    class Meta:
        ordering = ('created',)

Мой serializers.py:

from rest_framework import serializers
from wishes.models import Wish

#Add WishSerializer implementation here
class WishSerializer(serializers.Serializer):
    created = serializers.DateTimeField()
    title = serializers.CharField(max_length=100, default='')
    wishtext = serializers.CharField()

my views.py:

from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse,HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse,HttpResponse
from rest_framework.response import Response
from rest_framework.parsers import JSONParser
from wishes.models import Wish
from wishes.serializers import WishSerializer
@csrf_exempt
def wish_list(request):
    pass
    """
    List all wishes or create a new wish
    """
    if request.method == 'GET':
        qs = Wish.objects.all()
        serializer = WishSerializer(qs, many=True)
        return Response(serializer.data)

    if request.method == 'POST':
        serializer = WishSerializer(data=request.data)
        if serializer.is_valid():
          serializer.save()
          return Response(serializer.data, status=201)  

@csrf_exempt
def wish_detail(request,pk):
    pass
    """
    Retrieve, update or delete a birthday wish.
    """
    try:
        wish = Wish.objects.get(pk=pk)
    except Wish.DoesNotExist:
        return HttpResponse(status=404)

    if request.method == 'GET':
        serializer =  WishSerializer(wish)
        return Response(serializer.data)

    elif request.method == 'PUT':
        serializer = WishSerializer(instance=wish, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=201)


    elif request.method == 'DELETE':
        wish.delete()
        return Response(status=204)

и мой url.py:

from django.conf.urls import url
from wishes import views

urlpatterns = [
    url(r'^wishes/$',views.wish_list),
    url(r'^wishes/(?P<pk>[0-9]+)/$',views.wish_detail),
]

Я должен пройти tests.py, чтобы мой API был успешным:

from django.test import TestCase
from rest_framework.test import RequestsClient
import json

class RestTestCase(TestCase):

    def setUp(self):
        self.test_1 = []
        with open('TestData/http001.json') as f:
            for line in f:
                self.test_1.append(line)

    def test_get_all_wishes(self):
        client = RequestsClient()
        for ro in self.test_1:
            row = json.loads(ro)
            print (row)
            res = {}
            if row['request']['method'] == "GET":
                res = client.get('http://localhost:8000' +
                                 row['request']['url'] + '/')
            elif row['request']['method'] == "POST":
                res = client.post(
                    'http://localhost:8000' + row['request']['url'] + '/', json=row['request']['body'])
            self.assertEqual(res.status_code, row['response']['status_code'])
            if row['response']['headers'] != {}:
                self.assertEqual(
                    res.headers['Content-Type'], row['response']['headers']['Content-Type'])
            if row['response']['body'] != {}:
                response = json.loads(res.text)
                self.assertEqual(response, row['response']['body'])

Моя консоль, когда я запускаю тесты:

user@workspaceimog7xxq4xwqa1zj:/projects/challenge$ python3 manage.py makemigrations && python3e.py migrate --run-syncdb && python3 manage.py test Изменений не обнаружено Операции, которые необходимо выполнить:
Синхронизировать немигрированные приложения: messages, rest_framework, staticfiles
. Применить все миграции: admin, auth, contenttypes, sessions, wishes Синхронизация приложений без миграций: Создание таблиц... Запуск отложенного SQL... Выполнение миграций: Нет миграций для применения. Создание тестовой базы данных для псевдонима 'default'... Проверка системы не выявила никаких проблем (0 промолчали).

Запуск тестов... ---------------------------------------------------------------------- F ====================================================================== FAIL [0.025s]: test_get_all_wishes (wishes.tests.RestTestCase) ---------------------------------------------------------------------- Traceback (last recent call last): Файл "/projects/challenge/wishes/tests.py", строка 25, in test_get_all_wishes self.assertEqual(res.status_code, row['response']['status_code']) AssertionError: 500 != 200

Stdout: {'response': {'status_code': 200, 'body': [], 'headers': {'Content-Type': 'application/json'}}, 'request': {'headers': {}, 'url': '/wishes', 'body': {}, 'method': 'GET'}}

.

---------------------------------------------------------------------- Выполнен 1 тест за 0.026с

FAILED (failures=1)

Генерирование отчетов XML... Уничтожение тестовой базы данных для псевдонима 'default'... user@workspaceimog7xxq4xwqa1zj:/projects/challenge$

.

Как видно, попытка получить все желания вернет код состояния 500.

Как мне исправить мой API, чтобы он не возвращал ошибки и успешно проходил тесты? Я совершенно уверен, что проблема в моем views.py или в моем serializers.py, но я долго искал и не нашел, в чем дело.

Вернуться на верх