我正在尝试为自定义用户模型创建API,以使用通用视图添加新用户。
我遇到一个错误,无法确定其根本原因。 虽然用户添加成功。但是我仍然收到HTTP 500错误。
在/ api / new_user上配置不正确 无法使用视图名称“ user-detail”来解析超链接关系的URL。您可能没有在API中包含相关模型,或者在此字段上错误地配置了
lookup_field
属性。
我的apiView类如下。
class CreateUserView(CreateAPIView):
"""
This view creates a new user
"""
serializer_class = UserSerializer
def perform_create(self, serializer: UserSerializer):
try:
serializer.save(
email=serializer._validated_data['email'],
first_name=serializer._validated_data['first_name'],
last_name=serializer._validated_data['last_name'],
password=make_password(serializer._validated_data['password'])
)
except Exception as exception:
return JsonResponse({
'success': False,
'error': 'Error occured in registering user!'
},
status=500)
return JsonResponse({'success': True})
和我的序列化器类如下。
class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(max_length=128, min_length=8,
style={'input_type': 'password'}, write_only=True)
class Meta:
model = User
fields = ('url', 'id', 'email', 'first_name', 'last_name', 'password',)
我的网址格式文件如下
urlpatterns = [
path('api/new_user', CreateUserView.as_view()),
path('api/login/', obtain_auth_token, name='api-token-auth')
]
请帮助我解决这个问题。
答案 0 :(得分:0)
您可以使用rest_framework view sets来避免对lookup_fields的需求。
这是一个例子
CreateUserView
...
from rest_framework import viewsets
...
class CreateUserView(viewsets.ModelViewSet):
serializer_class = UserSerializer
class Meta:
model = User
网址模式
urlpatterns = [
path('admin/', admin.site.urls),
path('api/new_user', CreateUserView.as_view({'post': 'create'}))
]
这将立即为您提供功能。
进一步的自定义:
create
方法:class CreateUserView(viewsets.ModelViewSet):
serializer_class = UserSerializer
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
return JsonResponse({'success': True})
class Meta:
model = User