diff options
Diffstat (limited to 'backend/articles/api')
| -rw-r--r-- | backend/articles/api/serializers.py | 59 | ||||
| -rw-r--r-- | backend/articles/api/urls.py | 7 | ||||
| -rw-r--r-- | backend/articles/api/views.py | 16 |
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() |