Skip to content

views

This module contains the views of the users package.

Classes
  • UserRegisterAPI: A class that contains post endpoint for user registration
  • UserLoginAPI: A class that contains post endpoint for user login

UserLoginAPI

Bases: views.APIView

API view for user login.

Methods
  • post: A method for making POST request for user login
Source code in backend/api/users/views.py
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
class UserLoginAPI(views.APIView):
    """API view for user login.

    Methods:
        - `post`: A method for making POST request for user login
    """

    def post(self, request: Request) -> Response:
        """Handle POST request for user login.

        Args:
            request: The HTTP request object.

        Returns:
            The HTTP response object.
        """
        payload = request.data

        if "email" not in payload or payload["email"] == "":
            return Response({
                "status": status.HTTP_400_BAD_REQUEST,
                "message": "Please correct the errors",
                "email_error": "Email is required",
            })

        if "password" not in payload or payload["password"] == "":
            return Response({
                "status": status.HTTP_400_BAD_REQUEST,
                "message": "Please correct the errors",
                "password_error": "Password is required",
            })

        user = AuthUser.objects.filter(email=payload["email"]).first()

        if not user:
            return Response({
                "status": status.HTTP_404_NOT_FOUND,
                "message": "Please correct the errors",
                "email_error": "User with this email is not found!",
            })

        if not user.check_password(payload["password"]):
            return Response({
                "status": status.HTTP_404_NOT_FOUND,
                "message": "Please correct the errors",
                "password_error": "Password is not correct!",
            })

        if user.token is None or user.token == "":
            user.set_token(user.email)
            user.save()

        return Response({
            "status": status.HTTP_200_OK,
            "message": "User logged successfully!",
            "token": user.token,
        })

post(request)

Handle POST request for user login.

Parameters:

Name Type Description Default
request Request

The HTTP request object.

required

Returns:

Type Description
Response

The HTTP response object.

Source code in backend/api/users/views.py
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
def post(self, request: Request) -> Response:
    """Handle POST request for user login.

    Args:
        request: The HTTP request object.

    Returns:
        The HTTP response object.
    """
    payload = request.data

    if "email" not in payload or payload["email"] == "":
        return Response({
            "status": status.HTTP_400_BAD_REQUEST,
            "message": "Please correct the errors",
            "email_error": "Email is required",
        })

    if "password" not in payload or payload["password"] == "":
        return Response({
            "status": status.HTTP_400_BAD_REQUEST,
            "message": "Please correct the errors",
            "password_error": "Password is required",
        })

    user = AuthUser.objects.filter(email=payload["email"]).first()

    if not user:
        return Response({
            "status": status.HTTP_404_NOT_FOUND,
            "message": "Please correct the errors",
            "email_error": "User with this email is not found!",
        })

    if not user.check_password(payload["password"]):
        return Response({
            "status": status.HTTP_404_NOT_FOUND,
            "message": "Please correct the errors",
            "password_error": "Password is not correct!",
        })

    if user.token is None or user.token == "":
        user.set_token(user.email)
        user.save()

    return Response({
        "status": status.HTTP_200_OK,
        "message": "User logged successfully!",
        "token": user.token,
    })

UserRegisterAPI

Bases: views.APIView

API View for user registration.

Methods
  • post: A method for making POST request to register user
Source code in backend/api/users/views.py
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
class UserRegisterAPI(views.APIView):
    """API View for user registration.

    Methods:
        - `post`: A method for making POST request to register user
    """

    def post(self, request: Request) -> Response:
        """Handle POST requests for user registration.

        Args:
            request: The HTTP request object.

        Returns:
            The HTTP response object.
        """
        payload = request.data

        user_serializer = UserSerializer(data=payload)

        if user_serializer.is_valid():
            user = AuthUser(
                username=payload["username"],
                email=payload["email"],
            )
            user.set_password(payload["password"])
            user.set_token(payload["email"])
            user.save()

            return Response({
                "status": status.HTTP_200_OK,
                "message": "User registered successfully!",
                "user": UserSerializer(user).data
            })
        else:

            email_error = None
            username_error = None
            password_error = None

            if "email" in user_serializer.errors:
                email_error = user_serializer.errors["email"][0]
            if "username" in user_serializer.errors:
                username_error = user_serializer.errors["username"][0]
            if "password" in user_serializer.errors:
                password_error = user_serializer.errors["password"][0]

            return Response({
                "status": status.HTTP_400_BAD_REQUEST,
                "message": "Please correct the errors",
                "email_error": email_error,
                "username_error": username_error,
                "password_error": password_error,
            })

post(request)

Handle POST requests for user registration.

Parameters:

Name Type Description Default
request Request

The HTTP request object.

required

Returns:

Type Description
Response

The HTTP response object.

Source code in backend/api/users/views.py
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
def post(self, request: Request) -> Response:
    """Handle POST requests for user registration.

    Args:
        request: The HTTP request object.

    Returns:
        The HTTP response object.
    """
    payload = request.data

    user_serializer = UserSerializer(data=payload)

    if user_serializer.is_valid():
        user = AuthUser(
            username=payload["username"],
            email=payload["email"],
        )
        user.set_password(payload["password"])
        user.set_token(payload["email"])
        user.save()

        return Response({
            "status": status.HTTP_200_OK,
            "message": "User registered successfully!",
            "user": UserSerializer(user).data
        })
    else:

        email_error = None
        username_error = None
        password_error = None

        if "email" in user_serializer.errors:
            email_error = user_serializer.errors["email"][0]
        if "username" in user_serializer.errors:
            username_error = user_serializer.errors["username"][0]
        if "password" in user_serializer.errors:
            password_error = user_serializer.errors["password"][0]

        return Response({
            "status": status.HTTP_400_BAD_REQUEST,
            "message": "Please correct the errors",
            "email_error": email_error,
            "username_error": username_error,
            "password_error": password_error,
        })