Zajęcia Python III nr 13 - notatki

Zajęcia Python III nr 13 - notatki
Photo by Rafael Barbosa / Unsplash

Komponent do obsługi formularzy w Streamlit, aby strona nie odświeżała się niepotrzebnie po każdym wpisie użytkownika:

st.form - Streamlit Docs
st.form creates a form that batches elements together with one or more submit buttons.

Taki formularz jest zamknięty w with, jako blok danych. Przykład:

import streamlit as st

with st.form("Dane osobowe"):
    imie = st.text_input(label="Imię")
    nazwisko = st.text_input(label="Nazwisko")
    stanowisko = st.text_input(label="Stanowisko")
    wykształcenie = st.selectbox(label="Wykształcenie",options=["podstawowe", "średnie", "wyższe"])
    wyslij_btn=st.form_submit_button("Prześlij")

    if wyslij_btn:
        st.write(imie, nazwisko, stanowisko, wykształcenie)

W przypadku kiedy chcemy przechować stan zmiennych aby nie odświeżały się one w całości ze stoną, możemy użyć tego:

Session State - Streamlit Docs
st.session_state is a way to share variables between reruns, for each user session.

Przykładowe użycie, pozwalające na przechowanie danych dla zmiennej liczba:

import streamlit as st

if "liczba" not in st.session_state:
    st.session_state["liczba"] = 0

dodaj_btn = st.button(label="Dodaj +1")

if dodaj_btn:
    st.session_state["liczba"] += 1

st.write(f"Liczba: {st.session_state["liczba"]}")


Sieci, http, TCP/IP, API


Znaki specjalne w html:

W3Schools.com
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

REVERSE PROXY - to serwer pośredniczący, który odbiera żądania od klientów i przekazuje je do odpowiednich serwerów wewnętrznych, a następnie zwraca odpowiedzi do klienta. Reverse proxy chroni serwery wewnętrzne, a proxy chroni klienta.
Reverse proxy to dobra rzecz jeżeli chce się mieć swój serwer z postawionymi domenami. Przykładowe reverse proxy:

Reverse proxy quick-start - Caddy Documentation
Caddy is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go

Protokoły IP

  • TCP - sprawdza, czy paczka danych dotarła do adresata
  • UDP - nie ma sprawdzania, ale ma inne zalety - mniej obciąża komputer i działa szybciej


Protokół HTTP - odpowiedzialny za przesyłanie zasobów w architekturze klient-serwer. Najczęściej korzystamy z protokołów https czyli http szyfrowanego.

Możemy szyfrować ruch sieciowy przy użyciu certyfikatów, a certyfikatów obecnie nie trzeba koniecznie kupować za wielkie pieniądze. Przykładowy sposób na łatwiejsze zdobycie certyfikatu:

Let’s Encrypt
Let’s Encrypt is a free, automated, and open Certificate Authority brought to you by the nonprofit Internet Security Research Group (ISRG). Read all about our nonprofit work this year in our 2024 Annual Report.

Takie certyfikaty z darmowych serwisów są zwykle czasowe... Wymagają odświeżenia zwykle po kilku miesiącach. Na szczęście wspomniany wcześniej reverse proxy Caddy może coś takiego robić automatycznie.


Przeglądarki sprawdzają czy certyfikaty są zaufane.

Metody HTTP z których będziemy korzystać:

  • GET - pobranie zasobu
  • POST - przyjęcie danych od klienta do serwera
  • DELETE - żądanie usunięcia zasobu

Metod jest rzecz jasna więcej.


API - kontrakt dotyczący wymiany danych przez aplikacji. Nie precyzuje on szczegółów tego kontraktu.
NIE jest to protokół, dokumentacja, standard czy program.

What Is a REST API (RESTful API)? | IBM
A REST API is an application programming interface (API) that conforms to design principles of the representational state transfer (REST) architectural style.

Publiczne API:

GitHub - public-apis/public-apis: A collective list of free APIs
A collective list of free APIs. Contribute to public-apis/public-apis development by creating an account on GitHub.

Hoppscotch

Hoppscotch • Open source API development ecosystem
Helps you create requests faster, saving precious time on development.

Schemat interfejsu:

Na Hoppscotch można zdobyć kod Pythona do wyciągania danych ze stron (przy pomocy json)