Я пытаюсь создать Rest_Api на основе класса в Python django, но выдает ошибку
Вот код моего файла Views.py:
from django.shortcuts import render
from.models import*
from . serializers import ANI_News_DetailSerializer
from rest_framework.decorators import APIView
from rest_framework.response import Response
from rest_framework import status
class NewsList(APIView):
def get(self, request):
news = ANI_News_Detail.objects.all()
serializer = ANI_News_DetailSerializer(news, many=True)
return Response(serializer.data)
def post(self,request):
serializer = ANI_News_DetailSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,status=status.HTTP_201_CREATED)
return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)
Это файл Apps url.py-:
from pathlib import Path
from django.urls import path
from django.conf.urls.static import static
from django.conf import settings
#from rest_framework.urlpatterns import format_suffix_patterns
from . import views
urlpatterns = [
path('',views.home,name='home'),
#path('news/',views.news_list),
#path('news/<int:pk>/',views.news_details)
Path('news/', views.NewsList.as_view())
]+ static(settings.MEDIA_URL,document_root = settings.MEDIA_ROOT)
Url файла проекта-:
from django.contrib import admin
from django.urls import path,include
#from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('articles.urls')),
#path('news/',views.ANI_newsList.as_view()),
]
Если я могу запустить команды как runserver, то появляется ошибка:
folder\myblogsite22\myblogsite\myblogsite\urls.py", line 22, in <module>
path('',include('articles.urls')),
File "C:\Users\Gaurav\AppData\Local\Programs\Python\Python39\lib\site-packages\django\urls\conf.py", line 34, in include
urlconf_module = import_module(urlconf_module)
File "C:\Users\Gaurav\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 790, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "C:\Users\Gaurav\Desktop\sandeep\san\New folder\myblogsite22\myblogsite\articles\urls.py", line 12, in <module>
Path('news/', views.NewsList.as_view())
File "C:\Users\Gaurav\AppData\Local\Programs\Python\Python39\lib\pathlib.py", line 1071, in __new__
self = cls._from_parts(args, init=False)
File "C:\Users\Gaurav\AppData\Local\Programs\Python\Python39\lib\pathlib.py", line 696, in _from_parts
drv, root, parts = self._parse_args(args)
File "C:\Users\Gaurav\AppData\Local\Programs\Python\Python39\lib\pathlib.py", line 680, in _parse_args
a = os.fspath(a)
TypeError: expected str, bytes or os.PathLike object, not function
Пожалуйста, помогите найти решения Примечание: если я пробую апи на основе функций, то они работают нормально, но не работают апи на основе классов
Измените ваш urls.py так, чтобы вы использовали django.urls.path во всех ваших шаблонах, а не pathlib.Path
from pathlib import Path # Delete this line
...
urlpatterns = [
...
path('news/', views.NewsList.as_view()), # Use path with a lowercase p
]