Kako postaviti Flask aplikaciju

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

Da li Vam je članak pomogao?

Povezani članci