Пишем простые проекты. Проект #1. Часть #1

Нудное введение:

Замечено, что новичкам трудно перейти от теории к практике - заставить себя писать, а не только читать. Чтобы помочь мы постоянно публикуем различный материал и указываем как применить эти знания на практике.

В этот раз решили написать 2 небольших проекта:

  • Первый - страница со статистикой отжимания. Будет показано, как с помощью flask + google chart's сделать проект для сохранения и визуализации количества отжиманий.
  • Второй - vk2rss - сервис для преобразования стен групп ВКонтакте в RSS. Будет рассмотрен парсинг, работа с VK API, создание простого GUI.

Оба проекта будут описаны в виде текста. А следующие попробую записать в виде скринкаста (Это ведь интересней?)

Для справки: я придерживаюсь правила 80% практика / 20% теория. Поэтому не ожидайте глубокой теории. По тексту будут расставлены отсылки к необходимой теории. Смело задавайте вопросы в комментариях.

Повторяйте за мной!

Первый проект:

flask - веб-фреймворк. Обладает высокой гибкостью, расширяется (добавляются возможности) за счет сторонних модулей.

Установить flask можно как и другие пакеты - через pip/easy_install:

Подсказка: проекты стоит разрабатывать в виртуальном окружении - virtualenv.

Подсказка: используйте pip для установки пакетов

Ссылки для изучения pip и virtualenv:

http://pynsk.ru/posts/2015/Dec/25/poleznye-instrumenty-virtualenv-pip/

http://proft.me/2010/04/3/python-i-okruzhenie-virtualenv/

Выполняем для установки:

pip install flask

Сразу к коду. Традиционный hello world, на flask:

# -*- encoding: utf-8 -*-
from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

Данный код создает и запускает web-сервер. Пользователь зашедший на главную страницу (/) увидит Hello World!. Запускаем скрипт и получаем:

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Открываем браузер и вводим http://127.0.0.1:5000/. Если сделано все правильно, то увидите Hello World!

Поэксперементируйте с отображаемым текстом. Выводите разный текст, воспользуйтесь HTML-тегами

В описании проекта сказано - "страница". Добавим ее. Создаем папку templates, а в папке файл 'index.html'. В результате у нас получилась такая структура файлов и папок:

.
├── app.py
├── requirements.txt
└── templates
    └── index.html

index.html, пришло твое время! Заменим Hello world в Python коде на html страницу с таким же содержанием. Записываем в файл:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Hiiiiiiii</h1>
</body>
</html>

Заготовка страницы есть. Теперь надо эту страницу показать пользователю. Возвращаемся в Python-код и переписываем функцию index:

@app.route("/")
def index():
    return render_template("index.html")

Не забудьте добавить импорт функции render_template (ведь вы уже догадались что она делает?). Добавляем в начале app.py файла:

from flask import render_template

Перезапустите flask-сервер, снова откройте главную страницу. Если сделали все правильно, то увидете Hiiiiiiii.

Промежуточный итог: создали flask-проект с шаблоном. При заходе на главную страницу сервера нас приветствуют с помощью Hiiiiiiii


Продолжение следует.

Комментарии

Теги

notify, os, isinstance, encode, database, all, многопоточность, mail, срез, сборник, pytest, новый год, конкурентность, аргумент, gevent, pycon, GIL, python проект, интерпретатор, игры, замыкание, pynotify, функциональное программирование, pypi, типы данных, csv, график, testing, поиск ошибок, автоматизация, ardruio, swagger, память, vk.com, файл, pip, web, тест, статический анализ, dsl, syntax, отчет, notification, список, ide, графика, rest, pycallgraph, githook, generic, hook. webhook, история, asyncio, logging, инструмент, swig, click, Category: Полезные модули, crawler, while, aiohttp, оптимизация, clonedigger, Бизли, трансдьюсер, matplotlib, bottle, концепция, типизация, language, урок, fuzzy-testing, nose, image, путь, удаленный вызов процедур, тестирование, консоль, vk, c, list, pylint, operator, print, практика, сравнение, functools, польза, измерение, сопроцедуры, selenium, генерация данных, БД, мастер класс, plotly, bokeh, генерация, производительность, winapi, flask, typing, strip, lxml, os.path, grab, scandir, Qt, pycharm, проект, книга, dictwriter, coverage, html, фп, pypy, signal, стандартная библиотека, now, weakref, google, практика программирования, Tags:, corotine, sqlalchemy, nameko, синтаксис, import, паттер, virtualenv, api, зеленый поток, timeit, контекст, бд, funcy, encoding, кэш, json, статистика, байт-код, unittest, кодировка, datetime, opencv, ооп, itertools, package, fp, mixin, python, assert, pyqt, утка, garbage collector, frozenset, курс, numpy, django-debug-toolbar, терминал, xpath, closure, type, requirements, дубликат, статическая типизация, PIL, работа, debug, быстродействие, водяной знак, plot, рейтинг, ip, python3, yield from, fronteram scrapy, видео, test, fuzzy, curses, gitter, unicode, twitter, decode, cache, pep, вконтакте, операционная система, ОС, awesome, any, тесты, задача, установка, последовательность, ошибки, генератор, hardcore, toolbar, Wx, магия, doctest, qt, железо, множество, marshal, сигнал, greenlet, слайс, db, future, время, admin, pyside, настройка, regex, module, примесь, slots, sys, email, action, регулярные выражения, одноплатный компьютер, дубликат кода, scrapinghub, micropython, mock, фича, raspberry pi, foreign key, ссылка, pickle, django, нг, модуль, справочник, celery, импорт, лямбда, with, rpc, наука, jinja2, log, обработка текста, super, set, svg, матрица, pygame, fixture, docstring, декларативный язык, fabric, пакет, опыт, магическая переменная, regexp, Гвидо, slice, __all__, gui, база данных, юникод, yattag, cython, матан, документация, анализатор, менеджер контекста, yield, учебник, real-time, слабая ссылка, IPython, браузер, xml, GUI, gc, channel, zip, машинное обучение, библиотека, __future__, ошибка, данные, requirements.txt, оповещение, парсинг, изображение, CLI, tox, фильтр, feedly, R, cffi, http, таблицы, gunicorn, python2, стандарт, if, rss, requests, tkinter, time, mechanize, gensim, интерфейс, Category: Разное, визуализация, postgresql, web parsing, язык, исключение, архитектура, lstrip, parsing, Category: Встречи, путь до файла, copy paste, multiprocessing, объект, rstrip, статический анализатор, lambda