Expand user model to store perks
This commit is contained in:
parent
fa5e4cb6a3
commit
a38afc2d6a
|
@ -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')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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')
|
||||||
|
|
||||||
|
|
|
@ -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()),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
Reference in New Issue