Skip to content

Commit

Permalink
User endpoints completed.
Browse files Browse the repository at this point in the history
  • Loading branch information
ShivamMenda committed Sep 17, 2023
1 parent 48e14c7 commit 4e37b7b
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 2 deletions.
2 changes: 2 additions & 0 deletions app/app/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@
'django.contrib.staticfiles',
'core',
'rest_framework',
'rest_framework.authtoken',
'drf_spectacular',
'user',
]

MIDDLEWARE = [
Expand Down
4 changes: 2 additions & 2 deletions app/app/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@
SpectacularSwaggerView,
)
from django.contrib import admin
from django.urls import path
from django.urls import path,include

urlpatterns = [
path('admin/', admin.site.urls),
path('api/schema/',SpectacularAPIView.as_view(),name='api-schema'),
path("api/docs/",SpectacularSwaggerView.as_view(url_name='api-schema'),name='api-docs'),

path('api/user/',include('user.urls')),
]
Empty file added app/user/__init__.py
Empty file.
6 changes: 6 additions & 0 deletions app/user/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class UserConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'user'
44 changes: 44 additions & 0 deletions app/user/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
"""
Serializers for the user API view
"""

from django.contrib.auth import (get_user_model,authenticate,)
from django.utils.translation import gettext as _
from rest_framework import serializers

class UserSerializer(serializers.ModelSerializer):
class Meta:
model=get_user_model()
fields=['email','password','name']
extra_kwargs={'password': {'write_only':True,'min_length':5}}

def create(self, validated_data):
return get_user_model().objects.create_user(**validated_data) # type: ignore

def update(self, instance, validated_data):
password=validated_data.pop('password',None)
user=super().update(instance,validated_data)
if password:
user.set_password(password)
user.save()
return user


class AuthTokenSerializer(serializers.Serializer):
"""Serializer for the token"""
email= serializers.EmailField()
password=serializers.CharField(
style={'input_type':'password'},
trim_whitespace=False,
)

def validate(self, attrs):
email=attrs.get('email')
password=attrs.get('password')
user=authenticate(request=self.context.get('request'),username=email,password=password)
if not user:
msg=_("Unable to auth")
raise serializers.ValidationError(msg,code='authorization')
attrs['user']=user
return attrs

14 changes: 14 additions & 0 deletions app/user/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
"""
URL mappings for User API
"""

from django.urls import path
from user import views

app_name='user'

urlpatterns = [
path('create/',views.CreateUserView.as_view(),name='create user'),
path('token/',views.CreateTokenView.as_view(),name='token'),
path('me/',views.ManageUserView.as_view(),name='me')
]
25 changes: 25 additions & 0 deletions app/user/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
"""
Views for the User API
"""

from rest_framework import generics,authentication,permissions
from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.settings import api_settings

from user.serializers import UserSerializer,AuthTokenSerializer

class CreateUserView(generics.CreateAPIView):
"""Create a new user in the system"""
serializer_class=UserSerializer

class CreateTokenView(ObtainAuthToken):
serializer_class=AuthTokenSerializer

class ManageUserView(generics.RetrieveUpdateAPIView):
serializer_class=UserSerializer
authentication_classes=[authentication.TokenAuthentication]
permission_classes=[permissions.IsAuthenticated]

def get_object(self):
return self.request.user

0 comments on commit 4e37b7b

Please sign in to comment.