Skip to content

Commit 09bb486

Browse files
committed
Part 7
1 parent 7240682 commit 09bb486

4 files changed

Lines changed: 44 additions & 6 deletions

File tree

medium/settings.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,12 @@
131131
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
132132

133133
REST_FRAMEWORK = {
134-
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
134+
'DEFAULT_FILTER_BACKENDS': [
135+
'django_filters.rest_framework.DjangoFilterBackend'
136+
],
137+
'DEFAULT_AUTHENTICATION_CLASSES': [
138+
'rest_framework_simplejwt.authentication.JWTAuthentication',
139+
],
135140
}
136141

137142
VERSATILEIMAGEFIELD_RENDITION_KEY_SETS = {
@@ -153,3 +158,10 @@
153158
]
154159

155160
CORS_ALLOW_CREDENTIALS = True
161+
162+
from datetime import timedelta
163+
164+
SIMPLE_JWT = {
165+
'REFRESH_TOKEN_LIFETIME': timedelta(days=15),
166+
'ROTATE_REFRESH_TOKENS': True,
167+
}

medium/urls.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
from django.contrib import admin
2-
from django.conf.urls import url, include
3-
from reviews.views import ProductViewSet, ImageViewSet
2+
from django.urls import path, include
3+
from reviews.views import ProductViewSet, ImageViewSet, MyObtainTokenPairView
44
from rest_framework.routers import DefaultRouter
55
from django.conf import settings
66
from django.conf.urls.static import static
7+
from rest_framework_simplejwt.views import TokenRefreshView
8+
79

810
router = DefaultRouter()
911
router.register(r'product', ProductViewSet, basename='Product')
1012
router.register(r'image', ImageViewSet, basename='Image')
1113

1214
urlpatterns = [
13-
url(r'^admin/', admin.site.urls),
14-
url(r'^', include(router.urls)),
15+
path('admin/', admin.site.urls),
16+
path('token/', MyObtainTokenPairView.as_view(), name='token_obtain_pair'),
17+
path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
18+
path('', include(router.urls)),
1519
]
1620

1721
if settings.DEBUG:

reviews/serializers.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from .models import Product, Category, Company, ProductSize, ProductSite, Comment, Image
33
from django.contrib.auth.models import User
44
from versatileimagefield.serializers import VersatileImageFieldSerializer
5+
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
56

67

78
class CompanySerializer(FlexFieldsModelSerializer):
@@ -72,3 +73,16 @@ class ImageSerializer(FlexFieldsModelSerializer):
7273
class Meta:
7374
model = Image
7475
fields = ['pk', 'name', 'image']
76+
77+
78+
79+
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
80+
81+
@classmethod
82+
def get_token(cls, user):
83+
token = super(MyTokenObtainPairSerializer, cls).get_token(user)
84+
85+
# Add custom claims
86+
token['username'] = user.username
87+
return token
88+

reviews/views.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
from .serializers import ProductSerializer, ImageSerializer
1+
from .serializers import ProductSerializer, ImageSerializer, MyTokenObtainPairSerializer
22
from .models import Product, Image
33
from rest_framework.viewsets import ReadOnlyModelViewSet
44
from rest_flex_fields.views import FlexFieldsMixin, FlexFieldsModelViewSet
55
from rest_flex_fields import is_expanded
6+
from rest_framework.permissions import IsAuthenticated, AllowAny
7+
from rest_framework_simplejwt.views import TokenObtainPairView
68

79

810
class ProductViewSet(FlexFieldsMixin, ReadOnlyModelViewSet):
@@ -36,3 +38,9 @@ class ImageViewSet(FlexFieldsModelViewSet):
3638

3739
serializer_class = ImageSerializer
3840
queryset = Image.objects.all()
41+
permission_classes = [IsAuthenticated]
42+
43+
44+
class MyObtainTokenPairView(TokenObtainPairView):
45+
permission_classes = (AllowAny,)
46+
serializer_class = MyTokenObtainPairSerializer

0 commit comments

Comments
 (0)