Skocz do zawartości

Witaj na forum webmasterów Webax.pl.

Wyświetl nową zawartość

Flask - strony WWW w Pythonie!


  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie
Thelleo
Thelleo

    Początkujący

  • Użytkownik
  • PipPipPip
  • 99 postów
#1

Napisano 25 sierpień 2012 - 15:49

Flask - strony WWW w Pythonie

Python jest obiektowym i interpretowany językiem. Jest znacznie mniej popularny od np. PHP, ponieważ nie ma w nim żadnych klamr i wydaje się inny od "normalnych" języków programowania, gdyż liczą się w nim wcięcia w kodzie (co może też być utrudnieniem dla ludzi, których kod nie jest zbyt ładny).
Najpopularniejszym frameworkiem od tworzenia stron WWW w tym języku jest Django, jednak bardzo często nie potrzebujemy aż takich kombajnów i dlatego chciałbym zaprezentować wam Flask, który mimo niewielkiego rozmiaru pozwala nam na tworzenie nawet całych portali.

Instalacja

Debian/Ubuntu (Linux)

Aby zainstalować Flaska na systemie Debiano-podobnym należy zalogować się jako root i wykonać następujące komendy.
apt-get install python-pippip install Flask
Nie szukaj następnych komend ;) Te dwie wystarczyły i Flask jest już zainstalowany w twoim systemie! Taka jest magia Pythona.

Windows

Nie wykonywałem instalacji na Windowsie a jedynie przepisałem fragment o niej z oficjalnej dokumentacji Flaska, więc w przypadku błędów nie jestem w stanie pomóc.

W Windowsie instalacja jest nieco bardziej skompilowana jednak nie powinna sprawić większego problemu.
Na początku jeżeli jeszcze nie mamy to będziemy zmuszeni pobrać interpreter Pythona ze strony http://python.org/ft...ython-2.7.3.msi.
Następnie gdy go już zainstalujemy będziemy musieli pobrać ten plik: http://python-distri...ribute_setup.py i wrzucić go do katalogu Scripts w naszym folderze z Pythonem. Np. C:Python27Scripts
Gdy to już zrobimy będziemy musieli uruchomić skrypt. Można to zrobić dwuklikiem jednak jeżeli Python nie zintegrował się z plikami .py to można to wykonać komendą:
C:Python27python.exe C:Python27Scriptsdistribute_setup.py
Po wykonaniu skrypt powinien nam pobrać archiwum, w którym powinien znajdować się folder. Zawartość tego folderu wypakowujemy do katalogu Scripts w folderze Pythona i wykonujemy komendę:
C:Python27python.exe C:Python27Scriptseasy_install.py pip
A następnie kolejną:
C:Python27Scriptspip.exe install Flask
Pierwsza strona

Gdy już uporamy się z instalacją będziemy mogli tworzyć własne strony. Żeby to zrobić należy stworzyć plik z rozszerzeniem .py np. testujemyPythona.py.
W tym pliku możemy wrzucić następującą treść:
from flask import Flaskapp = Flask(__name__)@app.route("/")def hello():    return "Testujemy!"if __name__ == "__main__":    app.run(host=0.0.0.0,port=6666)
Po zapisaniu uruchamiamy go komendą
python testujemyPythona.py
Lub dwuklikiem jeżeli używamy Windowsa. Powinniśmy otrzymać teraz tekst w stylu:
 * Running on http://0.0.0.0:6666/
Aby sprawdzić czy rzeczywiście sie nam udało musimy wejść na adres http://localhost:6666 lub http://ip.lub.domena.serwera.pl:6666.
Powinniśmy otrzymać tekst Testujemy, jeżeli tak się stało to brawo! Nasz Flask działa jak powinien.

A teraz omówimy sobie kod który napisaliśmy:
from flask import Flask # Importujemy paczkę z Flaskiemapp = Flask(__name__) # Tworzymy nowy obiekt z klasy Flask(plik). __name__ zawiera nazwę aktualnego pliku.# Tworzymy funkcję, która wywoła się gdy tzw. route czy ścieżka # wyszukiwana przez użytkownika zgadza się z tym co podaliśmy w # parametrze @app.route(). Funkcja może mieć dowolną nazwę i musi # zwracać treść, która zostanie wyświetlona użytkownikowi.@app.route("/")def hello():    return "Testujemy!"# Teraz jeżeli aktualny plik jest plikiem który uruchomiliśmy to# startujemy serwer. Można zmodyfikować jego port oraz host# Domyślny port serwerów HTTP to 80if __name__ == "__main__":    app.run(host=0.0.0.0,port=6666)
Pierwsza prawdziwa strona - wizytówka!

