-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
48e14c7
commit 4e37b7b
Showing
7 changed files
with
93 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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') | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|