Список заказов.

Видео отсутствует

Проверка на авторизованность при создании заказа.

Добавляем в настройки рест фреймворка бекенды для аутентификации.

REST_FRAMEWORK = {
    ....
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}

Передадим в контекст серилизатора объект реквеста.

class CreateOrderView(generics.CreateAPIView):
   ...
    def get_serializer(self, *args, **kwargs):
        """

        Add the request into serializer context

        """
        serializer_class = self.get_serializer_class()
        kwargs['context'] = {'request':self.request }
        return serializer_class(*args, **kwargs)

Проверка на авторизованность в серилизаторе.

if self.context['request'].user.is_authenticated:
    print('Authorized!!!')
else:
    print('No Authorized!!!')

Сделаем часть запросов анонимно, а часть нет в команде загрузки заказов.

....

from ij.models import UserProfile
from rest_framework.authtoken.models import Token

def get_user_token(user):
    token, created = Token.objects.get_or_create(user=user)
    return token.key

....

def handle(self, *args, **options):
    print('Load orders...')
    Order.objects.all().delete()
    url = '%s%s' % (DOMAIN,reverse('create_order'))

    ## anonymous requests

    for i in range(10):
        data = generate_test_order_json()
        rez = requests.post(url,json=data)
        print(rez.status_code)

    ## authorized user
    for user in UserProfile.objects.all():
        headers={'Authorization': 'Token %s' % get_user_token(user)}
        for cnt in range(5):
            data = generate_test_order_json()

            rez = requests.post(url,json=data,headers=headers)
            print(rez.status_code)

Отсеиваем авторизованных в серилизаторе.

def save(self, *args, **kwargs): 
    # сохраняем заказ
    order = Order()
    ....

    if self.context['request'].user.is_authenticated:
        order.user = self.context['request'].user.userprofile
    else:
        print('No Authorized!!!')

Для неавторизованных добавим поле email.

Видео отсутствует

Список заказов.

Создадим серилизатор под список.

class OrderListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Order
        fields = ['id', 'title', 'desc', 'category', 'subcategory']

Создадим класс фильтра backend/ij/filters/order.py.

from django_filters import FilterSet, NumberFilter, CharFilter
from ij.models import Order


class OrderListFilter(FilterSet):
    category = NumberFilter()
    subcategory = NumberFilter()
    title = CharFilter(lookup_expr='contains')

    class Meta:
        model = Order
        fields = ['category', 'subcategory']

Создадим вьюшку.

class OrderListView(generics.ListAPIView):
    '''

    Order list.

    __________

    '''
    serializer_class = OrderListSerializer
    queryset = Order.objects.all().order_by('-id')
    filterset_class = OrderListFilter

Добавим роутинг.

from ij.views import ... OrderListView

urlpatterns = [ 
   ...
    path('order/list',OrderListView.as_view(),name="order_list"),
]

Результат.

start page

Постраничная навигация.

Дополняем настройки Rest Framework-а в настройках.

REST_FRAMEWORK = {
    ...
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE': 10,
}

start page

Задать вопрос, прокомментировать.