-
Notifications
You must be signed in to change notification settings - Fork 30
Veli Aliev homework 4 #104
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,12 +1,14 @@ | ||
| from rest_framework import viewsets | ||
|
|
||
| from rest_framework import viewsets, status | ||
| from rest_framework.decorators import action | ||
| from rest_framework.response import Response | ||
| from baskets.filters import BasketItemFilter, BasketFilter | ||
| from baskets.models import BasketItem, Basket | ||
| from baskets.serializers import BasketItemSerializer, BasketSerializer, BasketItemDetailedSerializer, BasketDetailedSerializer | ||
| from core.mixins import DetailedViewSetMixin | ||
|
|
||
|
|
||
| class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): | ||
| http_method_names = ["get"] | ||
| queryset = BasketItem.objects.all() | ||
| serializer_class = BasketItemSerializer | ||
| filterset_class = BasketItemFilter | ||
|
|
@@ -15,12 +17,33 @@ class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): | |
| "detailed": BasketItemDetailedSerializer, | ||
| } | ||
|
|
||
| def get_queryset(self): | ||
| queryset = super().get_queryset() | ||
| user = self.request.user | ||
| return queryset.filter(basket__customer=user) | ||
|
|
||
|
|
||
| class BasketViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): | ||
| permission_classes = () | ||
| queryset = Basket.objects.all() | ||
| serializer_class = BasketSerializer | ||
| filterset_class = BasketFilter | ||
| serializer_action_classes = { | ||
| "detailed_list": BasketDetailedSerializer, | ||
| "detailed": BasketDetailedSerializer, | ||
| "add_item": BasketItemSerializer | ||
| } | ||
|
|
||
| @action(detail=True, methods=['post']) | ||
| def add_item(self, request, pk=None): | ||
| serializer = BasketItemSerializer(data=request.data) | ||
|
|
||
| if serializer.is_valid(): | ||
| serializer.save() | ||
| return Response(serializer.data, status=status.HTTP_201_CREATED) | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. basket viewset i basket'e ait bir serializer verisi donse daha iyi olacaktir. |
||
| return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) | ||
|
|
||
| def get_queryset(self): | ||
| queryset = super().get_queryset() | ||
| user = self.request.user | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. login olmamis kullanici durumu varsa problem olusuyor sanki? |
||
| return queryset.filter(customer=user) | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,8 +1,12 @@ | ||
| from django.contrib.auth.password_validation import validate_password | ||
| from django.utils.translation import gettext_lazy as _ | ||
|
|
||
| from rest_framework import serializers | ||
| from rest_framework.exceptions import AuthenticationFailed | ||
| from rest_framework.validators import UniqueValidator | ||
| from rest_framework_simplejwt.serializers import TokenObtainPairSerializer | ||
|
|
||
| from customers.models import Customer | ||
|
|
||
|
|
||
| class APITokenObtainPairSerializer(TokenObtainPairSerializer): | ||
| @classmethod | ||
|
|
@@ -14,3 +18,32 @@ def get_token(cls, user): | |
| token["last_name"] = user.last_name | ||
| token["email"] = user.email | ||
| return token | ||
|
|
||
|
|
||
| class RegisterCustomerSerializer(serializers.ModelSerializer): | ||
|
|
||
| password_1 = serializers.CharField(required=True, write_only=True, validators=[validate_password], | ||
| style={"input_type": "password"}) | ||
|
|
||
| password_2 = serializers.CharField(required=True, write_only=True, style={"input_type": "password"}) | ||
|
|
||
| class Meta: | ||
| model = Customer | ||
| fields = ("email", "first_name", "last_name", "password_1", "password_2") | ||
|
|
||
| def validate(self, attrs): | ||
| if attrs["password_1"] != attrs["password_2"]: | ||
| raise serializers.ValidationError({"password_1": "Passwords didn't match"}) | ||
| return attrs | ||
|
|
||
| def create(self, validated_data): | ||
| customer = Customer.objects.create( | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. manager'imizda create_user seklinde guzel bir methodumuz var. |
||
| email=validated_data["email"], | ||
| first_name=validated_data["first_name"], | ||
| last_name=validated_data["last_name"] | ||
| ) | ||
|
|
||
| customer.set_password(validated_data["password_1"]) | ||
| customer.save() | ||
|
|
||
| return customer | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,7 +1,16 @@ | ||
| from rest_framework import generics | ||
| from rest_framework.permissions import AllowAny | ||
| from rest_framework_simplejwt.views import TokenObtainPairView | ||
|
|
||
| from core.serializers import APITokenObtainPairSerializer | ||
| from core.serializers import APITokenObtainPairSerializer, RegisterCustomerSerializer | ||
| from customers.models import Customer | ||
|
|
||
|
|
||
| class APITokenObtainPairView(TokenObtainPairView): | ||
| serializer_class = APITokenObtainPairSerializer | ||
|
|
||
|
|
||
| class RegisterCustomerView(generics.CreateAPIView): | ||
| queryset = Customer.objects.all() | ||
| permission_classes = (AllowAny,) | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. login olmus bir kullanici bu endpointe ulasmasa iyi olur. |
||
| serializer_class = RegisterCustomerSerializer | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
price bilgisini kullanicidan almasak daha iyi olacaktir.