Index: backend/auth_form/models.py
===================================================================
--- backend/auth_form/models.py	(revision bc7053f432bb5f5c314b0a2257e9d7434858063c)
+++ backend/auth_form/models.py	(revision 180656aaf7d3ad3fe937a5c25930480b77439d0b)
@@ -1,6 +1,25 @@
 from django.db import models
-from django.contrib.auth.models import AbstractUser
+from django.contrib.auth.models import AbstractUser, BaseUserManager
 from django.contrib.postgres.fields import ArrayField
 # Create your models here.
+
+class UserManager(BaseUserManager):
+    def create_user(self, email, password=None, **extra_fields):
+        if not email:
+            raise ValueError('The Email field but be set')
+        email = self.normalize_email(email)
+        extra_fields.setdefault('username', email)
+
+        user = self.model(email=email, **extra_fields)
+        user.set_password(password)
+        user.save(using=self._db)
+        return user
+    def create_superuser(self, email, password=None, **extra_fields):
+        extra_fields.setdefault('is_staff', True)
+        extra_fields.setdefault('is_superuser', True)
+        extra_fields.setdefault('username', email)
+
+        return self.create_user(email, password, **extra_fields)
+    
 class User(AbstractUser):
     USER_TYPE_CHOICES = [
@@ -15,4 +34,6 @@
     USERNAME_FIELD = 'email'
     REQUIRED_FIELDS = []
+    
+    objects = UserManager()
 
     def __str__(self):
@@ -46,4 +67,6 @@
     enrolled_subjects = models.ManyToManyField('subjects.subject', related_name="enrolled_subjects")
 
+    
+
     def update_info(self, new_preferences):
         self.preferred_domains = new_preferences
@@ -56,2 +79,5 @@
     def get_user_info(self):
         return self
+
+
+    
Index: backend/auth_form/serializers.py
===================================================================
--- backend/auth_form/serializers.py	(revision 180656aaf7d3ad3fe937a5c25930480b77439d0b)
+++ backend/auth_form/serializers.py	(revision 180656aaf7d3ad3fe937a5c25930480b77439d0b)
@@ -0,0 +1,30 @@
+from django.contrib.auth import get_user_model
+from rest_framework import serializers
+from django.contrib.auth.password_validation import validate_password
+
+User = get_user_model()
+
+class RegistrationSerializer(serializers.ModelSerializer):
+    password = serializers.CharField(write_only=True, required=True, validators=[validate_password])
+    confirm_password = serializers.CharField(write_only=True, required=True)
+
+    class Meta:
+        model = User
+        fields = ['email', 'full_name', 'password', 'confirm_password']
+    
+    def validate(self, data):
+        if data['password'] != data['confirm_password']:
+            raise serializers.ValidationError("Passwords do not match")
+        return data
+    
+    def create(self, validated_data):
+        validated_data.pop('confirm_password')
+
+        user = User.objects.create_user(
+            email=validated_data['email'],
+            password=validated_data['password'],
+            full_name = validated_data['full_name'],
+            user_type='student',
+        )
+
+        return user
Index: backend/auth_form/urls.py
===================================================================
--- backend/auth_form/urls.py	(revision bc7053f432bb5f5c314b0a2257e9d7434858063c)
+++ backend/auth_form/urls.py	(revision 180656aaf7d3ad3fe937a5c25930480b77439d0b)
@@ -1,6 +1,6 @@
 from django.urls import path
-from .views import SomeView
+from .views import RegisterView
 urlpatterns = [
-    path('register/', SomeView.as_view(), name='register'),
+    path('register/', RegisterView.as_view(), name='register'),
     # path('login/', LoginView.as_view(), name='login')
 ]
Index: backend/auth_form/views.py
===================================================================
--- backend/auth_form/views.py	(revision bc7053f432bb5f5c314b0a2257e9d7434858063c)
+++ backend/auth_form/views.py	(revision 180656aaf7d3ad3fe937a5c25930480b77439d0b)
@@ -1,3 +1,3 @@
-from django.shortcuts import render
+from .serializers import RegistrationSerializer
 from rest_framework import serializers, status, views
 from rest_framework.views import APIView
@@ -6,5 +6,20 @@
 # Create your views here.
 
-class SomeView(APIView):
-    def get(self, request):
-        return Response({"message": "You are authenticated!"})
+class RegisterView(APIView):
+    def post(self, request, *args, **kwargs):
+        # Step 1: Initialize the serializer with the request data
+        serializer = RegistrationSerializer(data = request.data)
+
+        # Step 2: Validate the serialized data
+        if serializer.is_valid():
+            # Step 3: Save the user
+            user = serializer.save()
+
+            # Step 4: Return a success response
+            return Response({
+                'message': 'User registered successfully',
+                'user': serializer.data
+            }, status=status.HTTP_201_CREATED)
+
+        # If the serializer is not valid, return an error response
+        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
