Expand user model to store perks

This commit is contained in:
Pavle Portic 2019-03-25 14:52:40 +01:00
parent fa5e4cb6a3
commit a38afc2d6a
Signed by: TheEdgeOfRage
GPG Key ID: 6758ACE46AA2A849
5 changed files with 87 additions and 9 deletions

View File

@ -0,0 +1,24 @@
# Generated by Django 2.1.7 on 2019-03-25 13:32
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('perks', '0003_auto_20190324_2135'),
]
operations = [
migrations.CreateModel(
name='User',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('base_user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
('perks', models.ManyToManyField(related_name='users', to='perks.Perk')),
],
),
]

View File

@ -7,6 +7,7 @@
# Distributed under terms of the BSD-3-Clause license. # Distributed under terms of the BSD-3-Clause license.
from django.db import models from django.db import models
from django.contrib.auth.models import User as AuthUser
class Tree(models.Model): class Tree(models.Model):
@ -32,3 +33,9 @@ class Perk(models.Model):
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
class User(models.Model):
base_user = models.OneToOneField(AuthUser, on_delete=models.CASCADE)
perks = models.ManyToManyField(Perk, related_name='users', symmetrical=False)

View File

@ -6,8 +6,10 @@
# #
# Distributed under terms of the BSD-3-Clause license. # Distributed under terms of the BSD-3-Clause license.
from django.contrib.auth.models import User as AuthUser
from rest_framework import serializers from rest_framework import serializers
# from .models import Perk, Tree
from .models import Perk, Tree, User
class PerkSerializer(serializers.Serializer): class PerkSerializer(serializers.Serializer):
@ -16,11 +18,45 @@ class PerkSerializer(serializers.Serializer):
effect = serializers.CharField(read_only=True) effect = serializers.CharField(read_only=True)
level = serializers.IntegerField(read_only=True) level = serializers.IntegerField(read_only=True)
type = serializers.IntegerField(read_only=True) type = serializers.IntegerField(read_only=True)
# parents = serializers.ListField(read_only=True)
# trees = serializers.ListField(read_only=True) class Meta:
model = Perk
fields = ('id', 'name', 'effect', 'level', 'type')
class TreeSerializer(serializers.Serializer): class TreeSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True) id = serializers.IntegerField(read_only=True)
name = serializers.CharField(read_only=True) name = serializers.CharField(read_only=True)
class Meta:
model = Tree
fields = ('id', 'name')
class AuthUserSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
username = serializers.CharField(read_only=True)
email = serializers.CharField(read_only=True)
class Meta:
model = AuthUser
fields = ('id', 'username', 'email')
class UserSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
perks = serializers.PrimaryKeyRelatedField(queryset=Perk.objects.all(), many=True)
base_user = AuthUserSerializer(required=False, many=False)
class Meta:
model = User
fields = ('id', 'perks', 'base_user')
# class AuthorSerializer(serializers.ModelSerializer):
# book_list = BookSerializer(many=True, read_only=True)
# class Meta:
# model = Author
# fields = ('id', 'name', 'last_name', 'book_list')

View File

@ -2,7 +2,8 @@ from django.urls import path
from perks import views from perks import views
urlpatterns = [ urlpatterns = [
path('trees', views.Trees.as_view()), path('trees', views.TreeView.as_view()),
path('trees/<int:tree_id>', views.Perks.as_view()), path('trees/<int:tree_id>', views.PerkView.as_view()),
path('users/<int:user_id>', views.UserView.as_view()),
] ]

View File

@ -12,8 +12,8 @@ from rest_framework.response import Response
from rest_framework import authentication # , permissions from rest_framework import authentication # , permissions
from .parser import PerkParser from .parser import PerkParser
from .models import Perk, Tree from .models import Perk, Tree, User
from .serializers import PerkSerializer, TreeSerializer from .serializers import PerkSerializer, TreeSerializer, UserSerializer
PERKS_DIR = environ.get('PERKS_DIR') PERKS_DIR = environ.get('PERKS_DIR')
@ -22,7 +22,7 @@ if not PERKS_DIR:
PERKS_DIR = '../static/perks' PERKS_DIR = '../static/perks'
class Trees(APIView): class TreeView(APIView):
authentication_classes = (authentication.TokenAuthentication,) authentication_classes = (authentication.TokenAuthentication,)
# permission_classes = (permissions.IsAuthenticated,) # permission_classes = (permissions.IsAuthenticated,)
@ -46,7 +46,7 @@ class Trees(APIView):
return Response({'message': 'Upload successful'}) return Response({'message': 'Upload successful'})
class Perks(APIView): class PerkView(APIView):
authentication_classes = (authentication.TokenAuthentication,) authentication_classes = (authentication.TokenAuthentication,)
# permission_classes = (permissions.IsAuthenticated,) # permission_classes = (permissions.IsAuthenticated,)
@ -83,3 +83,13 @@ class Perks(APIView):
return Response(output_data) return Response(output_data)
class UserView(APIView):
authentication_classes = (authentication.TokenAuthentication,)
def get(self, request, user_id):
user = User.objects.get(id=user_id)
serialized_user = UserSerializer(user).data
return Response(serialized_user)