Code Monkey home page Code Monkey logo

donsky1 / motostore Goto Github PK

View Code? Open in Web Editor NEW
3.0 1.0 0.0 6.45 MB

Motorcycle online store - Веб-сервис смело можно использовать в production в сфере услуг по продаже и покупке мотоциклов, а за счет мощного и гибкого фреймворка вносить изменения любой сложности и расширять имеющуюся бизнес логику. Удобная интеграция с ботом добавит современный подход к ведению бизнеса и расширит пользовательскую аудиторию.

License: GNU General Public License v3.0

Python 51.52% HTML 30.99% CSS 11.39% JavaScript 6.09%
ajax django django-rest-framework drf python query requests telebot telegram-bot tqdm

motostore's Introduction

Motorcycle Store

Интернет-магазин на фреймворке Django

Website Using Django

Навигация по документации:

Обзор

Motorcycle Store - интернет площадка для размещения объявлений для юр и физ лиц посвященная продаже "мотоциклов".

Данный сайт представляет из себя упрощенную версию классифайд площадки - ресурса с объявлениями от физических и юридических лиц с различными предложениями, широко известных на просторах рунета auto.ru или avito.ru. Однако тут тематика узкоспециализированная, и это мотоциклы.



Структура сайта

  1. Главная
    • Торговая площадка - отображаются все активные объявления
    • Разместить объявление
  2. Новости
    • Публикации - новостной раздел сайта
    • Опубликовать новость
  3. Проект
    • О проекте - информация о сайте
    • Контакты - форма обратной связи
  4. Условия - техническая информация, лицензия
  5. Профиль
    • "Пользователь" - страница с профилем пользователя
    • Выход


Особенность

  • Парсер объявлений для заполнения БД с сайта auto.ru. (Инструкция будет ниже)
  • Система авторизации пользователей
  • Пагинация на веб странице
  • Права доступа
  • API
  • Telegram Bot. Запросы пользователй и информация о пользователях сохраняется в БД для дальнейшего анализа.(Инструкция будет ниже)
  • Пагинация в телеграм боте
  • Если в профиле пользователь укажет свой телеграм аккаунт или телефон, то имеется способ напрямую связаться с ним через телеграм объявление
  • Объявления и новости могут публиковать только авторизованные пользователи. Новости могут публиковать только пользователи со статусом author
  • Редактирование новостей и объявлений возможна, как на главной странице, так и на странице профиля пользователей и в самой новости или объявлении. Пользователь может редактировать, удалять только свои.
  • На странице профиля можно увидеть все объявления и новости с указанием количества.
  • На странице профиля можно изменить токен для api доступа без перезарузки страницы на ajax, информацию профиля, пароль
  • Имеется два блока поиска по ключевым словам
  • Имеется динамический блок фильтрации контекта по марке, модели, типу мотоцикла, а также цены без перезарузки страницы на ajax
  • После обновления страницы форма сохраняет свои поисковые запросы
  • Имеется блок типов мотоцикла для ускоренной фильтрации контента
  • Имеется блок часто просматриваемых объявлений



Установка

(действия будут выполнятся на windows)

1. Создаем директорию, клонируем проект в эту папку ...

git clone ..

2. Переходим в папку с проектом, выполнив команду cd

cd motostore/motostore

3. Установим все необходимые библиотеки, используя pip ...

pip install -r requirements.txt

4. Создадим новые миграции

manage.py makemigrations 

5. Применим миграции

manage.py migrate  

5.1 Создадим суперпользователя. Он нам понадобиться для парсинга. Именно на него будут заводиться все объявления (Если Вы выберите заполнение через json, то этот пункт можно пропустить, т.к далее будет выполнена загрузка пользователей)

manage.py createsuperuser

Заполнение данными

Вариант 1. Парсинг объявлений с сайта auto.ru

6. На данный момент все готово, но данных пока у нас нет, поэтому выполним парсинг с сайта auto.ru. Т.к сайт динамически обновляет контент, необходимо ...

6.1.1 Создаем config.py в директории storeapp/management/, т.е должно получиться storeapp/management/config.py

