Skip to content

Commit 2e61874

Browse files
committed
Part 8
1 parent 09bb486 commit 2e61874

14 files changed

Lines changed: 101 additions & 27 deletions

File tree

auth/__init__.py

Whitespace-only changes.

auth/admin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

auth/apps.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from django.apps import AppConfig
2+
3+
4+
class AuthConfig(AppConfig):
5+
name = 'auth'

auth/migrations/__init__.py

Whitespace-only changes.

auth/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.db import models
2+
3+
# Create your models here.

auth/serializers.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
2+
from rest_framework import serializers
3+
from django.contrib.auth.models import User
4+
from rest_framework.validators import UniqueValidator
5+
from django.contrib.auth.password_validation import validate_password
6+
7+
8+
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
9+
10+
@classmethod
11+
def get_token(cls, user):
12+
token = super(MyTokenObtainPairSerializer, cls).get_token(user)
13+
14+
# Add custom claims
15+
token['username'] = user.username
16+
return token
17+
18+
19+
class RegisterSerializer(serializers.ModelSerializer):
20+
email = serializers.EmailField(
21+
required=True,
22+
validators=[UniqueValidator(queryset=User.objects.all())]
23+
)
24+
25+
password = serializers.CharField(write_only=True, required=True, validators=[validate_password])
26+
password2 = serializers.CharField(write_only=True, required=True)
27+
28+
class Meta:
29+
model = User
30+
fields = ('username', 'password', 'password2', 'email', 'first_name', 'last_name')
31+
extra_kwargs = {
32+
'first_name': {'required': True},
33+
'last_name': {'required': True}
34+
}
35+
36+
def validate(self, attrs):
37+
if attrs['password'] != attrs['password2']:
38+
raise serializers.ValidationError({"password": "Password fields didn't match."})
39+
40+
return attrs
41+
42+
def create(self, validated_data):
43+
user = User.objects.create(
44+
username=validated_data['username'],
45+
email=validated_data['email'],
46+
first_name=validated_data['first_name'],
47+
last_name=validated_data['last_name']
48+
)
49+
50+
user.set_password(validated_data['password'])
51+
user.save()
52+
53+
return user

auth/tests.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.test import TestCase
2+
3+
# Create your tests here.

auth/urls.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from django.urls import path
2+
from auth.views import MyObtainTokenPairView, RegisterView
3+
from rest_framework_simplejwt.views import TokenRefreshView
4+
5+
6+
urlpatterns = [
7+
path('login/', MyObtainTokenPairView.as_view(), name='token_obtain_pair'),
8+
path('login/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
9+
path('register/', RegisterView.as_view(), name='auth_register'),
10+
]
11+

auth/views.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from .serializers import MyTokenObtainPairSerializer, RegisterSerializer
2+
from rest_framework.permissions import AllowAny
3+
from rest_framework_simplejwt.views import TokenObtainPairView
4+
from rest_framework import generics
5+
from django.contrib.auth.models import User
6+
7+
8+
class MyObtainTokenPairView(TokenObtainPairView):
9+
permission_classes = (AllowAny,)
10+
serializer_class = MyTokenObtainPairSerializer
11+
12+
13+
class RegisterView(generics.CreateAPIView):
14+
queryset = User.objects.all()
15+
permission_classes = (AllowAny,)
16+
serializer_class = RegisterSerializer

db.sqlite3

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)