Django rest framework отправка данных для просмотра без сериализатора

У меня в приложении стоит модель Magic. Мне нужно, чтобы пользователь, привязанный к этой модели, зашел на свой адрес электронной почты, чтобы что-то проверить, прежде чем он сможет получить доступ к информации. Это должно происходить через RESTful API. Проблема в том, что пользователю не обязательно входить в систему, чтобы получить доступ к этой функции (для дизайнерских решений, которые я не мог контролировать).

Я реализовал логику для генерации необходимой информации и отправки электронной почты (только если такой адрес электронной почты зарегистрирован), аутентификации после доступа к отправленной по электронной почте информации и т. д.

Мой вопрос: как мне реализовать представление, которое принимает адрес электронной почты пользователя в теле (или URL-адресе)?

Подход 1: создайте URL-адрес /magic_api/v1/tdbverification/(?P<email>[\w.@]+)/, извлеките адрес электронной почты и отправьте электронное письмо.

Проблема с 1: кажется, я не могу извлечь электронное письмо а также Мне нужно вернуть объект json без сериализатора

Подход 2: создать представление, которое принимает тело: {"email": "<email@here.com>"}

Проблема с 2: для этого требуется сериализатор без модели (поскольку это представление предназначено только для отправки электронной почты, оно не меняет объекты модели). Я пробовал работать с классом serializers.Serializer, но не мог понять, как включить логику отправки электронной почты.

Мы будем очень благодарны за любую помощь в этом вопросе.

Придется кричать об этом, не включайте конфиденциальные данные пользователя (например, даже электронные письма) в URL-адрес. Никогда никогда. Злоумышленникам намного легче перехватить эти данные.

Jamie Marshall 01.04.2021 04:34
4
1
7 170
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Почему вам всегда нужен сериализатор! Вы можете написать представление без использования сериализатора. Пример

from rest_framework.views import APIView

class Test(APIView):
    def post(self, request):
        email = request.data['email']
        ...  your logic ...
        return Response(...)
from rest_framework_jwt.views import APIView или from rest_framework.generics import APIView?
Gianmar 28.11.2018 17:17

Остальной фреймворк не содержит APIView. из rest_framework.views импортировать APIView

a_k_v 29.11.2018 04:45

Я не думаю, что это приведет к хорошему обзору внутри корня API, и вам придется проводить собственную проверку. Включение базового сериализатора не очень сложно и позволит всем функциям DRF работать должным образом.

Jamie Marshall 01.04.2021 04:26

Вот пример использования сериализатора для проверки данных, а затем отмены метода сохранения для отправки почты: django-rest-framework.org/api-guide/serializers/…

Josh 18.05.2021 09:21

Другие вопросы по теме