Нет проблем с этим настройкой, разорванной из учебника.
Папка проекта django_example
.
Папка приложения events
.
django_example/settings.py
Добавить:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'events.apps.EventsConfig'
]
Добавить:
events/apps.py
from __future__ import unicode_literals
from django.apps import AppConfig
class EventsConfig(AppConfig):
name = 'events'
Для контекста, events/models.py
выглядит следующим образом:
from __future__ import unicode_literals
from django.db import models
# Create your models here.
class Event(models.Model):
name = models.TextField()
kind = models.TextField()
location = models.TextField()
start_hour = models.TextField()
end_hour = models.TextField()
creator = models.TextField()
class Meta:
verbose_name = "Event"
verbose_name_plural = "Events"
def __str__(self):
return self.name
Не используйте type
в качестве названия поля.
Добавить:
events/serializers.py
from rest_framework import serializers
from .models import Event
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = ('name', 'kind')
events/views.py
Добавить:
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from events.models import Event
from events.serializers import EventSerializer
class JSONResponse(HttpResponse):
"""
An HttpResponse that renders its content into JSON.
"""
def __init__(self, data, **kwargs):
content = JSONRenderer().render(data)
kwargs['content_type'] = 'application/json'
super(JSONResponse, self).__init__(content, **kwargs)
@csrf_exempt
def event_list(request):
"""
List all code snippets, or create a new snippet.
"""
if request.method == 'GET':
snippets = Event.objects.all()
serializer = EventSerializer(snippets, many=True)
return JSONResponse(serializer.data)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = EventSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JSONResponse(serializer.data, status=201)
return JSONResponse(serializer.errors, status=400)
@csrf_exempt
def event_detail(request, pk):
"""
Retrieve, update or delete a code snippet.
"""
try:
event = Event.objects.get(pk=pk)
except event.DoesNotExist:
return HttpResponse(status=404)
if request.method == 'GET':
serializer = EventSerializer(snippet)
return JSONResponse(serializer.data)
elif request.method == 'PUT':
data = JSONParser().parse(request)
serializer = EventSerializer(event, data=data)
if serializer.is_valid():
serializer.save()
return JSONResponse(serializer.data)
return JSONResponse(serializer.errors, status=400)
elif request.method == 'DELETE':
event.delete()
return HttpResponse(status=204)
events/urls.py
Добавить:
from django.conf.urls import url
from events import views
urlpatterns = [
url(r'^events/$', views.event_list),
url(r'^events/(?P<pk>[0-9]+)/$', views.event_detail),
]
Добавить:
django_example/urls.py
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('events.urls'))
]
Если вы запускали свои миграции после того как вы населенный models.py вы должны быть в состоянии увидеть ответ от API, даже если это просто пустой список.
Пожалуйста, добавьте маршруты и виды. – seanmus
@SeanM Я добавил маршруты. но у меня нет каких-либо просмотров, поскольку я думаю, получить метод делать то же самое с набором представлений.Разве это не так? – cano
Вы запускали makemigrations и мигрировали? – seanmus