GithubHelp home page GithubHelp logo

3_3_api_with_restrictions's Introduction

Backend для приложения с объявлениями

Описание

Необходимо реализовать бекенд для мобильного приложения с объявлениями. Объявления можно создавать и просматривать. Есть возможность фильтровать объявления по дате и статусу.

Создавать могут только авторизованные пользователи. Для просмотра объявлений авторизация не нужна.

У объявления есть статусы: OPEN, CLOSED. Необходимо валидировать, что у пользователя не больше 10 открытых объявлений.

Обновлять и удалять объявление может только автор этого объявления.

Чтобы боты и злоумышленники не нагружали нашу систему - добавьте лимиты на запросы:

  • для неавторизованных пользователей: 10 запросов в минуту
  • для авторизованных пользователей: 20 запросов в минуту

Реализация

Пример работы: Фильтрация по дате

  • В настройках подключено приложение rest_framework.authtoken и сконфигурирован DEFAULT_AUTHENTICATION_CLASSES. Для того, чтобы завести токен для пользователя, проделайте следующие шаги:

    • создайте пользователя через админку
    • также через админку, заведите ему токен
    • этот токен используйте в запросах, передавая его в заголовках
  • Так как интерфейс BrowserableAPI в DRF не позволяет передавать заголовки с токеном, используйте Postman или HTTP-клиент VSCode.

Примеры:

Успешный запрос: Успех

Неправильный токен: Неправильный токен

  • Для переопределения доступов для отдельных методов ViewSet используется метод get_permissions (добавлен в заготовку, следует с ним ознакомиться и посмотреть с помощью breakpoint'ов в какой момент DRF его вызывает)

  • валидацию удаления чужого объявления следует делать:

  • С примерами запросов к API вы можете ознакомиться в файле requests-examples.http

Подсказки

  1. В места, где нужно добавлять код, включены TODO-комментарии.

  2. Ознакомьтесь целиком со структурой проекта. Разберите, как работает код в заготовке, например, проставляется поле создателя объявления таким образом, чтобы злоумышленник не мог создавать объявления от чужого лица.

  3. Используйте возможность указывать fields в Meta внутри FilterSet класса, чтобы не задавать фильтры, которые могут сгенерироваться автоматически.

  4. Админка Джанго по-умолчанию даст возможность создания и редактирования пользователей и токенов. Этим удобно пользоваться для локального создания сущностей.

Доп-задания (не обязательные к выполнению)

Права для админов

  • Реализуйте функциональность для админов. Админы могут менять и удалять любые объявления.

Избранные объявления

  • Добавить возможность добавлять объявления в избранное. Автор объявления не может добавить свое объявление в избранное. Должна быть возможность фильтрации по избранным объявлениям. Например, пользователь хочет посмотреть все объявления, которые он добавил в избранное.

  • для того, чтобы добавить дополнительный метод с урлом во ViewSet, вам может пригодиться декоратор action из DRF.

Добавить статус DRAFT

  • добавьте статус DRAFT - черновик. Пока объявление в черновике, оно показывается только автору объявления, другим пользователям оно недоступно.

Документация по проекту

Для запуска проекта необходимо:

Установить зависимости:

pip install -r requirements.txt

Вам необходимо будет создать базу в postgres и прогнать миграции:

manage.py migrate

Выполнить команду:

python manage.py runserver

3_3_api_with_restrictions's People

Contributors

leventi avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.