feat: readonly viewset

This commit is contained in:
Ahmet Kaan GÜMÜŞ 2024-07-02 23:19:16 +03:00
parent 69fba80de4
commit a73553ab81
8 changed files with 69 additions and 27 deletions

4
requirements.txt Normal file
View file

@ -0,0 +1,4 @@
asgiref==3.8.1
Django==5.0.6
djangorestframework==3.15.2
sqlparse==0.5.0

View file

@ -16,18 +16,16 @@ Including another URLconf
""" """
from django.contrib import admin from django.contrib import admin
from django.urls import path, include from django.urls import path, include
from django.contrib.auth.models import User
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from user.views import UserViewSet # from user import views as user_views
router = DefaultRouter() router = DefaultRouter()
router.register(r'users', UserViewSet) # router.register(r'users', user_views.UserViewSet)
urlpatterns = [ urlpatterns = [
path('api-auth/', include('rest_framework.urls')),
path('hello/', include("hello.urls")),
path('', include(router.urls)), path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls')),
path('hello/', include('hello.urls')),
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('user/', include((router.urls, 'user'), namespace='user')) path('api/v1/', include('user.urls')),
] ]

View file

@ -1,5 +1,5 @@
from django.contrib import admin from django.contrib import admin
from .models import User from .models import User, Token
# Register your models here.
admin.site.register(User) admin.site.register(User)
admin.site.register(Token)

View file

@ -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')),
],
),
]

View file

@ -1,12 +1,16 @@
from django.db import models from django.db import models
# Create your models here.
class User(models.Model): class User(models.Model):
username = models.CharField(max_length=15, unique=True) username = models.CharField(max_length=15, unique=True)
date_created = models.DateTimeField(auto_now_add=True) date_created = models.DateTimeField(auto_now_add=True)
def __str__(self): def __str__(self):
return self.username return self.username
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)

View file

@ -1,8 +1,20 @@
from rest_framework import serializers 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): class UserSerializer(serializers.ModelSerializer):
token = TokenSerializer(read_only=True)
class Meta: class Meta:
model = User model = User
fields = ['username', 'date_created'] fields = '__all__'
read_only_fields = ['date_created'] read_only_fields = ['date_created']
def token(self, object):
print("İMDAAAAAAAAAAAAAAAAAAAAAAAAAAT")
print(object.username)

10
user/urls.py Normal file
View file

@ -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)),
]

View file

@ -1,18 +1,10 @@
from django.shortcuts import render 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.permissions import IsAuthenticatedOrReadOnly
from rest_framework.decorators import action
from .models import User from .models import User
from .serializers import UserSerializer from .serializers import UserSerializer
class UserViewSet(ReadOnlyModelViewSet):
# Create your views here.
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all() queryset = User.objects.all()
serializer_class = UserSerializer serializer_class = UserSerializer
permission_classes = [IsAuthenticatedOrReadOnly] # permission_classes = [IsAuthenticatedOrReadOnly]
@action(detail=False, methods=['get'])
def print_this(self, request, pk=None):
print(self.get_object())