Teraz do naszego folderu z plikiem testujemyPythona.py dodajemy katalog templates w którym schowamy plik html, które zostaną wyrenderowane przez Flaska jako szablony.

Na początku stworzymy sobie plik templates/szablon.html z treścią:
<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>{{ title }} - Wizytówka</title></head><body>    <h1>Wizytówka</h1>    <p>        {{ content }}     </p></body></html>
Zauważalną rzeczą są dwie wartości ukryte między znakami {{ wartośc }}. Są to parametry, które przekażemy do naszego szablonu za pomocą Flaska.

Stworzymy sobie jeszcze plik templates/home.html z treścią:
Witaj na mojej wizytówce! Stworzyłem tą stronę w 2009 roku a teraz mamy {{ year }}![url="/omnie"]Poczytaj coś na mój temat![/url]
Oraz templates/about.html z treścią:
Nazywam się Thelleo!
No dobrze. Teraz gdy nasze widoki są już skończone zrobimy sobie prostą aplikację, która je prawidłowo wyświetli. W tym celu edytujemy plik testujemyPythona.py i piszemy w nim coś takiego:
import datetime # Dolaczamy funkcje zwiazane z datafrom flask import Flaskapp = Flask(__name__)@app.route("/")def home():    now = datetime.datetime.now()    # Tworzymy szablon z aktualna strona i przypisujemy     # jej zmienna zawierajaca rok    page = render_template('home.html', year=now.year)    # Zwracamy szablon z przyspisana trescia pochodzaca     # z szablonu powyzej i tytulem    return render_template('szablon.html', title="Home", content=page)@app.route("/omnie")def about():    # Robimy tak jak powyzej, jednak teraz bez przypisywania    # roku do pierwszego szablonu    page = render_template('about.html')    return render_template('szablon.html', title="O mnie", content=page)if __name__ == "__main__":    app.run(host=0.0.0.0,port=6666)
Teraz gdy odpalimy skrypt na stronie głównej powinien być aktualny rok oraz link do strony "O mnie", na której powinien się pokazać tekst "Jestem Thelleo". W poradniku użyłem dość dużo kodu a tak naprawdę mało wyjaśnień, jednak osobiście uważam, że opisane przykłady są lepsze od analizowania każdej linijki osobno.
Jeżeli ktoś miałby jakieś pytania, wątpliwości lub problemy to śmiało pytać ;) Ja nie gryzę, przynajmniej nie od razu.

Przydatne linki
  • 1

Dołączona grafika


Soanvig
Soanvig

    Początkujący

  • Użytkownik
  • PipPipPip
  • 114 postów
#2

Napisano 25 sierpień 2012 - 15:58

gdyż podobnie jak w Rubym nie ma w nim popularnych klamr

Jak najbardziej klamry są w Ruby ;D Można stosować albo bloki zakończone end, albo bloki ograniczone klamerkami :P

Sugerujesz, że te języki nie są popularne, bo nie mają klamr? :D

Jaki jest powód tego, że w Pythonie znajduje się taka śmieszna konstrukcja?
datetime.datetime.now()

  • 0

[font="Courier;"].oooooooo8....ooooooo......o......oooo...oooo.888.........o888...888o...888......8888o..88...888oooooo..888.....888..8..88.....88.888o88..........888.888o...o888.8oooo88....88...8888..o88oooo888....88ooo88.o88o..o888o.o88o....88..[/font]


Thelleo
Thelleo

    Początkujący

  • Użytkownik
  • PipPipPip
  • 99 postów
#3

Napisano 25 sierpień 2012 - 16:00

@soanvig
A nie wiedziałem, że w Rubym można kalmry stosować :0 Już poprawiam, mistrzu.
Nie chodzi mi to, że języki bez klamr są mniej popularne, ale raczej o to, że te z klamrami są popularne i programiście trudniej przejść na język bez klamr :)


Jaki jest powód tego, że w Pythonie znajduje się taka śmieszna konstrukcja?

datetime.datetime.now()

Klasa datetime znajduje się w paczce datetime, która zwiera też takie klasy jak time czy tzinfo. Rzeczywiście taka konstrukcja jest dziwna, ale przynajmniej czytelna gdy korzystamy z dużej liczby metod.
Teoretycznie można mieć samo datetime.now() tylko trzeba by było zamienić
import datetime
na
from datetime import datetime

  • 0

Dołączona grafika