from django.contrib.auth.models import User
class UserModel(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="user_model")
interests = models.ManyToManyField(Interest, related_name="user_model", blank=True)
class Meta:
verbose_name = "User"
verbose_name_plural = "Users"
def __str__(self):
return self.user.username
@property
def login(self):
return self.user.username
@property
def email(self):
return self.user.email
PASSWORD_HASHERS = [
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
]
urlpatterns = [
path('admin/', admin.site.urls),
path('models/', views.model_list, name='model-list'),
path('models/<int:model_id>/', views.model_detail, name='model-detail'),
path('datasets/', views.dataset_list, name='dataset-list'),
path('datasets/<int:dataset_id>/', views.dataset_detail, name='dataset-detail'),
path('trained-models/', views.trained_model_list, name='trained-model-list'),
path('trained-models/<int:trained_model_id>/', views.trained_model_detail, name='trained-model-detail'),
path('users/', views.user_list, name='user-list'),
path('users/<int:user_id>/', views.user_detail, name='user-detail'),
path('users/<str:login>/', views.user_login_detail, name='user-login-detail'),
path('users-create/', views.create_user_and_user_model, name='user-create'),
path('user-model/<int:user_id>/', views.update_user_model_trained_model, name='user-model-update'),
path('history/<int:user_id>/', views.history_detail, name='history-detail'),
path('predict/<int:user_id>/', views.predict, name='result'),
path('image/<int:image_id>/', views.get_image, name='image'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
@api_view(['POST'])
@permission_classes([permissions.AllowAny])
def register(request):
if request.method == 'POST':
user_data = request.data
if not user_data:
return Response({"error": "User data is required"}, status=status.HTTP_400_BAD_REQUEST)
user_serializer = RegisterSerializer(data=user_data)
if user_serializer.is_valid():
user = user_serializer.save()
else:
return Response(user_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
first_trained_model = TrainedModel.objects.first()
try:
user_model = UserModel.objects.create(
user=user,
trained_model=first_trained_model
)
except Exception as e:
user.delete()
return Response({"error": f"An unexpected error occurred: {str(e)}"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
return Response({"user_id": user.id}, status=status.HTTP_201_CREATED)
urlpatterns = [
path('token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]
@permission_classes([permissions.IsAuthenticated])
@api_view(['PUT'])
@permission_classes([permissions.IsAuthenticated])
def change_password(request):
serializer = ChangePasswordSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
if not request.user.check_password(serializer.validated_data.get("old_password")):
return Response({"old_password": ["Wrong password."]}, status=status.HTTP_400_BAD_REQUEST)
request.user.set_password(serializer.validated_data.get("new_password"))
request.user.save()
update_session_auth_hash(request, request.user)
return Response(status=status.HTTP_204_NO_CONTENT)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
TokenBlacklistView.as_view()()