6.1.2 Заходим на сайт в раздел мотоциклы [auto.ru](https://auto.ru/motorcycle/all/). Открываем инструменты разработчика Ctrl+Shift+I или F12

6.1.3 Далее следуем инструкциям по картинке:

6.1.4 Скопированный cURL вставляем в любой cURL конвертер онлайн

6.1.5 Получаем request запрос на языке python. (да там много языков, нам нужен python). Копируем словари cookies и headers в ранее созданный файл config.py.

6.1.6 (Опционально) Словарь json_data можем изменить в файле fillstore, именно в нем задаются параметры запроса. В целом достаточно изменять ключ "catalog_filter" в json_data. Параметры опять же можно узнать в раскодированной curl соманде

6.1.7 Выполняем парсинг любой командой (-w --wait задает время ожидания между запросами, если не задано, то случайное число в диапазоне от 10 до 35 сек.):

manage.py fillstore
manage.py fillstore -w 30
manage.py fillstore --wait 30

6.1.8 Запускаем сервер командой

manage.py runserver

6.1.9 При попытке зайти на сайт мы увидим, что сайт будет пустым. Это связано с тем, что объявления которые спарсились находятся в неактивном статусе, т.е. их нужно активировать. Для этого заходим в админку: wedsite/admin. Логинимся под суперпользователем, которого создали в пунке 5.1. Далее в раздел мотоциклы, все выделяем галочкой и выполняем команду: "Опубликовать"

Вариант 2. Заполнить из JSON

6.2.1 Загрузим базу пользователей. Таким образом в системе будет два пользователя. Суперпользователь будет (admin, 123)

manage.py loaddata db_json/users.json

6.2.2 Загрузим базу новостей

manage.py loaddata db_json/news.json

6.2.3 Загрузим базу объявлений

manage.py loaddata db_json/store.json

6.2.4 Загрузим изображения для объявлений, выполнив команду в django админ панели

manage.py download-images.py 

7. Снова заходим на сайт.


Телеграм бот в синхронизации с сайтом

Далее инструкция представлена из расчета, что пользователь уже знает, как создать пустого бота в телеграм, получить token

1. Создаем файл telegram_config по следующей директории: telegramapp.management.telegram_config

2. Создаем в файле telegram_config константы TOKEN, PATH_TO_IMAGES

TOKEN = 'TelegramBotToken'
PATH_TO_IMAGES = 'absolute path to motostore' # к примеру C:/../../motostore

3. Запускам бота командой

manage.py telegram

4. Открываем своего бота и вводим команду

/start

API

API функционал выполнен с использованием Django REST framework

Неавторизованные пользователи получают доступ только на чтение, а вот авторизованные могут выполнять действия в зависимости от прав доступа. На проекте доступны 3 вида аутентификации: базовый на основе пароля и логина, сессии и токен аутентификация

'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ],
 ...
'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    ]

API Root запрос выполняется на website/api/v0/

/api/v0/

Остальные API запросы выполняется на website/api/v0/request

mark list: /api/v0/marks/
models: /api/v0/motorcycle-models/
news: /api/v0/news/
...

сURL API запрос на чтение

curl -X GET http://website/api/v0/
curl -X GET http://website/api/v0/marks/ -u user:password
curl -X GET http://website/api/v0/marks/ -H "Accept: application/json" -H "Authorization: Token token"

сURL API запрос на запись

Так как операции запись, редактирование и удаление доступна только авторизованным пользователям, то в запрос необходимо передать логин и пароль или токен (который можно получить в личном кабинете)
curl -X POST http://website/api/v0/marks/ -u user:password -d "name=TestString"
curl -X POST http://website/api/v0/marks/ -H "Accept: application/json" -H "Authorization: Token token" -d "name=TestString"

сURL API запрос на редактирование

Так как операции запись, редактирование и удаление доступна только авторизованным пользователям, то в запрос необходимо передать логин и пароль или токен (который можно получить в личном кабинете)
curl -X PUT http://website/api/v0/marks/id/ -u user:password -d "name=NewString"
curl -X PUT http://website/api/v0/marks/id/ -H "Accept: application/json" -H "Authorization: Token token" -d "name=NewString"

сURL API запрос на удаление

Так как операции запись, редактирование и удаление доступна только авторизованным пользователям, то в запрос необходимо передать логин и пароль или токен (который можно получить в личном кабинете)
curl -X DELETE http://website/api/v0/marks/id/ -u user:password
curl -X DELETE http://website/api/v0/marks/id/ -H "Accept: application/json" -H "Authorization: Token token"

Инструменты: python, django, drf, Django REST framework, telebot, jquery, ajax, html, css, js, pillow, tqdm, requests

motostore's People

Contributors

donsky1 avatar

Stargazers

 avatar  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.