Š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!“.
