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, но я долго искал и не нашел, в чем дело.