#python #django #rest #django-rest-framework #django-rest-knox
#python #django #rest #django-rest-framework #django-rest-knox
Вопрос:
В моем приложении django мне нужно проверить, существует ли пользователь, используя номер телефона. Вход в систему осуществляется с использованием номера телефона и OTP. Я могу проверить, существует ли пользователь, с помощью запроса get на
"/api/profiles/<primary key here>/".
Однако, если я запрошу
"/api/profiles/"
я получаю список всех пользователей в базе данных.
Мне нужно, чтобы мое приложение ничего не возвращало при запросе
"/api/profiles/"
и данные пользователя при запросе
"/api/profiles/<primary key here>/"
Как мне это сделать?
Сериализатор — это сериализатор базовой модели
class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
fields = [
"id",
"is_superuser",
"fullname",
"email",
"is_staff",
"is_active",
# "birthdate",
"phone_number",
"created_at",
"updated_at",
]
URL-адреса:
router = routers.DefaultRouter()
router.register(r"profiles", views.UserProfileViewSet)
urlpatterns = [
path("admin", admin.site.urls),
path("restauth/", include("rest_framework.urls", namespace="restauth")),
path("api/", include(router.urls)),
число просмотров:
class UserProfileViewSet(viewsets.ModelViewSet):
queryset = UserProfile.objects.all()
serializer_class = UserProfileSerializer
Комментарии:
1. можете ли вы опубликовать свой код
2. добавлен сериализатор, представления и URL-код
Ответ №1:
Можете ли вы попробовать этот код
from rest_framework import mixins
class UserProfileViewSet(viewsets.ViewSet, mixins.RetrieveModelMixin):
queryset = UserProfile.objects.all()
serializer_class = UserProfileSerializer
Ответ №2:
Я не смог найти никаких ответов, делающих это с помощью сериализаторов. Итак, я создал представление на основе функций, которое принимало номер телефона, используя form-data, и обновлял пароль как случайный 6-значный otp каждый раз, когда был сделан запрос и пользователь существовал.
Проверка пользователя:
try:
UserProfiles.objects.get(phone_number=request.POST["phone_number"]
# generate otp
return HttpResponse(otp)
except:
return HttpResponse("user not found")