This is an old revision of the document!


Laborator 5 - Python Flask

Obiective

În cadrul acestul laborator vom explora framework-ul web Flask și vom dezvolta o aplicație web minimală.

Introducere

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.

Instalare

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
>>>

Hello World

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:

hello.py
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)

Templates

Î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:

index.html
<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.

ii/lab/laborator5.1610146903.txt.gz · Last modified: 2021/01/09 01:01 by eduard.staniloiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0