Flask do REST API i przydatne pakiety

Flask do REST API i przydatne pakiety
RE
  • Rejestracja:około 4 lata
  • Ostatnio:ponad 3 lata
  • Postów:66
0

Cześć, kompletnie nie orientuje się w ekosytemie Pythona i nie wiem, z których pakietów warto korzystać w połączeniu z frameworkiem Flask, dlatego chciałbym prosić o pomoc w ich doborze. Wcześniej uczyłem się JavaScript (framework Express, mongoosejs) i nie ukrywam, iż szukam czegoś podobnego w Pythonie.

Pytania:

  1. Jaki wybrać pakiet do interakcji z MongoDB? Sprawdziłem Flask-PyMongo, ale działa inaczej niż mongoosejs. Potrzebowałbym coś w stylu mongoosejs tzn. aby można było określić schemat (dozwolone klucze dla dokumentu, reguły walidacji) i model do interakcji z bazą danych.

  2. Czy we Flasku jest coś w rodzaju Router z Express tzn. aby można było wydzielić endpointy do obiektu, nie robić tych globalnych funkcji i nie trzymać wszystkiego w jednym pliku?

  3. Jak obsługiwać błędy? Z tego co widzę to PyMongo ma jakieś metody w stylu find_one_or_404, warto z nich korzystać? Czy wewnątrz funkcji wsadzić blok try:except?

  4. Jakieś sugestie jak zorganizować strukturę projektu dla bardzo podstawowego API, które będzie zwracać dane z 2-3 kolekcji?

ledi12
  • Rejestracja:ponad 5 lat
  • Ostatnio:11 dni
  • Lokalizacja:Wrocław
1

Nie lepiej zrobic to w Django Rest Frameworku ? Wszystko to o czym wspomniales jest w standardzie.


Robię http response status cody w martwych ciągach
RE
Wybór padł na Flaska, ale dzięki za propozycję.
siloam
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:99
2

Zerknij na fastAPI


RE
Ciekawe, może kiedyś pobawie się, gdy będę potrzebował koniecznie użyć Pythona :P Dzięki za propozycję.
Spearhead
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 8 godzin
  • Postów:1001
1
  1. mongoengine jest popularnym wyborem, istnieje z tego co widzę również i plugin pod Flaska. Ogółem jednak nie polecam pchania się w Mongo, bo to źródło bólu i cierpienia
  2. Aplikacje flaska strukturyzuje się przez dzielenie na tzw. blueprinty, każdy w osobnym pliku, zacznij lekturę od tego i tego. Co do globalnych funkcji, wolę podejście znane z tornado, gdzie każdy handler jest klasą z metodami get, post itd. zamiast globalnej funkcji z odpowiednim dekoratorem. We Flasku robi się to przy pomocy flask.views.MethodView
  3. Normalnie używasz wyjątków w handlerze jak w kazdym kodzie Pythona i jeżeli coś nie wyjdzie, to zgłaszasz flask.abort(). Tutaj jest wszystko opisane
  4. Zgodnie z tym, co napisano wyżej, główny plik rejestruje blueprinty, każdy blueprint opisuje jeden endpoint w osobnym pliku, definiując go jako klasę dziedzicząco po flask.views.MethodView Alternatywnie można obejrzeć inne rozszerzenie, flask-restful.
RE
MongoEngine i FlaskRESTful wydają się tym czego potrzebuję. Dzięki za te wszystkie linki i rozjaśnienie tematu. Nie wiem tylko z jakiego powodu odradzasz bazę MongoDB :P Akurat chcę użyć bazy dokumentowej a z MongoDB korzystałem przy poprzednim API w Express.
Spearhead
Ogółem mam raczej marne doświadczenia z Mongo, opisywane tutaj i jestem zwolennikiem stosowania starych, sprawdzonych RDMS-ów, NoSQL-a zaś polecam raczej do innych zadań (zbieranie logów, metryk, modelowanie sieci połączeń w bazach grafowych itd). W Internecie też widziałem sporo narzekań. Aczkolwiek skoro jak piszesz przychodzisz z koszmarnego świata JavaScriptu, może faktycznie nie czujesz jak bardzo jest to badziewne :)
RE
Wiadomo masz duże doświadczenie to wiesz więcej niż taka osoba jak ja, która robi tutorialowe rzeczy dla siebie a nie komercyjnie :P Choć z 2 miesiące temu przeczytałem ogólną książkę o NoSQL i otworzyła mi oczy, że do danych/zastosowań powinno się dostosować rodzaj bazy, (i że można mieć wiele baz a nie tylko 1), ale jak mówię nie mam doświadczenia to raczej tylko teoretyczne "zasłyszane" rozważania.
RE
No a co do JS i MongoDB no nie wiem, jeszcze kiedyś JS "bałem się", bo nie rozumiałem o co chodzi w arrow functions i bardzo mnie odstraszał ten język, ale jakoś po zapoznaniu nawet mi się spodobało. TypeScript wydaje się chyba lepszy, ale tak tylko gdybam :)
Spearhead
Ogółem uważam, że cały Front-End development to jeden wielki badziew, vide słynny wpis How it feels to learn JavaScript in 2016 i bardzo się cieszę, że trzymam się od tego z daleka. Z tego punktu widzenia zapytania przy pomocy obiektów JavaScriptu są straszliwie paskudne, szczególnie w porównaniu do starego, dobrego SQL-a.
MA
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:337
1

https://python-poetry.org/ - polecam do zarządza wersją pythona i zależnościami i środowiskiem developerskim.

https://github.com/zalando/connexion do budowania serwisów w oparciu o openapi flaska i pythona

RE
Dużo w Pythonie jest takich narzędzi do zarządzania pakietami itd? Ja akurat mam zainstalowaną minicondę i za pomocą niej tworzę środowisko, w którym pobieram odpowiednią wersję Pythona, pakiety zgodne z tą wersją itd.
MA
Do środowiska głównie jest pyenv, poetry go wykorzystuje. Conda wydaje mi się za ciężka i nie wiem czy ma plik konfiguracyjny jak poetry co może być wadą
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)