added account info and change password

This commit is contained in:
puckoprutt 2025-03-01 14:45:29 +01:00
parent 2c06f689c5
commit 257c62484e
3 changed files with 43 additions and 0 deletions

View File

@ -11,6 +11,7 @@ class Pucko_User_Serializer(serializers.ModelSerializer):
model = get_user_model()
fields = (
'username',
'email',
'is_staff',
'date_joined',
'slug'
@ -62,3 +63,11 @@ class Logout_Serializer(serializers.Serializer):
class Meta:
fields = ()
class Change_Password_Serializer(serializers.Serializer):
old_password = serializers.CharField(required=True, write_only=True)
new_password = serializers.CharField(required=True, write_only=True)
message = serializers.CharField(read_only=True)
class Meta:
fields = ("old_password", "new_password", "message")

View File

@ -4,10 +4,14 @@ from .views import RenewView
from .views import LogoutView
from .views import LogoutAllView
from .views import RegisterView
from .views import ChangePasswordView
from .views import AccountInfoView
urlpatterns = [
path("create-token/", LoginView.as_view(), name="create_token"),
path("refresh-token/", RenewView.as_view(), name="refresh-token"),
path("account-info/", AccountInfoView.as_view({"get": "user_info"}), name="account-info"),
path("change-password/", ChangePasswordView.as_view({"post": "change_password"}), name="change-password"),
path("signup/", RegisterView.as_view(), name="signup"),
path("logout/", LogoutView.as_view(), name="logout"),
path("logout-all/", LogoutAllView.as_view(), name="logout-all")

View File

@ -12,10 +12,14 @@ from knox.views import LoginView as KnoxLoginView
from knox.views import LogoutView as KnoxLogoutView
from knox.views import LogoutAllView as KnoxLogoutAllView
from settings.puckoviews import PuckoView
from settings.puckolizers import Message_Serializer
from .serializer import Pucko_CreateUser_Serializer
from .serializer import Pucko_Renew_Serializer
from .serializer import Pucko_User_Serializer
from .serializer import Pucko_Login_Serializer
from .serializer import Change_Password_Serializer
class LoginView(KnoxLoginView):
permission_classes = (AllowAny,)
@ -32,6 +36,14 @@ class LoginView(KnoxLoginView):
login(request, user)
return super(LoginView, self).post(request, format=None)
class AccountInfoView(PuckoView):
permission_classes = (IsAuthenticated,)
serializer_class = Pucko_User_Serializer
def user_info(self, request, format=None):
serializer = self.serializer_class(request.user)
return Response(serializer.data, status=200)
class RenewView(KnoxLoginView):
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
@ -64,3 +76,21 @@ class RegisterView(CreateAPIView):
queryset = get_user_model().objects.all()
permission_classes = (AllowAny,)
serializer_class = Pucko_CreateUser_Serializer
class ChangePasswordView(PuckoView):
permission_classes = (IsAuthenticated,)
serializer_class = Change_Password_Serializer
def change_password(self, request):
old_password = request.data["old_password"]
new_password = request.data["new_password"]
user = request.user
if not user.check_password(raw_password=old_password):
serializer = Message_Serializer({"message": "Error: Could not change password. old password does not match."})
return Response(serializer.data, status=403)
user.set_password(new_password)
user.save()
serializer = Message_Serializer({"message": "password is updated"})
return Response(serializer.data, status=200)