Django REST Framework: как сделать APIView/Serializer браузерным?
Использование serializers.HyperlinkedModelSerializer
с viewsets.ModelViewSet
прекрасно работает для CRUD, как описано в docs. К сожалению, для этого требуется Model
, которого у меня нет на конечной точке входа.
Соответствующие фрагменты кода:
# Serializer
class LoginSerializer(serializers.Serializer):
username = serializers.CharField()
password = serializers.CharField(min_length=8, max_length=50)
# View
class Login(APIView):
permission_classes = [permissions.AllowAny]
def post(self, request: Request, *args, **kwargs):
# Some logic using LoginSerializer
# urls.py
urlpatterns = [
path('v1/login', Login.as_view())
]
Есть идеи? Заранее спасибо!
Пробовали ли вы использовать атрибут класса serializer_class
?
class Login(APIView):
serializer_class = LoginSerializer
permission_classes = [permissions.AllowAny]
def post(self, request: Request, *args, **kwargs):
...
Поле url
в serializers.HyperlinkedModelSerializer
просто использует serializers.HyperlinkedIdentityField
внутренне. Таким образом, вы можете сделать следующее, чтобы получить тот же результат:
# Serializer
class LoginSerializer(serializers.Serializer):
url = serializers.HyperlinkedIdentityField(view_name='login', read_only=True)
username = serializers.CharField()
password = serializers.CharField(min_length=8, max_length=50)
# View
class Login(APIView):
permission_classes = [permissions.AllowAny]
def post(self, request: Request, *args, **kwargs):
# Some logic using LoginSerializer
# urls.py
urlpatterns = [
path('v1/login', Login.as_view(), name='login')
]