Створюємо простий блог на Bottle, частина 1

07 серпня 2014 18:38 andreykko 539 1

Це вступна, коротка стаття із серії, розрахована на тих, хто вже знає основи мови програмування пайтон, але малознайомі з веб-розробкою. Для початку приведемо опис фреймворку з офіційного сайту.

Боттл це швидкий, простий і легкий WSGI мікро веб-фреймворк для пайтону. Він поширюється у вигляді одного файлу і не має ніяких залежностей, окрім стандартної пайтон бібліотеки. 

  • Маршутизація: Запити до функцій відображень, з підтримкою статичних та динамічних адрес.
  • Шаблони: Швидкий та "пайтонічний", вбудований шаблонний движок, та підтримка makojinja2 та cheetah шаблонизаторів.
  • Утиліти: Зручний доступ до даних форм, завантажених файлів, кукі, заголовків та інших HTTP-орієнтованих метаданих.
  • Сервер: Вбудований розробницький HTTP-сервер та підтримка pastefapws3bjoern, cherrypy або будь-якого WSGI HTTP сервера.

Інсталяція

Оскільки у боттл не має залежностей, його можна просто завантажити в робочу теку:

$ wget http://bottlepy.org/bottle.py

Або за допомогою пакетних менеджерів пайтону, або ОС:

$ sudo pip install bottle              # рекомендовано
$ sudo easy_install bottle             # альтернатива pip
$ sudo apt-get install python-bottle   # працює для ОС debian, ubuntu, ...

Привіт світ!

Завжди прийнято починати саме з цього, тож ось наш код:

# -*- coding: utf-8 -*-
from bottle import Bottle, run
app = Bottle()
@app.route('/')
def index():
    return 'Привіт світ!'
run(app, host='localhost', port=8080)

Запускаємо виконавши наш файл пайтон інтерпретатором:

$ python hello.py

Тепер, якщо ввести в браузері localhost:8080 ми побачимо наше повідомлення:

Розберемо код:

  • Імпортуємо сам боттл, та функцію для запуску нашого дев. сервера
  • Присвоєнням створюємо наш застосунок app
  • @app.route('/') - декоратор-маршут, який прикріплює урл до нашої функції-відображення, в нашому випадку це корінь сайту.
  • Повертаємо текст, також ми можемо повертати шаблони, статичні файли, та інше.
  • Запускаємо наш застосунок, з вказаним хостом та портом.

Динамічні урл

Функція-відображення може містити динамічні маршути. Динамічні маршути позначаються назвою змінної, взятої в кутові дужки(наприклад <name>), це відповідає одному, або більше символам, до наступного слешу(/). Наприклад, маршут '/hello/<name>' приймає запити як з  '/hello/python' так із  '/hello/bottle', але не з 'hello', 'hello/', 'hello/python/bottle'

Видозмінимо наш попередній код:

# -*- coding: utf-8 -*-
from bottle import Bottle, run
app = Bottle()
@app.route('/hello/<name>')
def hello(name):
    return 'Привіт, {0}!'.format(name)
run(app, host='localhost', port=8080)

Так само запускаємо:

Що змінилося? Ми змінили маршут в декораторі. А також передаємо змінну з даними динамічного урл в нашу функцію-відображення, та повертаємо її в тексті, нічого складного :)

Також до динамічних маршутів ми можемо застосовувати фільтри:

  • :int тільки цілі числа.
  • :float тільки десяткові числа.
  • :path шлях, відповідає всім символам, в тому числі і слешу. Може бути використаним для збігу з більше ніж одною частиною шляху.
  • :re дозволяє вам визначати регулярні вирази в полі конфігурації.

Кілька прикладів:

# -*- coding: utf-8 -*-
from bottle import Bottle, run
app = Bottle()
@app.route('/hello/<name:re:[a-z]+>')
def hello(name):
    return 'Привіт, {0}!'.format(name)
run(app, host='localhost', port=8080)

І якщо в нашому урл на місці name будуть цифри, то нам висвітить помилку 404, дана урл не знайдена:

В прикладі нижче нам висвітить помилку 404, якщо в урл буде хоча б один символ не цифра.

# -*- coding: utf-8 -*-
from bottle import Bottle, run
app = Bottle()
@app.route('/hello/<digits:int>')
def index(digits):
    return '{0}'.format(digits)
run(app, host='localhost', port=8080)

На цьому я завершую першу, вступну статтю. В наступній я детальніше розповім про шаблонізатор. Дякую за увагу.

539 6

Схожі матеріали:

Коментарі:

Vova Pytsyuk

03 Гру 2015 20:34

Зробіть 3 частину.

Авторизуйтесь, щоб залишити коментар.