From a73553ab81ffdb8889b3964b2048b4c216de6e66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20Kaan=20G=C3=9CM=C3=9C=C5=9E?= <96421894+Tahinli@users.noreply.github.com> Date: Tue, 2 Jul 2024 23:19:16 +0300 Subject: [PATCH] feat: :sparkles: readonly viewset --- requirements.txt | 4 ++++ tJango/urls.py | 12 +++++------- user/admin.py | 6 +++--- user/migrations/0003_token.py | 22 ++++++++++++++++++++++ user/models.py | 10 +++++++--- user/serializers.py | 18 +++++++++++++++--- user/urls.py | 10 ++++++++++ user/views.py | 14 +++----------- 8 files changed, 69 insertions(+), 27 deletions(-) create mode 100644 requirements.txt create mode 100644 user/migrations/0003_token.py create mode 100644 user/urls.py diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8741104 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +asgiref==3.8.1 +Django==5.0.6 +djangorestframework==3.15.2 +sqlparse==0.5.0 diff --git a/tJango/urls.py b/tJango/urls.py index bda835f..394cfee 100644 --- a/tJango/urls.py +++ b/tJango/urls.py @@ -16,18 +16,16 @@ Including another URLconf """ from django.contrib import admin from django.urls import path, include -from django.contrib.auth.models import User from rest_framework.routers import DefaultRouter -from user.views import UserViewSet - +# from user import views as user_views router = DefaultRouter() -router.register(r'users', UserViewSet) +# router.register(r'users', user_views.UserViewSet) urlpatterns = [ - path('api-auth/', include('rest_framework.urls')), - path('hello/', include("hello.urls")), path('', include(router.urls)), + path('api-auth/', include('rest_framework.urls')), + path('hello/', include('hello.urls')), path('admin/', admin.site.urls), - path('user/', include((router.urls, 'user'), namespace='user')) + path('api/v1/', include('user.urls')), ] diff --git a/user/admin.py b/user/admin.py index 779867f..4954a08 100644 --- a/user/admin.py +++ b/user/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import User -# Register your models here. +from .models import User, Token -admin.site.register(User) \ No newline at end of file +admin.site.register(User) +admin.site.register(Token) \ No newline at end of file diff --git a/user/migrations/0003_token.py b/user/migrations/0003_token.py new file mode 100644 index 0000000..14e69cb --- /dev/null +++ b/user/migrations/0003_token.py @@ -0,0 +1,22 @@ +# Generated by Django 5.0.6 on 2024-07-02 11:13 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('user', '0002_alter_user_username'), + ] + + operations = [ + migrations.CreateModel( + name='Token', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('token', models.CharField(max_length=16)), + ('username', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='Token', to='user.user')), + ], + ), + ] diff --git a/user/models.py b/user/models.py index 01fd2f3..e7d03b4 100644 --- a/user/models.py +++ b/user/models.py @@ -1,12 +1,16 @@ from django.db import models -# Create your models here. - class User(models.Model): username = models.CharField(max_length=15, unique=True) date_created = models.DateTimeField(auto_now_add=True) def __str__(self): return self.username - \ No newline at end of file + +class Token(models.Model): + username = models.ForeignKey(User, on_delete=models.CASCADE, related_name='Token') + token = models.CharField(max_length=16) + + def __str__(self): + return str(self.username) \ No newline at end of file diff --git a/user/serializers.py b/user/serializers.py index 5a8dfed..b52c1bf 100644 --- a/user/serializers.py +++ b/user/serializers.py @@ -1,8 +1,20 @@ from rest_framework import serializers -from .models import User +from .models import User, Token + + +class TokenSerializer(serializers.ModelSerializer): + class Meta: + model = Token + fields = '__all__' + read_only_fields = ['username', 'token'] class UserSerializer(serializers.ModelSerializer): + token = TokenSerializer(read_only=True) class Meta: model = User - fields = ['username', 'date_created'] - read_only_fields = ['date_created'] \ No newline at end of file + fields = '__all__' + read_only_fields = ['date_created'] + + def token(self, object): + print("İMDAAAAAAAAAAAAAAAAAAAAAAAAAAT") + print(object.username) \ No newline at end of file diff --git a/user/urls.py b/user/urls.py new file mode 100644 index 0000000..3566ee7 --- /dev/null +++ b/user/urls.py @@ -0,0 +1,10 @@ +from django.urls import path, include +from rest_framework.routers import DefaultRouter +from user import views as user_views + +router = DefaultRouter() +router.register(r'users', user_views.UserViewSet) + +urlpatterns = [ + path('', include(router.urls)), +] \ No newline at end of file diff --git a/user/views.py b/user/views.py index 7c5caec..6e48a4d 100644 --- a/user/views.py +++ b/user/views.py @@ -1,18 +1,10 @@ from django.shortcuts import render -from rest_framework import viewsets +from rest_framework.viewsets import ReadOnlyModelViewSet from rest_framework.permissions import IsAuthenticatedOrReadOnly -from rest_framework.decorators import action from .models import User from .serializers import UserSerializer - -# Create your views here. - -class UserViewSet(viewsets.ModelViewSet): +class UserViewSet(ReadOnlyModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer - permission_classes = [IsAuthenticatedOrReadOnly] - - @action(detail=False, methods=['get']) - def print_this(self, request, pk=None): - print(self.get_object()) + # permission_classes = [IsAuthenticatedOrReadOnly]