summaryrefslogtreecommitdiff
path: root/backend/articles/api
diff options
context:
space:
mode:
Diffstat (limited to 'backend/articles/api')
-rw-r--r--backend/articles/api/serializers.py59
-rw-r--r--backend/articles/api/urls.py7
-rw-r--r--backend/articles/api/views.py16
3 files changed, 82 insertions, 0 deletions
diff --git a/backend/articles/api/serializers.py b/backend/articles/api/serializers.py
new file mode 100644
index 0000000..f8629e8
--- /dev/null
+++ b/backend/articles/api/serializers.py
@@ -0,0 +1,59 @@
+from rest_framework import serializers
+from rest_auth.registration.serializers import RegisterSerializer
+from articles.models import Article, User
+from allauth.account.adapter import get_adapter
+from rest_framework.authtoken.models import Token
+
+
+class ArticleSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = Article
+ fields = (
+ 'id', 'title', 'image', 'text', 'rating', 'n_comments', 'author', 'is_solved', 'city', 'address', 'lat', 'lon')
+
+
+class UserSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = User
+ fields = ('username', 'email', 'bio', 'avatar', 'password',
+ )
+
+
+class CustomRegisterSerializer(RegisterSerializer):
+
+ class Meta:
+ model = User
+ fields = ('username', 'email', 'password')
+
+ def get_cleaned_data(self):
+ return {
+ 'username': self.validated_data.get('username', ''),
+ 'password1': self.validated_data.get('password1', ''),
+ 'password2': self.validated_data.get('password2', ''),
+ 'email': self.validated_data.get('email', ''),
+
+ }
+
+ def save(self, request):
+ adapter = get_adapter()
+ user = adapter.new_user(request)
+
+ self.cleaned_data = self.get_cleaned_data()
+
+ user.save()
+ adapter.save_user(request, user, self)
+ return user
+
+
+class TokenSerializer(serializers.ModelSerializer):
+ user_info = serializers.SerializerMethodField()
+
+ class Meta:
+ model = Token
+ fields = ('key', 'user', 'user_info')
+
+ def get_user_info(self, obj):
+ serializer_data = UserSerializer(obj.user).data
+ del serializer_data['password']
+
+ return serializer_data
diff --git a/backend/articles/api/urls.py b/backend/articles/api/urls.py
new file mode 100644
index 0000000..f8bf0d5
--- /dev/null
+++ b/backend/articles/api/urls.py
@@ -0,0 +1,7 @@
+from rest_framework.routers import DefaultRouter
+from .views import UserViewSet, ArticleViewSet
+
+router = DefaultRouter()
+router.register(r'users', UserViewSet, base_name='users')
+router.register(r'articles', ArticleViewSet, base_name='articles')
+urlpatterns = router.urls
diff --git a/backend/articles/api/views.py b/backend/articles/api/views.py
new file mode 100644
index 0000000..209f71f
--- /dev/null
+++ b/backend/articles/api/views.py
@@ -0,0 +1,16 @@
+from rest_framework.generics import ListAPIView, RetrieveAPIView
+from ..models import User
+from .serializers import UserSerializer
+from articles.models import Article
+from .serializers import ArticleSerializer
+from rest_framework import viewsets
+
+
+class UserViewSet(viewsets.ModelViewSet):
+ serializer_class = UserSerializer
+ queryset = User.objects.all()
+
+
+class ArticleViewSet(viewsets.ModelViewSet):
+ serializer_class = ArticleSerializer
+ queryset = Article.objects.all()