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() model = get_user_model()
fields = ( fields = (
'username', 'username',
'email',
'is_staff', 'is_staff',
'date_joined', 'date_joined',
'slug' 'slug'
@ -62,3 +63,11 @@ class Logout_Serializer(serializers.Serializer):
class Meta: class Meta:
fields = () 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 LogoutView
from .views import LogoutAllView from .views import LogoutAllView
from .views import RegisterView from .views import RegisterView
from .views import ChangePasswordView
from .views import AccountInfoView
urlpatterns = [ urlpatterns = [
path("create-token/", LoginView.as_view(), name="create_token"), path("create-token/", LoginView.as_view(), name="create_token"),
path("refresh-token/", RenewView.as_view(), name="refresh-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("signup/", RegisterView.as_view(), name="signup"),
path("logout/", LogoutView.as_view(), name="logout"), path("logout/", LogoutView.as_view(), name="logout"),
path("logout-all/", LogoutAllView.as_view(), name="logout-all") 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 LogoutView as KnoxLogoutView
from knox.views import LogoutAllView as KnoxLogoutAllView 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_CreateUser_Serializer
from .serializer import Pucko_Renew_Serializer from .serializer import Pucko_Renew_Serializer
from .serializer import Pucko_User_Serializer from .serializer import Pucko_User_Serializer
from .serializer import Pucko_Login_Serializer from .serializer import Pucko_Login_Serializer
from .serializer import Change_Password_Serializer
class LoginView(KnoxLoginView): class LoginView(KnoxLoginView):
permission_classes = (AllowAny,) permission_classes = (AllowAny,)
@ -31,6 +35,14 @@ class LoginView(KnoxLoginView):
user = serializer.validated_data['user'] user = serializer.validated_data['user']
login(request, user) login(request, user)
return super(LoginView, self).post(request, format=None) 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): class RenewView(KnoxLoginView):
authentication_classes = (TokenAuthentication,) authentication_classes = (TokenAuthentication,)
@ -64,3 +76,21 @@ class RegisterView(CreateAPIView):
queryset = get_user_model().objects.all() queryset = get_user_model().objects.all()
permission_classes = (AllowAny,) permission_classes = (AllowAny,)
serializer_class = Pucko_CreateUser_Serializer 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)