Что мне нужно сделать с функцией в views.py работает?

#python #django #django-rest-framework #django-views

#python #django #django-rest-framework #django-представления

Вопрос:

Я работаю над API, и мне нужно создать функцию, которая не допускала бы тот же формат post менее чем за 10 минут, но я просто пытаюсь напечатать что-то в терминале, если пользователь использует метод запроса «GET», но он не работает.

urls.py:

 from django.urls import include, path 
from rest_framework import routers 
from . import views 

router = routers.DefaultRouter()

router.register(r'products',views.ProductsViewSet)
router.register(r'product-images',views.ProductImagesViewSet)
#router.register(r'^products/', views.testIt, basename="TestIt")

urlpatterns = [
    path('', include(router.urls)), 
    path('api-auth/', include('rest_framework.urls',
namespace='rest_framework')), 
    path('products/', views.testIt, name = "testIt"),
       
]
  

views.py:

 from rest_framework import viewsets
from .serializers import ProductsSerializers
from .serializers import ProductImagesSerializers
from .models import Products
from .models import ProductImages
from rest_framework import status   
from rest_framework.throttling import UserRateThrottle
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.decorators import api_view
from django.http import JsonResponse


class ProductsViewSet(viewsets.ModelViewSet, APIView):
    queryset = Products.objects.all().order_by('id')
    serializer_class = ProductsSerializers   
     
def testIt(self, request, pk=None):
    if request.method == 'GET':

        print('Testando')
    return Response('Teste!', status = status.HTTP_400_NOT_FOUND)
            
   
class ProductImagesViewSet(viewsets.ModelViewSet):
    queryset = ProductImages.objects.all().order_by('id')
    serializer_class = ProductImagesSerializers
  

Я все еще вижу данные, но они не возвращают никаких сообщений и ничего не печатают, когда я использую метод get.
Заранее спасибо!!

Комментарии:

1. Как запустить приложение wsgi? Может быть, это какая-то буферизация. Попробуйте добавить flush=True к вам print функцию. Вы также можете использовать регистратор вместо печати.

2. Самая большая проблема в том, что это сработало, когда я создавал веб-сайт с помощью Django. Проблема возникла с тех пор, как я начал работать с rest framework, я не в первый раз пытаюсь и даже впервые сталкиваюсь с этой ошибкой :/

Ответ №1:

Первый параметр, который вы передаете функции self , — удалить его. В противном случае Request объект будет находиться в той переменной, а request не в той, с которой вы работаете в if инструкции.

Кроме того, украсьте функцию api_view : https://www.django-rest-framework.org/api-guide/views/#api_view

Комментарии:

1. Он все равно не работает, даже если удалить параметр [self] .

2. Отредактировал мой ответ, извините, я забыл