python framework - Django Rest 프레임 워크의 다중 모델?



tutorial get (2)

장고 Rest 프레임 워크를 사용하고 있습니다. 여러 모델을 직렬화하고 응답으로 보내려고합니다. 현재보기 당 하나의 모델 만 보낼 수 있습니다 (아래 CartView 는 Cart 객체 만 보냅니다). 다음 모델 (관련 없음)이있을 수 있습니다.

class Ship_address(models.Model):
   ...

class Bill_address(models.Model):
   ...

class Cart(models.Model):
   ...

class Giftwrap(models.Model):
   ...

DjangoRestMultiplemodels 사용하여 시도했지만 괜찮습니다.하지만 몇 가지 한계가 있습니다. 내장 된 방법이 있습니까? 다음보기에서 만든 serializer를 추가 할 수 있습니까?

from rest_framework.views import APIView

class CartView(APIView):
    """
    Returns the Details of the cart
    """

    def get(self, request, format=None, **kwargs):
        cart = get_cart(request)
        serializer = CartSerializer(cart)
        # Can't I append anything to serializer class like below ??
        # serializer.append(anotherserialzed_object) ??
        return Response(serializer.data)

나는 DRF를 정말 좋아한다. 하지만 (여러 개의 객체를 보내는)이 유스 케이스는 평범한 오래된 장고 뷰를 작성하는 것이 그러한 요구 사항에 더 적합 할 것이라 생각합니다.


Answers

APIView 는 사용자가 GET이 단일 모델을 반환 할 것으로 기대하는 ModelViewSet 과 반대되는 APIView 이기 때문에 사용자 정의 할 수 있습니다. 너무 이상하지는 않습니다. 예를 들어, 다른 모델의 여러 객체를 반환 할 수 있습니다. 당신의 GET 응답

def get(self, request, format=None, **kwargs):
    cart = get_cart(request)
    cart_serializer = CartSerializer(cart)
    another_serializer = AnotherSerializer(another_object)

    return Response({
        'cart': cart_serializer.data,
        'another': another_serializer.data,
        'yet_another_field': 'yet another value',
    })

사용자 이름과 암호를 보내려면 GET을 사용하면 안됩니다. URL 막대에 정보가 표시되고 보안 위험 이 발생할 수 있으므로 좋지 않습니다. 대신 POST를 사용하십시오. 또한, 나는 당신이 사용자를 인증하려고 노력하고있는 것 같아요. 완전히 빌드 된 무언가를 다룰 정도로 많은 일 (새로운 미들웨어 생성)을하고있는 것처럼 보이며 , 문서 에서 예제를 얻으려고합니다.

from django.contrib.auth import authenticate, login

def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            # Redirect to a success page.
        else:
            # Return a 'disabled account' error message
    else:
        # Return an 'invalid login' error message.

나 자신은 login_required 데코레이터를 사용하는 것을 정말 좋아한다. 사용하기가 매우 쉽다. 희망은 도움이됩니다.





python django django-rest-framework