1
1
2
2
from .models import Character
3
- from .serializers import CharacterSerializer
4
- from rest_framework import viewsets
3
+ from .serializers import CharacterSerializer , UserSerializer
4
+ from rest_framework import viewsets , status
5
+ from rest_framework .views import APIView
6
+ from rest_framework .decorators import action
7
+ from rest_framework .permissions import IsAuthenticated
8
+ from rest_framework .response import Response
9
+ from django .contrib .auth .models import User
10
+ from rest_framework_simplejwt .tokens import RefreshToken
11
+ from django .contrib .auth import authenticate
12
+ from django .contrib .auth import authenticate , login , logout
5
13
14
+
15
+ # list of characters
6
16
class CharacterViewSet (viewsets .ModelViewSet ):
17
+ #permission_classes = [IsAuthenticated]
18
+
7
19
queryset = Character .objects .all ()
8
- serializer_class = CharacterSerializer
20
+ serializer_class = CharacterSerializer
21
+
22
+
23
+ # credit : https://github.com/HE-Arc/Instagenda/
24
+
25
+ class AuthViewSet (viewsets .ViewSet ):
26
+
27
+ @action (detail = False , methods = ['post' ])
28
+ def login (self , request ):
29
+ username = request .data .get ('username' )
30
+ password = request .data .get ('password' )
31
+
32
+ user = authenticate (request , username = username , password = password )
33
+ if user is not None :
34
+ login (request , user )
35
+
36
+ return Response ({"message" : "User logged in" }, status = status .HTTP_200_OK )
37
+ return Response ({"error" : "Invalid credentials" }, status = status .HTTP_400_BAD_REQUEST )
38
+
39
+ @action (detail = False , methods = ['post' ])
40
+ def register (self , request ):
41
+ serializer = UserSerializer (data = request .data )
42
+ if serializer .is_valid ():
43
+ user = serializer .save ()
44
+ login (request , user )
45
+ return Response ({"message" : "User registered" }, status = status .HTTP_201_CREATED )
46
+ return Response (serializer .errors , status = status .HTTP_400_BAD_REQUEST )
47
+
48
+ @action (detail = False , methods = ['post' ])
49
+ def logout (self , request ):
50
+ if request .user .is_authenticated :
51
+ logout (request )
52
+ return Response ({"message" : "User logged out" }, status = status .HTTP_200_OK )
53
+ return Response ({"error" : "User not logged in" }, status = status .HTTP_204_NO_CONTENT )
54
+
55
+ @action (detail = False , methods = ['get' ], permission_classes = [IsAuthenticated ])
56
+ def profile (self , request ):
57
+ if not request .user or request .user .is_anonymous :
58
+ return Response ({"error" : "User not authenticated" }, status = status .HTTP_401_UNAUTHORIZED )
59
+
60
+ serializer = UserSerializer (request .user )
61
+ return Response (serializer .data , status = status .HTTP_200_OK )
62
+
0 commit comments