Django Api url конфликтует всякий раз, когда я применяю url приложения в urlpatterns, и я не знаю, что делать дальше
Итак, всякий раз, когда я добавляю этот path('api/', include('api.urls')) в родительские урлы, я получаю кучу ошибок в терминале, и если я удаляю его из urlpatterns, я получаю page not found при перезагрузке localhost в браузере, и на странице терминала он показывает "Broken pipe from ('127.0.0.1', 8441)", и я действительно очень запутался прямо сейчас.
Api urls
from rest_framework.routers import DefaultRouter
from . import views
router = DefaultRouter()
router.register('users', views.UserViewSet, basename='user')
urlpatterns = router.urls
Родительские урлы
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api-auth/', include('rest_framework.urls')),
path('api/', include('api.urls'))
]
Ошибки
C:\Users\Administrator\Desktop\CRUD\songcrud\api\views.py changed, reloading.
Performing system checks...
System check identified no issues (0 silenced).
November 07, 2022 - 01:32:32
Django version 4.1.3, using settings 'songcrud.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Not Found: /
[07/Nov/2022 01:32:47] "GET / HTTP/1.1" 404 2170
Not Found: /favicon.ico
[07/Nov/2022 01:32:47,092] - Broken pipe from ('127.0.0.1', 8441)
C:\Users\Administrator\Desktop\CRUD\songcrud\songcrud\urls.py changed, reloading.
Watching for file changes with StatReloader
Performing system checks...
Exception in thread django-main-thread:
Traceback (most recent call last):
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2288.0_x64__qbz5n2kfra8p0\lib\threading.py", line 1016, in _bootstrap_inner
self.run()
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2288.0_x64__qbz5n2kfra8p0\lib\threading.py", line 953, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\Administrator\Desktop\CRUD\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "C:\Users\Administrator\Desktop\CRUD\lib\site-packages\django\core\management\commands\runserver.py", line 134, in inner_run
self.check(display_num_errors=True)
File "C:\Users\Administrator\Desktop\CRUD\lib\site-packages\django\core\management\base.py", line 475, in check
all_issues = checks.run_checks(
File "C:\Users\Administrator\Desktop\CRUD\lib\site-packages\django\core\checks\registry.py", line 88, in run_checks
new_errors = check(app_configs=app_configs, databases=databases)
File "C:\Users\Administrator\Desktop\CRUD\lib\site-packages\django\core\checks\urls.py", line 14, in check_url_config
return check_resolver(resolver)
File "C:\Users\Administrator\Desktop\CRUD\lib\site-packages\django\core\checks\urls.py", line 24, in check_resolver
return check_method()
File "C:\Users\Administrator\Desktop\CRUD\lib\site-packages\django\urls\resolvers.py", line 494, in check
for pattern in self.url_patterns:
File "C:\Users\Administrator\Desktop\CRUD\lib\site-packages\django\utils\functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "C:\Users\Administrator\Desktop\CRUD\lib\site-packages\django\urls\resolvers.py", line 715, in url_patterns
utSerializer'. Did you mean: 'UserInputSerializer'?
вот что я получаю из браузера, когда это удалено path('api/', include('api.urls'))
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/
Using the URLconf defined in songcrud.urls, Django tried these URL patterns, in this order:
admin/
api-auth/
The empty path didn’t match any of these.
You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.
Возможно, я ошибаюсь, помогите мне, пожалуйста,
Вот мой views.py
from rest_framework import viewsets, permissions, status
from rest_framework.response import Response
from django.contrib.auth import get_user_model
from .permissions import IsCreatorOrAdminReadOnly
from . import serializers
# Create your views here.
UserModel = get_user_model()
class UserViewSet(viewsets.ModelViewSet):
queryset = UserModel.objects.all()
default_serializer_class = serializers.UserOutputSerializer
serializers_classes = {
"create": serializers.UserInputSerializer
}
def create(self, request, *args, **kwargs):
"""
User SignUp
- Allow anyone to signup (without authentication)
"""
self.check_permissions(request)
serializer = serializers.UserInputSerializer(data=request.POST)
serializer.is_valid(raise_exception=True)
user = UserModel.objects.create_user(
email=serializer.validated_data["email"],
first_name=serializer.validated_data["first_name"],
last_name=serializer.validated_data["last_name"],
password=serializer.validated_data["password"]
)
response = serializers.UserInputSerializer(user).data
return Response(response, status=status.HTTP_201_CREATED)
def get_permissions(self):
if self.action == 'create': # Create, List, Retrieve, Update, or Destory
permission_classes = [permissions.AllowAny]
elif self.action == 'retrieve':
permission_classes = [permissions.IsAuthenticated]
elif self.action in ['update', 'partial_update', 'destroy']:
permission_classes = [
IsCreatorOrAdminReadOnly, permissions.IsAuthenticated]
elif self.action == 'list':
permission_classes = [permissions.IsAdminUser]
else:
permissions_classes = [permissions.IsAdminUser]
return [permission() for permission in permission_classes]
return super().get_permissions()
from rest_framework import viewsets, permissions, status
from rest_framework.response import Response
from django.contrib.auth import get_user_model
from .permissions import IsCreatorOrAdminReadOnly
from . import serializers
# Create your views here.
UserModel = get_user_model()
class UserViewSet(viewsets.ModelViewSet):
queryset = UserModel.objects.all()
default_serializer_class = serializers.UserOutputSerializer
serializers_classes = {
"create": serializers.UserInputSerializer
}
def create(self, request, *args, **kwargs):
"""
User SignUp
- Allow anyone to signup (without authentication)
"""
self.check_permissions(request)
serializer = serializers.UserInputSerializer(data=request.POST)
serializer.is_valid(raise_exception=True)
user = UserModel.objects.create_user(
email=serializer.validated_data["email"],
first_name=serializer.validated_data["first_name"],
last_name=serializer.validated_data["last_name"],
password=serializer.validated_data["password"]
)
response = serializers.UserInputSerializer(user).data
return Response(response, status=status.HTTP_201_CREATED)
def get_permissions(self):
if self.action == 'create': # Create, List, Retrieve, Update, or Destory
permission_classes = [permissions.AllowAny]
elif self.action == 'retrieve':
permission_classes = [permissions.IsAuthenticated]
elif self.action in ['update', 'partial_update', 'destroy']:
permission_classes = [
IsCreatorOrAdminReadOnly, permissions.IsAuthenticated]
elif self.action == 'list':
permission_classes = [permissions.IsAdminUser]
else:
permissions_classes = [permissions.IsAdminUser]
return [permission() for permission in permission_classes]
return super().get_permissions()
from rest_framework import viewsets, permissions, status
from rest_framework.response import Response
from django.contrib.auth import get_user_model
from .permissions import IsCreatorOrAdminReadOnly
from . import serializers
# Create your views here.
UserModel = get_user_model()
class UserViewSet(viewsets.ModelViewSet):
queryset = UserModel.objects.all()
default_serializer_class = serializers.UserOutputSerializer
serializers_classes = {
"create": serializers.UserInputSerializer
}
def create(self, request, *args, **kwargs):
"""
User SignUp
- Allow anyone to signup (without authentication)
"""
self.check_permissions(request)
serializer = serializers.UserInputSerializer(data=request.POST)
serializer.is_valid(raise_exception=True)
user = UserModel.objects.create_user(
email=serializer.validated_data["email"],
first_name=serializer.validated_data["first_name"],
last_name=serializer.validated_data["last_name"],
password=serializer.validated_data["password"]
)
response = serializers.UserInputSerializer(user).data
return Response(response, status=status.HTTP_201_CREATED)
def get_permissions(self):
if self.action == 'create': # Create, List, Retrieve, Update, or Destory
permission_classes = [permissions.AllowAny]
elif self.action == 'retrieve':
permission_classes = [permissions.IsAuthenticated]
elif self.action in ['update', 'partial_update', 'destroy']:
permission_classes = [
IsCreatorOrAdminReadOnly, permissions.IsAuthenticated]
elif self.action == 'list':
permission_classes = [permissions.IsAdminUser]
else:
permissions_classes = [permissions.IsAdminUser]
return [permission() for permission in permission_classes]
return super().get_permissions()