1 Востаннє редагувалося Jarko (29.12.2021 23:09:49)

Тема: Потрібна критика підходу (архітектури?) до pet-проекту на Flask

Привіт! Я розробляю власний не комерційний pet-проект для здобуття досвіду необхідного для отримання роботи (Python/web dev). Також вірю, що по завершенню він може знайти своє коло користувачів)

Буду вдячний за конструктивну критику пайтоністів мого підходу до цього проекту та поради як його краще реалізувати.

Вирішив запитати саме зараз, бо вже написав скрипт для отримання потрібних даних і стоїть питання як їх обробляти/зберігати (зараз дані в CSV). Хочу зробити все максимально наближено до ситуації якби це був проект із замовником, компанією-працедавцем і все таке. Поки загалом не впевнений на всі сто що далі в технічному плані...

Концепція:
v1.0.0-alpha - вебсайт-каталог відео українською з одного YT каналу з можливістю перегляду спільної для всіх відео tag cloud. К-сть відео - 200
v1.0.0-beta - додається пошук з автопідстановкою по тегам. К-сть відео - 650+ (кілька каналів)
v1.0.0 - додається сортування за датою випуску/кількістю переглядів. Додається cron для парсингу нових відео з YT за тиждень.

Структура:
"/" - renders every video thumbnail img+title with <a href="youtube.com/watch?v={videoId}" target="_blank"> in tiles
"/tag_cloud" - renders all unique tags with related counters

Техстек:
Python (Flask), YouTube API, MariaDB (?), HTML with some CSS to build tag cloud

v1.0.0-alpha development high level algorithm:
1. GET video details from the channels (Done, currently it saves to individual CSV per channel)
2. Save the details to DB (MariaDB)
3. Fetch all videos details to Flask and render as HTML blocks ("/")
4. Fetch unique tags with counter FROM DB to Flask and render as HTML (will be shown on "/tag_cloud" page)

UI
Я хочу зосередитися на back-end і зробити UI максимально простим. Або й передати UI кому це справді цікаво як pet-проект.

Питання:
1. Чи підхід до створення 1.0.0-alpha є оптимальним до реалізації?
2. Де краще все захостити?
3. Яку СКБД краще використати (просту, але разом з тим, щоб використовувалася на реальних проектах)?
4. Яку технологію пошуку з автопідстановкою краще використовувати?

p.s. писав частково англійською, тільки тому що так було легше.
p.s.s. помітив, що де-факто у цьому розділі обговорюють проекти на Python, тому ризикну запостити цю тему тут :-)

Подякували: 0xDADA11C7, mamkin haker2

2

Re: Потрібна критика підходу (архітектури?) до pet-проекту на Flask

2. Де краще все захостити?

Користуюся сам і раджу іншим - шукайте недорогі vps (на жаль, з недорогими буває що треба перепробувати декілька поки знайдеться саме "воно", пропоную прохати завжди тестову добу-дві і далі інтенсивно тестувати), є хороші шанси знайти щось стабільне до 2$ (в моєму випадку це 1.99$ - лінк не дам), хоча більш стандартна ціна буває 5$ за місяць.

3. Яку СКБД краще використати (просту, але разом з тим, щоб використовувалася на реальних проектах)?

Дуже багато проектів використовують Postgres. Також популярністю користуються Mysql, SQLite. Особисто для себе я обрав Postgres і також практично на кожному з останніх моїх робочих проектів ця база є на проді.

Що ж до вибору Flask, то це підходить для невеликих проектів, однак коли починається розростання з необхідністю надавати права доступу користувачам до окремих розділів етц, то тут вже треба застосовувати різні воркераунди, тому на майбутнє варто освоїти django де цей функціонал вже є вбудований.

3

Re: Потрібна критика підходу (архітектури?) до pet-проекту на Flask

Дякую, frz! Думаю спробувати Postgres... Але пошук на сайті буде по назвам відео (теґів надто багато - рос і укр дублікати, вони не структуровані і робити це не бачу сенсу).
Як в даному випадку краще реалізувати пошук у Flask апці? Чи буде достатньо суто через запити до БД?

4

Re: Потрібна критика підходу (архітектури?) до pet-проекту на Flask

Щоб відповісти на запитання, потрібно бачити структуру бази. Поки що можу лише припускати:

введена пошукова стрічка

tag_name1

відповідний пошук в базі

select column1 from table1 where upper(tag) like upper('%tag_name1%')

5

Re: Потрібна критика підходу (архітектури?) до pet-проекту на Flask

Дякую, зрозуміло! Структуру і запит з параметрами від html-форми я ще створю..  Просто заплутався як реалізувати саме пошук (щось нагуглив про SQLAlchemy, ElasticSearch тощо, але не працював з ними і не дуже розумію що там куди).

Прихований текст
frz написав:

Щоб відповісти на запитання, потрібно бачити структуру бази. Поки що можу лише припускати:

введена пошукова стрічка

tag_name1

відповідний пошук в базі

select column1 from table1 where upper(tag) like upper('%tag_name1%')

6

Re: Потрібна критика підходу (архітектури?) до pet-проекту на Flask

SQLAlchemy і ElasticSearch варто спробувати бо це сучасні технології, але ж і замість Flask варто спробувати Django.

Тому вибір - вивчати щось складніше або ж реалізувати простішими технологіями. Наприклад, якщо обрати базу Postgres, тоді достатньо psycopg2.

import psycopg2

sql_request = """ SELECT ... """

try:
  postgres_connection = psycopg2.connect(user="user1",
                                  password=password1, 
                                  host="host1",
                                  port="5432",
                                  database="database1")
  cs = postgres_connection.cursor()
  cs.execute(sql_request)
  rows=cs.fetchall()

