Skip to content

Commit

Permalink
builded backend to serve new ui with cv and stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
pasi committed Mar 8, 2021
1 parent 6ffaf55 commit 6ea66de
Show file tree
Hide file tree
Showing 7 changed files with 244 additions and 8 deletions.
13 changes: 13 additions & 0 deletions api/authentication.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import DjangoModelPermissions


class BearerAuthentication(TokenAuthentication):
keyword = "Bearer"


class LimitViewDjangoModelPermissions(DjangoModelPermissions):
perms_map = {
'GET': ['%(app_label)s.view_%(model_name)s'],
'OPTIONS': ['%(app_label)s.view_%(model_name)s'],
'HEAD': ['%(app_label)s.view_%(model_name)s'],
'POST': ['%(app_label)s.add_%(model_name)s'],
'PUT': ['%(app_label)s.change_%(model_name)s'],
'PATCH': ['%(app_label)s.change_%(model_name)s'],
'DELETE': ['%(app_label)s.delete_%(model_name)s'],
}

11 changes: 8 additions & 3 deletions api/urls.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
from rest_framework_bulk.routes import BulkRouter
from data_logger import views as data_logger_views

from cv import views as cv_views

router = BulkRouter()
router.register(r'data-logger/data', data_logger_views.DataViewSet)
router.register(r'data-logger/gateway', data_logger_views.GatewayViewSet)
router.register(r'data-logger/node', data_logger_views.NodeViewSet)
router.register(r'data-logger/node-settings', data_logger_views.NodeSettingViewSet)


router.register(r'cv/socials', cv_views.SocialsViewSet)
router.register(r'cv/public-info', cv_views.BasicPublicInfoViewSet)
router.register(r'cv/professional-skills', cv_views.ProfessionalSkillsViewSet)
router.register(r'cv/language-skills', cv_views.LanguageSkillsViewSet)
router.register(r'cv/other-interests', cv_views.OtherInterestsViewSet)
router.register(r'cv/experience', cv_views.ExperienceViewSet)
router.register(r'cv/education', cv_views.EducationViewSet)
37 changes: 36 additions & 1 deletion cv/admin.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,38 @@
from django.contrib import admin
from cv import models
from django.contrib.admin import register

# Register your models here.

@register(models.BasicPublicInfo)
class BasicPublicInfoAdminPage(admin.ModelAdmin):
model = models.BasicPublicInfo


@register(models.Socials)
class SocialsAdminPage(admin.ModelAdmin):
model = models.Socials


@register(models.Experience)
class ExperienceAdminPage(admin.ModelAdmin):
model = models.Experience


@register(models.Education)
class EducationAdminPage(admin.ModelAdmin):
model = models.Education


@register(models.ProfessionalSkills)
class ProfessionalSkills(admin.ModelAdmin):
model = models.ProfessionalSkills


@register(models.LanguageSkills)
class LanguageSkillsAdminPage(admin.ModelAdmin):
model = models.LanguageSkills


@register(models.OtherInterests)
class OtherInterestsAdminPage(admin.ModelAdmin):
model = models.OtherInterests
73 changes: 73 additions & 0 deletions cv/models.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,76 @@
from django.db import models

# Create your models here.
LEVELS_RANGE = {
(1, "FUNDAMENTAL_AWARNESS"),
(2, "NOVICE"),
(3, "INTERMEDIATE"),
(4, "ADVANCED"),
(5, "EXPERT"),
}

LANGUAGE_CHOICES = {
("en", "English"),
("fi", "Suomi"),
}


class BasicPublicInfo(models.Model):
name = models.TextField()
profession = models.TextField()
location = models.TextField(blank=True, null=True)
birthdate = models.DateTimeField(blank=True, null=True)
phone_number = models.TextField(blank=True, null=True)
email = models.EmailField(blank=True, null=True)
description = models.TextField()
language = models.CharField(max_length=2, default="fi", choices=LANGUAGE_CHOICES)


class Socials(models.Model):
SERVICE_CHOICES = {
("FACE", "Facebook"),
("LINKEDIN", "LinkedIn"),
("GITHUB", "GitHub"),
("INSTA", "Instagram")
}
service = models.TextField(choices=SERVICE_CHOICES)
url = models.URLField()
name = models.TextField()
language = models.CharField(max_length=2, default="fi", choices=LANGUAGE_CHOICES)


class Experience(models.Model):
corporate = models.TextField()
start_date = models.DateTimeField()
end_date = models.DateTimeField()
profession = models.TextField()
description = models.TextField()
link = models.URLField()
language = models.CharField(max_length=2, default="fi", choices=LANGUAGE_CHOICES)


