This is an old revision of the document!
În cadrul acestul laborator vom explora framework-ul web Flask și vom dezvolta o aplicație web minimală.
Un framework oferă unui programator o structură predefinită cu ajutorul căruia acesta poate dezvolta rapid aplicații. De exemplu, un framework web implementează logica necesară stabilirii conexiunilor dintre server și clienți, și îi permite astfel programatorului să se concentreze pe logica aplicației și conținutul pe care îl oferă clienților.
Folosind Flask putem dezvolta o aplicație de tip server web folosind limbajul Python.
Pentru a instala Flask vom folosi managerul de pachete al limbajului Python, pip:
$ pip install flask
Pentru a verifica instalarea, deschidem interpretorul python, și importăm modulul flask:
$ python >>> import flask >>>
Vom crea un director numit hello-flask în directorul nostru HOME:
$ mkdir ~/hello-flask $ cd ~/hello-flask
În cadrul acestui director, creăm un fișier hello.py cu conținutul de mai jos:
from flask import Flask app = Flask(__name__) @app.route("/") @app.route("/index") def hello(): return "Hello World from Flask" if __name__ == "__main__": # Only for debugging while developing app.run(host='0.0.0.0', debug=True, port=5000)
Apoi pornim serverul web:
$ python hello.py * Serving Flask app "hello" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 850-713-158
Acum putem accesa adresele http://127.0.0.1:5000 și http://127.0.0.1:5000/index.
Să trecem pas cu pas prin cod:
from flask import Flask app = Flask(__name__)
Snippetul de mai sus importă framework-ul Flask și îl inițializează.
Partea cu adevărat interesantă se întâmplă în liniile următoare:
@app.route("/") @app.route("/index") def hello(): return "Hello World from Flask"
Serverul nostru este găzduit pe mașina noastră locală, și este accesibil la adresa 127.0.0.1 folosind portul 5000; deci pagina noastră este accesibilă la adresa http://127.0.0.1:5000.
Folosind sintaxa @app.route definim funcțiile care vor fi apelate în funcție de calea pe care a introdus-o utilizatorul în browser. Astfel:
Pentru ambele căi, atunci când utilizatorul va accesa pagina, serverul va întoarce rezultatul definit de funcție, în cazul de față “Hello World from Flask”.
Sintaxa @app.route poartă numele de decorator în Python.
Decoratorii nu intră în scopul laboratorului, dar vă încurajăm să citiți mai multe despre aceștia aici.
Observăm că putem adăuga mai multe căi pentru o funcție.
Numele asociat instanței framework-ului Flask este important pentru sintaxa route.
Dacă instanțiam cu alt nume, ex. myapp = Flask(name), atunci trebuie să folosim acest nume (@myapp.route) pentru definirea căilor.
În final, pornim serverul:
app.run(host='0.0.0.0', debug=True, port=5000)
În secțiunea anterioară, am văzut cum putem face serverul să servească conținut clienților. Deocamdată conținutul este unul banal: textul “Hello World from Flask”. În continuare vom vedea cum putem returna pagini întregi.
Folosind template-uri putem servi pagini HTML complete, cu CSS și JavaScript.
Creăm directorul templates în directorul hello-flask:
$ cd ~/hello-flask $ mkdir templates
Acum vom crea fișierul templates/index.html cu următorul conținut:
<html> <head> <title> {{ title }} </title> </head> <body> <h1>Hello, {{ user.username }}!</h1> </body> </html>
Fișierul de mai sus este un template Jinja2. Template-urile Jinja ne oferă un mod simplu prin care putem să generăm conținut folosind cod python.
În exemplul de mai sus, textul din interiorul {{ … }} va fi înlocuit cu variabile pe care le vom trimite din codul nostru python. Pentru aceasta, modificăm funcția hello() în modul următor:
@app.route("/") @app.route("/index") def hello(): user = {'username': 'Student'} return render_template('index.html', title='Home', user=user)
Funcția render_template() va prelucra template-ul Jinja2 definit mai sus, va înlocui variabilele din cadrul {{ … }} și va oferi clientului pagina HTML validă.
După ce am făcut modificările, accesăm pagina http://127.0.0.1:5000.