except (Exception, psycopg2.Error) as error :
    print ("Error while fetching data from PostgreSQL", error)
      
finally:
    if(postgres_connection):
      cs.close()
      postgres_connection.close()
      print("PostgreSQL connection is closed")

Далі вже виводити на екран rows у більш юзер-френдлі форматі.

7 Востаннє редагувалося Jarko (03.01.2022 17:27:19)

Re: Потрібна критика підходу (архітектури?) до pet-проекту на Flask

З Новим роком усіх хто читає цю тему!
Ще прохання - порадьте будь ласка найкращу практику щоб перенести проект з Win10 на віртуалку (Lubuntu, VirtualBox) для продовження розробки.
Я поки просто зберігав файли з Sublime у папку. Без git, без virtual environment. Тому:

1. мені б зараз просто перести проект, але головне - досвід наближений до справжньої веб-розробки
2. по завершенню проекту планую задеплоїти на безкоштовний Pythoneverywhere (або Heroku)
3. у майбутньому можливо хтось інший працюватиме над UI частиною проекту

Читав офіційно про пакування , але це мене ще більш заплутало. Бо наприкінці вступного оверв'ю вони пишуть що virtualenvs (Pipenv) це давній підхід і радять інші підходи, а потім у наступних гайдах описують як користуватися саме virtualenv...

Прихований текст

virtualenv
Virtualenvs have been an indispensable tool for multiple generations of Python developer, but are slowly fading from view, as they are being wrapped by higher-level tools. With packaging in particular, virtualenvs are used as a primitive in the dh-virtualenv tool and osnap, both of which wrap virtualenvs in a self-contained way.

For production deployments, do not rely on running python -m pip install from the Internet into a virtualenv, as one might do in a development environment. The overview above is full of much better solutions.

Я чув що ніби зараз Docker використовують для таких речей. Та знову ж таки не впевнений, чи він підійде по пунктам ##1-3 (особливо #3), які я згадав.

Подякували: 0xDADA11C71

8 Востаннє редагувалося frz (03.01.2022 21:39:17)

Re: Потрібна критика підходу (архітектури?) до pet-проекту на Flask

Тут для початку варто зрозуміти, що саме робить virtualenv.

Скажімо, на компі триває розробка декількох проектів і в обох використовується важлива стороння бібліотека, наприклад lib_abc. Однак один з проектів вимагає lib_abc версії 2.05, а інший - версії 3.08, і що робити?

Для цього можна (1) створити різні віртуалки, це в принципі варіант якщо є достатньо місця на диску для віртуального диску, але що коли потрібно запустити обидва одночасно в різних вікнах? Тоді ще й потрібно враховувати навантаження на процесор і об'єм використаної оперативки. Але такий варіант все ще валідний - якщо йдеться про початківця, звісно.

Якщо набридло гратися з віртуалками та/або хочеться "перейти на наступний рівень", тоді (2) застосовується virtualenv, що дозволяє використання однієї і тієї ж бібліотеки з різними версіями для різних проектів. Окрім цього, котрась з бібліотек потрібна лише в одному з проектів, а в іншому ні - це теж дозволяє virtualenv.

Ну а (3) докер це зараз мейнстрім, з моїх приблизних відомостей технологія дозволяє запакувати свою аплікацію в контейнер і в цьому ж контейнері задеплоїти на сервер. На жаль, деталей не розповім, бо й сам ще не пробував.

----

Що ж до перенесення файлів на віртуалку - ну в мене навпаки, убунта (лубунта) основна, а от віндовс при потребі запускаю на віртуалці, тоді з-під вінди конекчуся через ssh до убунти за допомогою тулзи winscp. Таке не пройде у випадку коли вінда основна, а убунта на віртуалці; ну тоді потрібно просто ввімкнути буфер обміну і копіювати необхідні файли ctrl+c ctrl+v.

9

Re: Потрібна критика підходу (архітектури?) до pet-проекту на Flask

Ок, дякую що поділилися досвідом. Вирішив пробувати і ось що вдалося з'ясувати (про WSL2 доволі цікавий результат)...
1. virtual environments - мінімальний маст хев для розробки під Пайтон. Сайт Flask'у прямо описує налаштування venv як підготовчий етап перед розробкою.
2. віртуалки - порівняно дорого і стане ще дорожче. Наприклад, Lubuntu вже не позиціонують себе як "ubuntu для слабких машин". Вимоги як для Він 10 починаючи з поточної, 20ї версії. А віртуалки без графічного інтерфейсу для мене зараз не пріоритет в зв'язку з додатковим рівнем складності чз віртуалізацію. Мабуть краще ознайомлюся з Docker трохи пізніше.
3. Windows 10+ дозволяє (і навіть всіляко заохочує) злиття і збочення типу
"C:\>wsl python3 -V
Python 3.8.10

>wsl ls"
це все і навіть ">wsl sudo apt-get update" (та ін. з sudo) працюють аж бігом з-під Віндовс після встановлення WSL2 (офіційно, безкоштовно) без жодних додаткових маніпуляцій.

Кілька слів про свій досвід WSL2:
- встановив щоб інсталювати та використовувати MariaDB через термінал. У Він10 не хотіло норм працювати. MySQL теж. Під WSL2 та сама історія(
-  моя WSL2 на основі Ubuntu. А Docker має вимоги до процесора тощо, якщо ставити на Віндовс, і тільки до ОС, якщо на Ubuntu.

Я планував поставити Докер на WSL, але після невдачі з MariaDB, відкинув цей експеримент.
Просто поставити Ubuntu в дуалбут і зміг просто займатися розробкою проекту, використовуючи venv, а не танцями з бубном.
https://replace.org.ua/uploads/images/5249/2e7c2596f3fb612b3c49c939893bd85c.png

Подякували: 0xDADA11C71