class Education(models.Model):
facility_name = models.TextField()
title = models.TextField()
branch = models.TextField(blank=True, null=True)
graduation_date = models.DateTimeField()
rating_scale = models.TextField(blank=True, null=True)
average_rating = models.TextField(blank=True, null=True)
thesis = models.URLField(blank=True, null=True)
language = models.CharField(max_length=2, default="fi", choices=LANGUAGE_CHOICES)


class ProfessionalSkills(models.Model):
name = models.TextField()
level = models.IntegerField(choices=LEVELS_RANGE)


class LanguageSkills(models.Model):
name = models.TextField()
level = models.IntegerField(choices=LEVELS_RANGE)


class OtherInterests(models.Model):
name = models.TextField()
language = models.CharField(max_length=2, default="fi", choices=LANGUAGE_CHOICES)

45 changes: 45 additions & 0 deletions cv/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from rest_framework import serializers
from cv import models


class SocialsSerializer(serializers.ModelSerializer):
class Meta:
model = models.Socials
fields = '__all__'


class BasicPublicInfoSerializer(serializers.ModelSerializer):
class Meta:
model = models.BasicPublicInfo
fields = '__all__'


class ProfessionalSkillsSerializer(serializers.ModelSerializer):
class Meta:
model = models.ProfessionalSkills
fields = '__all__'


class LanguageSkillsSerializer(serializers.ModelSerializer):
class Meta:
model = models.LanguageSkills
fields = '__all__'


class OtherInterestsSerializer(serializers.ModelSerializer):
class Meta:
model = models.OtherInterests
fields = '__all__'


class ExperienceSerializer(serializers.ModelSerializer):
class Meta:
model = models.Experience
fields = '__all__'


class EducationSerializer(serializers.ModelSerializer):
class Meta:
model = models.Education
fields = '__all__'

63 changes: 62 additions & 1 deletion cv/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,64 @@
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from cv import models
from cv import serializers


# Create your views here.
class SocialsViewSet(ModelViewSet):

queryset = models.Socials.objects.all()
serializer_class = serializers.SocialsSerializer


class BasicPublicInfoViewSet(ModelViewSet):

queryset = models.BasicPublicInfo.objects.all()
serializer_class = serializers.BasicPublicInfoSerializer

def get_queryset(self):
queryset = models.BasicPublicInfo.objects.all()
lan = self.request.query_params.get('lan', 'fi')
return queryset.filter(language=lan)


class ProfessionalSkillsViewSet(ModelViewSet):

queryset = models.ProfessionalSkills.objects.all()
serializer_class = serializers.ProfessionalSkillsSerializer


class LanguageSkillsViewSet(ModelViewSet):

queryset = models.LanguageSkills.objects.all()
serializer_class = serializers.LanguageSkillsSerializer


class OtherInterestsViewSet(ModelViewSet):

queryset = models.OtherInterests.objects.all()
serializer_class = serializers.OtherInterestsSerializer

def get_queryset(self):
queryset = models.OtherInterests.objects.all()
lan = self.request.query_params.get('lan', 'fi')
return queryset.filter(language=lan)


class ExperienceViewSet(ModelViewSet):
queryset = models.Experience.objects.all().order_by('-end_date')
serializer_class = serializers.ExperienceSerializer

def get_queryset(self):
queryset = models.Experience.objects.all().order_by('-end_date')
lan = self.request.query_params.get('lan', 'fi')
return queryset.filter(language=lan)


class EducationViewSet(ModelViewSet):
queryset = models.Education.objects.all()
serializer_class = serializers.EducationSerializer

def get_queryset(self):
queryset = models.Education.objects.all()
lan = self.request.query_params.get('lan', 'fi')
return queryset.filter(language=lan)
10 changes: 7 additions & 3 deletions vuohiportal/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ def keys_to_upper(conf_section):
except ValueError:
pass

CORS_ALLOW_ALL_ORIGINS = True

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

Expand All @@ -56,6 +58,8 @@ def keys_to_upper(conf_section):
'channels',
# 'vuohisocket',
'data_logger',
'cv',
'corsheaders',
'rest_framework',
'rest_framework.authtoken',
'rest_framework_bulk',
Expand All @@ -65,8 +69,6 @@ def keys_to_upper(conf_section):
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'portfolio',
'homepage',
'api.apps.ApiConfig',
]

Expand All @@ -78,6 +80,8 @@ def keys_to_upper(conf_section):
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
]

ROOT_URLCONF = 'vuohiportal.urls'
Expand Down Expand Up @@ -135,7 +139,7 @@ def keys_to_upper(conf_section):
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissions'
'api.authentication.LimitViewDjangoModelPermissions'
],
'DEFAULT_AUTHENTICATION_CLASSES': (
'api.authentication.BearerAuthentication',
Expand Down

0 comments on commit 6ea66de

Please sign in to comment.