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:
Podobnie, jeśli nawiguję do localhost:8000/api-auth/
, Dostaję
Dlaczego to nie działa?
Odpowiedzi:
1 dla odpowiedzi № 1Udał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:
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 ;-)