/ / Uruchamianie przykładu Django REST z Django 2.0 - python, django, reszta, django-rest-framework

Uruchamianie przykładu Django REST z Django 2.0 - python, django, rest, django-rest-framework

Próbuję dostosować przedstawiony przykład http://www.django-rest-framework.org/ do Django 2.0, ale mam do czynienia z błędem.

Po pierwsze, stworzyłem projekt przy użyciu django-admin startproject rest_example. Dodałem "rest_framework" do INSTALLED_APPS lista w settings.py i dodał REST_FRAMEWORK zmienna:

REST_FRAMEWORK = {
# Use Django"s standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
"DEFAULT_PERMISSION_CLASSES": [
"rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly"
]
}

Oto moja adaptacja urls.py:

from django.contrib import admin
from django.urls import path, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets


class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ("url", "username", "email", "is_staff")


class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer


router = routers.DefaultRouter()
router.register(r"users", UserViewSet)

urlpatterns = [
path("admin/", admin.site.urls),
path("api-auth/", include("rest_framework.urls"))
]

Problem polega na tym, że kiedy ja python manage.py runserver i przejdź do localhost:8000, Dostaję 404:

wprowadź opis obrazu tutaj

Podobnie, jeśli nawiguję do localhost:8000/api-auth/, Dostaję

wprowadź opis obrazu tutaj

Dlaczego to nie działa?

Odpowiedzi:

1 dla odpowiedzi № 1

Udało mi się to naprawić, zmieniając definicję urlpatterns do

urlpatterns = [
path("admin/", admin.site.urls),
]

urlpatterns += router.urls

i także działa python manage.py migrate przed uruchomieniem serwera. Teraz, jeśli pójdę localhost:8000/users/ Otrzymuję widok listy użytkowników:

wprowadź opis obrazu tutaj

gdzie uciekłem python manage.py createsuperuser raz, aby utworzyć (manekina) użytkownika.


0 dla odpowiedzi nr 2

Alternatywnie możesz dodać adresy URL do ich własnych ścieżek podrzędnych:

urlpatterns = [
path("admin/", admin.site.urls),
path("api/", include(router.urls)),
]

Ale w przeciwnym razie konfiguracja bazy danych i rekord użytkownika będą na pewno potrzebne, aby twój przykład działał zgodnie z oczekiwaniami ;-)