Šta je Flask?
Flask je Python web framework koji raspolaže nizom korisnih funkcionaslnosti i alata za razvoj web aplikacija u Python-u
Da bi pokrenuli Flask aplikaciju potrebno je prvo instalirati Python virtualno okruženje.
Python virtuelno okruženje
Preporučujemo da pre ovog članka pročitate članak: Postavljanje Python aplikacije
Preko SSH naloga pristupite fajlovima i pozicionirajte se u direktorijum domena na kome ćete postaviti aplikaciju. Ukoliko predpostavimo da je naziv domena mojdomen.in.rs, onda bi instalacija izgledala ovako:
cd mojdomen.in.rs python3 -m venv venv source venv/bin/activate pip install flask
Na ovaj način smo instalirali virtualno okruženje u direkrorijum venv, aktivirali ga i instalirali Flask framework.
Sada je potrebno u .htaccess fajlu definisati dve varijable potrebne za rad Python-a u virtualnom okruženju.
U terminalu kucajte komandu pwd
. Dobićete apsolutnu putanju, nešto kao:
„/www/webvol59/do/ndk6s2m8jrfuy3o/mojdomen.in.rs“
Sada to unesemo u .htaccess fajl:
SetEnv HOME . DirectoryIndex cgi-bin/index.py index.html Options +ExecCGI AddHandler cgi-script .py # Ovim postavljamo putanje do Python okruženja SetEnv PATH /www/webvol59/do/ndk6s2m8jrfuy3o/mojdomen.in.rs/venv/bin:$PATH SetEnv PYTHONPATH /www/webvol59/do/ndk6s2m8jrfuy3o/mojdomen.in.rs/venv/lib/python3.11/site-packages
Sada bi server trebalo da pronađe biblioteke koje instalirate kroz okruženje.
Na Loopia hostingu nije omogućen WSGI, tako da je potrebno napraviti skript „cgi_serve.py“ koji će pokrenuti Flask kroz CGI.
U istom direktorijumu gde je index.py postavite skript sa sledećim sadržajem:
#!/usr/bin/env python3 from wsgiref.handlers import CGIHandler from index import application CGIHandler().run(application)
Ovde se predpostavlja da Flask aplikacija u „index.py“ koristi:
application = Flask(__name__)
Nakon ovoga je potrebno prepraviti „.htaccess“ da ukazuje na „cgi_serve.py“ umesto „index.py“:
SetEnv HOME . RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ cgi-bin/cgi_serve.py/$1 [QSA,L] DirectoryIndex cgi-bin/cgi_serve.py index.html Options +ExecCGI AddHandler cgi-script .py SetEnv PATH /www/webvol59/do/ndk6s2m8jrfuy3o/mojdomen.in.rs/venv/bin:$PATH SetEnv PYTHONPATH /www/webvol59/do/ndk6s2m8jrfuy3o/mojdomen.in.rs/venv/lib/python3.11/site-packages
Problem koji se može javiti je da CGI server postavlja SCRIPT_NAME=/cgi-bin/index.py
, što Flask koristi za url_for() funkciju.
Zbog toga ćete umesto na primer „mojdomen.in.rs/about“ dobiti celu putanju:
mojdomen.in.rs/cgi-bin/index.py/about
Rešenje je da postavite sledeće u „index.py“:
import os os.environ.pop('SCRIPT_NAME', None)
Ovo će ukloniti promenljivu SCRIPT_NAME iz okruženja pre nego što Flask generiše URL. Sada bi {{ url_for('about') }}
trebalo da vrati https://mojdomen.in.rs/about umesto pogrešnog CGI URL-a.
Jednostavna test aplikacija bi sada u index.py mogla da izgleda ovako:
#!/usr/bin/env python3 from flask import Flask, url_for import os os.environ.pop('SCRIPT_NAME', None) application = Flask(__name__) @application.route('/') def hello_world(): return "Hello World from Flask on Loopia!" if __name__ == '__main__': app.run(debug=True)
Fajl index.py bi trebalo da postavite kao izvršni:
cd public_html/cgi-bin/ chmod +x index.py
U browseru bi sada na Vašem domenu trebalo da se pojavi: „Hello World from Flask on Loopia!“.