Уеб разработка с Flask в Python

Уеб разработка с Flask в Python

Урок 7: Уеб разработка с Flask в Python

В този урок ще се запознаем със Flask – микро уеб рамка за Python, която позволява бързо и лесно създаване на уеб приложения. Ще научим как да създадем базово уеб приложение с Flask, как да работим с шаблони и как да изграждаме API.

Въведение в Flask

Flask е лека и гъвкава уеб рамка за Python, която е идеална за създаване на малки и средни уеб приложения. Тя предлага минималистичен подход към разработката на уеб приложения, като по този начин е лесна за изучаване и употреба.

Инсталиране на Flask

За да започнем, трябва да инсталираме Flask. Можем да го направим чрез pip:

pip install Flask

Създаване на базово уеб приложение

Основен файл на приложението

Създайте файл с име app.py и добавете следния код:

from flask import Flask

# Създаване на инстанция на Flask
app = Flask(__name__)

# Дефиниране на маршрути и функции за тях
@app.route('/')
def index():
    return 'Welcome to my Flask App!'

@app.route('/about')
def about():
    return 'This is an about page.'

# Стартиране на приложението
if __name__ == '__main__':
    app.run(debug=True)

Обяснение

  • Flask е импортиран от библиотеката flask.
  • app = Flask(__name__) създава инстанция на Flask приложение.
  • @app.route('/') и @app.route('/about') са декоратори, които асоциират URL маршрутите с функции.
  • Всяка функция, маркирана с декоратора @app.route(), се изпълнява при достъпване на съответния URL път.
  • app.run(debug=True) стартира уеб приложението в режим на отладка.

Шаблони и рендериране

Flask позволява използването на HTML шаблони за по-добро организиране на уеб приложението.

Създаване на папка за шаблони

Създайте нова папка templates в директорията на проекта. В нея ще съхранявате HTML шаблоните на вашето приложение.

Използване на шаблони

Променете файлът app.py, за да включите използването на шаблони:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html', title='Home', content='Welcome to my Flask App!')

@app.route('/about')
def about():
    return render_template('about.html', title='About')

if __name__ == '__main__':
    app.run(debug=True)

Пример на шаблон index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ content }}</h1>
</body>
</html>

Пример на шаблон about.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{ title }}</title>
</head>
<body>
    <h1>About Page</h1>
    <p>This is an about page for my Flask App.</p>
</body>
</html>

Изграждане на API с Flask

Flask позволява лесно създаване на API чрез връзките между маршрути и функции.

Пример за API

from flask import Flask, jsonify

app = Flask(__name__)

# Пример за данни
books = [
    {'title': 'Python Programming', 'author': 'Guido van Rossum'},
    {'title': 'Flask Essentials', 'author': 'O'Reilly Media'}
]

@app.route('/api/books', methods=['GET'])
def get_books():
    return jsonify(books)

if __name__ == '__main__':
    app.run(debug=True)

Обяснение

  • jsonify() конвертира Python обекти в JSON формат.
  • Методът get_books() връща списък от книги в JSON формат при достъпване на URL път /api/books.

Решения за стартиране на Flask приложение, което продължава да работи след затваряне на терминала:

Когато стартирате Flask приложение в терминала и след това затворите терминала или излезете от сесията, приложението спира да работи, защото то е свързано с текущата сесия на терминала. Когато тази сесия приключи, всички свързани с нея процеси, включително Flask приложението, също спират.

1. Използване на nohup:

Можете да използвате командата nohup, за да стартирате Flask приложението и да го отделите от терминалната сесия. Това ще позволи на приложението да продължи да работи дори след като затворите терминала.

nohup python3 app.py &

  • nohup (no hang up): Приложението ще продължи да работи след затваряне на терминала.
  • &: Това ще стартира приложението на заден план, така че да можете да продължите да използвате терминала за други задачи.

2. Използване на screen:

Можете да използвате screen, за да стартирате Flask приложението в нова сесия, която продължава да работи след затваряне на терминала.

  1. Инсталирайте screen, ако още не е инсталиран:
sudo apt-get install screen

2. Стартирайте нова screen сесия:

screen

3. Стартирайте Flask приложението:

python3 app.py

4. За да се отделите от сесията, без да я прекъсвате, натиснете Ctrl + A, последвано от D.

5. Можете да се върнете в сесията по-късно с командата:

screen -r

Настройка на Flask с Gunicorn

Flask по подразбиране използва вградения си уеб сървър, който не е предназначен за използване в производствени среди поддържа само една връзка. За да може вашето Flask приложение да обслужва множество връзки и да бъде по-устойчиво в производствени условия, трябва да го използвате заедно с по-стабилен уеб сървър и/или WSGI сървър като Gunicorn или uWSGI.

Стъпки за настройка на Flask с Gunicorn

Gunicorn е WSGI сървър, който е подходящ за производствени среди и може да обработва множество връзки едновременно.

1. Инсталиране на Gunicorn

Първо, инсталирайте Gunicorn с помощта на pip:

pip3 install gunicorn

2. Стартиране на Flask приложението с Gunicorn

След като инсталирате Gunicorn, можете да стартирате вашето Flask приложение с него:

gunicorn -w 4 -b 0.0.0.0:8000 app:app

-w 4: Задава броя на работните процеси (workers). В този случай използваме 4 работни процеси. Броят на работниците зависи от броя на ядрата на вашия процесор. Общо правило е да използвате 2-4 работници на ядро.

-b 0.0.0.0:8000: Свързва приложението на всички IP адреси на порт 8000

.app:app: Това казва на Gunicorn да зареди обекта app от модула app.py.

Заключение

В този урок научихме как да създадем базово уеб приложение с Flask, как да работим с HTML шаблони и как да изградим прост API. Flask предоставя множество възможности за разширяване на функционалността и създаване на различни типове уеб приложения. Практикувайте редовно и експериментирайте с различни маршрути и шаблони, за да затвърдите наученото.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: