from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import permissions, status from django.http import HttpRequest from django.contrib.auth import login from rest_framework.authentication import SessionAuthentication from django.contrib.auth.models import User import re class EditView(APIView): permission_classes = (permissions.IsAuthenticated,) authentication_classes = (SessionAuthentication,) def get(self, request: HttpRequest): return Response({"username": request.user.username, "id": request.user.pk}) def patch(self, request: HttpRequest): data: dict = request.data current_password: str = data.get("current_password") if (current_password is None): return Response({"current_password": ["This field may not be blank."]}) user_object = request.user if (user_object.check_password(current_password) == False): return Response({"current_password": ["Password is wrong."]}) new_username = data.get("username", user_object.username) if (new_username != user_object.username): if (User.objects.filter(username=new_username).exists()): return Response({"username": ["A user with that username already exists."]}) if (set(new_username) == {' '}): return Response({"username": ["This field may not be blank."]}) if (re.search('^([a-z]||\@||\+||\-||\_)+$', new_username) is None): return Response({"username":["Enter a valid username. This value may contain only letters, numbers, and @/./+/-/_ characters."]}) new_password: str = data.get("password") if (new_password is not None): user_object.set_password(new_password) user_object.save() return Response("data has been alterate")