Я прочитал много вопросов, так что в отношении кода ошибки 400 и понял, что проблема в основном, когда клиент не отправляет JSON, API ожидает. Тем не менее, я не могу обойти свою проблему кода ошибки 400. Я следую за этим учебником Thinkster Djangular, в регистрации раздела «Новые пользователи», я попадаю в плохой запрос 400. >from rest_framework import permissions, viewsets, status
from rest_framework.response import Response
from authentication.models import Account
from authentication.permissions import IsAccountOwner
from authentication.serializers import AccountSerializer
class AccountViewSet(viewsets.ModelViewSet):
lookup_field = 'username'
queryset = Account.objects.all()
serializer_class = AccountSerializer
def get_permissions(self):
if self.request.method in permissions.SAFE_METHODS:
return (permissions.AllowAny(),)
if self.request.method == 'POST':
return (permissions.AllowAny(),)
return (permissions.IsAuthenticated(), IsAccountOwner(),)
def create(self, request):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
Account.objects.create_user(**serializer.validated_data)
return Response(serializer.validated_data, status=status.HTTP_201_CREATED)
return Response({
'status': 'Bad request',
'message': 'Account could not be created with received data.'
}, status=status.HTTP_400_BAD_REQUEST)
< /code>
Является ли метод создания здесь, который должен переопределить метод создания в классе Createmodelmixin? < /p>
Вот мои сериализаторы? .py < /p>
from django.contrib.auth import update_session_auth_hash
from rest_framework import serializers
from authentication.models import Account
class AccountSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True, required=False)
confirm_password = serializers.CharField(write_only=True, required=False)
class Meta:
model = Account
fields = ('id', 'email', 'username', 'created_at', 'updated_at',
'first_name', 'last_name', 'tagline', 'password',
'confirm_password',)
read_only_fields = ('created_at', 'updated_at',)
def create(self, validated_data):
return Account.objects.create_user(**validated_data)
def update(self, instance, validated_data):
instance.username = validated_data.get('username', instance.username)
instance.tagline = validated_data.get('tagline', instance.tagline)
instance.save()
password = validated_data.get('password', None)
confirm_password = validated_data.get('confirm_password', None)
if password and confirm_password and password == confirm_password:
instance.set_password(password)
instance.save()
update_session_auth_hash(self.context.get('request'), instance)
return instance
< /code>
Когда вы создаете объект, используя метод serializer .save (), атрибуты объекта устанавливаются буквально. Это означает, что пользователь, зарегистрированный в пароле «пароль», будет храниться как «пароль». Это плохо по нескольким причинам: 1) Хранение паролей в простом тексту - это огромная проблема безопасности. 2) Перед их сравнением хэши и паролей Django Haste и Salts Salts, поэтому пользователь не сможет войти в систему, используя «пароль» в качестве своего пароля. Использование Account.objects.create_user () для создания объекта учетной записи.>
Подробнее здесь: https://stackoverflow.com/questions/354 ... equest-400
Django Bad Esforce 400? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
TotalVirus API v3: URL-адрес сканирования возвращает «HTTP 400 Bad Request» [дубликат]
Anonymous » » в форуме Php - 0 Ответы
- 96 Просмотры
-
Последнее сообщение Anonymous
-