Hope is a Dream. Dream is a Hope.

非公開ブログは再開しました。

Flask-bootstrapの導入 | レイアウト変更

記事投稿機能の実装と、Bootstrapの利用について

デザインを変更する

仕様

  • すべてのページを2カラムレイアウトとする
  • ユーザ定義のCSSは極力避け(clss定義等)Bootstrapライブラリのクラスを使用する

レイアウト

  • Bootstrapライブラリクラスを使用

カラー

  • プロトタイプでは変更しない

CSSライブラリ

  • Bootstrap
    • Flask-bootstrapパッケージを利用

Flask-bootstrapの参考記事

Flask-Bootstrap – インストール -

  • Pipを使ってインストール

Pip install flask-bootstrap

メインモジュールでの呼び出し

From flask_bootstrap import Bootstrap App = Flask(name) Bootstrap(app)

 

Flask-Bootstrap – テンプレートの使用方法 -

  • Flask-bootstrapはデフォルトのテンプレートが準備されており、それをHTML内でjinja2を利用し呼び出す
  • Flask-bootstrap/base.htmlを親テンプレートとして呼び出す
  • Available blocks
    Block name(jinja2ブロック名) Outer Block(HTML要素) Purpose
    doc Outermost block.
    html doc Contains the complete content of the <html> tag.
    html_attribs doc Attributes for the HTML tag.
    head doc Contains the complete content of the <head> tag.
    body doc Contains the complete content of the <body> tag.
    body_attribs body Attributes for the Body Tag.
    title head Contains the complete content of the <title> tag.
    styles head Contains all CSS style <link> tags inside head.
    metas head Contains all <meta> tags inside head.
    navbar body An empty block directly above content.
    content body Convenience block inside the body. Put stuff here.
    scripts body Contains all <script> tags at the end of the body.

例えば、2カラムレイアウトにする場合

{% block content %}
<div class="container">
<div class="row">
<div class="col-md-4">
{% block left %}{%endblock left %}
</div>
<div class="col-md-8">
{% block right %}{%endblock right %}
</div>
</div>
</div>
{% endblock content %}

 動くコード

flaskr.v1.3

マシン系

可愛い系

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

テキストデータをPython標準ライブラリでパースする方法

テキストデータをPython標準ライブラリでパースする方法

データベースを使ったWebアプリをFlaskを使って作ろうとしているのだが、

開発途中では、テストデータを扱うが、準備が面倒だし、データデータベースへの入力も一括でしたい。。。

そこで、テストデータを決められたフォーマットで作成し、Python標準ライブラリのparseを使ってパースするコードを書きました。

パースの方法

まずデータを準備

testdata.txt

@title: タイトルが書かれている
@result: 結果が書かれている
@conclusion: 結論が書かれている
@day: 2015-02-17
----------------------
@title: タイトルが書かれている
@result: 結果が書かれている
@conclusion: 結論が書かれている
@day: 2015-02-17
----------------------
(続く)

 

パース用の構文を準備
[python]
# 文章を区切るセパレータ
uSPLITTER = u'-------------------'
# パースする要素
WORDS = [u'title', u'result', u'conclusion', u'day']
# ファイルの読み込み (Unicode)
f = codecs.open(self.inFile, 'r', 'utf-8')
# ファイルからテキストとして読み込み
contents = f.read().split(uSPLITTER)
# ファイルを閉じる
f.close()
# パース用構文をコンパイル
cmp = compile('{}@title{}@result{}@conclusion{}@day{}')
# テストテキストの読み込み
datalist = []
for t in contents:
# パースの実行
d = cmp.parse(t)
# 取得した各項目データの格納
data = {}
for w in WORDS:
data[w] = d[w]
# 取得データの格納
datalist.append(data)
# (おまけ)
# 書き込みモードで開く
f = open('output.txt', 'w')
# ここでutf-8エンコード
f.writelines(data.encode('utf-8'))

 

[/python]

注意

encode('utf-8')はstring型しか使えない。辞書型であれば、for k,v in dict.items():等を使って、各要素へアクセスするひつようがある。

まとめ

ここ2週間ほどPythonを触っているが、ずっと悩まされていた文字コードに関する取り扱いがやっとわかった気がします。

BeautifulSoupや自然言語処理ライブラリを使いたくて、適当にサンプルコードを走らせようとすると、いつも'ascii'なんちゃら'Unencode error'なんちゃららで、とても苦労していたので、基本を学ぶことができて本当に良かった。

非常に参考になった記事

Pythonicな文字列パーサ parse

parse 1.6.6 : Python Package Index

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

Herokuの環境設定方法(Windows)

Herokuの環境設定方法

WebフレームワークFlaskを使って、Webアプリっぽいものをつくれたので、勉強がてらあこがれの「デプロイ」をしてみようとおもう。

技術ブログ等を呼んでいると良く聴くHerokuを使ってデプロイというのをしてみよう。(デプロイについては良く意味が分かっていません。)

Herokuへ登録

heroku

herokulogin

 

Heroku Toolbeltをインストール

ここらへんは何も考えずとりあえず進めましょう。「なんだかんだ考えるよりまずはやってみる。」調べてばっかりでは結局知っているだけでなにもできていない。

SnapCrab_Setup - Heroku Toolbelt_2015-2-19_15-52-11_No-00

コマンドラインからHerokuを立ち上げる

SnapCrab_コマンド プロンプト_2015-2-19_15-52-52_No-00

無事起動できました。

Prepare the app

たぶんサンプルコードのことだと思う。

git clone https://github.com/heroku/python-getting-started.git
$ cd python-getting-started

SnapCrab_Getting Started with Python on Heroku  Heroku Dev Center - Google Chrome_2015-2-19_15-54-31_No-00

 

 

なにも考えず打ち込む。なにも知らないサンプルを動かすときに変なことを考えてはいけない。無知ほどエラーを出すことはない。

SnapCrab_選択 コマンド プロンプト_2015-2-19_15-57-7_No-00

これはgitを使って、サンプルアプリケーションをダウンロードしたみたい。それだけ。

中を確認すると。

python-getting-started
│ .env
│ .gitignore
│ manage.py
│ Procfile
│ README.md
│ requirements.txt
│ runtime.txt
│
├─gettingstarted
│ │ settings.py
│ │ urls.py
│ │ wsgi.py
│ │ __init__.py
│ │
│ └─static
│ humans.txt
│
└─hello
│ admin.py
│ models.py
│ tests.py
│ views.py
│ __init__.py
│
└─templates
db.html

こんな感じ。そのうちのrequirements.txtが大事らしい。

requirements.txt

Django==1.6.5
dj-database-url==0.3.0
dj-static==0.0.6
django-toolbelt==0.0.1
gunicorn==19.0.0
psycopg2==2.5.3
static3==0.5.1
wsgiref==0.1.2

これはHerokuにアプリをアップロードした際に、Herokuのサーバーに準備していて欲しい環境を書いているのだと思う。なんて便利なんだー。

Deploy the app あこがれのデプロイ

SnapCrab_Getting Started with Python on Heroku  Heroku Dev Center - Google Chrome_2015-2-19_15-59-13_No-00

 

さて、アプリをダウンロードして、Herokuに準備していて欲しい環境をrequrements.txtに書いて準備OK。

良くわからないがheroku createからはじまる4つのおまじないをかけてみる。意味なんてわからなくてもいいのだ。使い始めれば嫌でもわかる。使い始めるために、これが「どんなものか」、「使えるかどうか」を確かめるのだ

$ heroku create

$ git push heroku master

$ heroku ps:scale web=1

$ heroku open

最後にheroku open!!としたので、勝手にブラウザが立ちあがった。

SnapCrab_httpsevening-beach-1177herokuappcom - Google Chrome_2015-2-19_16-7-33_No-00

ダサい。

ただ、アドレスを見るとhttps://evening-beach-1177.herokuapp.com/となっている。もしかして、外の環境で公開されているのか!

便利だ。便利すぎる。サンプルはDjangoアプリケーションらしいが、Djangoを自前のサーバーを立てて環境構築するなんて手間を考えたら。。便利すぎる。

 

以上。

 

と思ったら終わってなかった。

View logs

ログがみれる。僕のような初心者にはそんなもの見ている暇はない。

heroku logs --tail

heroku_log

Define a Procfile ぷろっくファイル

先ほどのフォルダの中に確かにProcfileというものがある。

Procfile

web: gunicorn gettingstarted.wsgi --log-file -

これはサーバーの種類を設定しているような気がする。

 

Scale the app あぷりのすけーる

さてもうわからない。おそらくスケールアップ・ダウンの話だと思われる。

HerokuではDynoと呼ばれる単位でマシンを呼んでいる感じ。

マシン?CPU?わからんがとりあえずHerokuを何人やとうかみたいな感じだと思う。これを悩めるようならばこんな記事は呼んでいない。

SnapCrab_Getting Started with Python on Heroku  Heroku Dev Center - Google Chrome_2015-2-19_16-25-33_No-00

Declarre app dependencies 準備しておきたいパッケージはちゃんと書き出しておいてよ

SnapCrab_Getting Started with Python on Heroku  Heroku Dev Center - Google Chrome_2015-2-19_16-26-57_No-00

heroku側で準備しておいてもらいたいパッケージについてrequirements.txtに書いておくのだけど、その依存パッケージってどうやって洗い出すの?って思われたかたもいるでしょう。そのやりかたについてのってます。良くわかりません。virtualenvを使っているなら?それかvirtualenvを使いなさいか英語が分からないので、無視します。

実はまだ半分です。もう理解するための技術がないのでここまでにします。

次は実際に自作WebアプリをHerokuでデプロイしながら勉強します。

 

FlaskアプリケーションをHerokuへデプロイする方法

Flask を触ってみる + Heroku で動かす

最近使い始めたPycharmでやってみる。PyCharmでFlaskのプロジェクトを作ります。

 

SnapCrab_NoName_2015-2-19_16-31-39_No-00

SnapCrab_heroku_first_deproy - [CUsers0160929PycharmProjectsheroku_first_deproy] - heroku_first_deproypy - Py_2015-2-19_16-32-14_No-00

 

 

参考をみるとvirtualenvを使って環境を作っているのですが、僕はAnacondaを使っているので、virtualenvをpip install 仕様とすると怒られました。のでパッケージ全部(相当たくさん)を色々無視して試してみます。つまり、virtualevnは使いません。

procfileの準備

web: gunicorn hello:app --log-file -

requirements.txtにゴミのようなパッケージの山を書き出し

pip reeze > requirements.txt

あとはおまじない

git に commit し, push する.
git add .
git commit -m 'Hello World!'
git push origin master
heroku に login し, push する.
heroku login
heroku create
git push heroku master
 Web のインスタンス追加
heroku scale web=1
開く
heroku open

SnapCrab_Application Error - Google Chrome_2015-2-19_16-45-3_No-00

うん。失敗です。

Application Error

An error occurred in the application and your page could not be served. Please try again in a few moments. If you are the application owner, check your logs for details. どうやら、まだできていなのか?依存パッケージの準備に時間がかかっているのかも。 と、最後に「もし管理者なら、ログをみろ!」とい書いてる。来ました。先ほどチュートリアルであったログ。
heroku logs --tail

これですな

C:\heroku_first_deproy>heroku logs --tail
Your version of git is 1.8.1.. Which has serious security vulnerabilities.
More information here: 
https://blog.heroku.com/archives/2014/12/23/update_your_git_clients_on_windows_and_os_x

2015-02-19T07:41:14.698655+00:00 heroku[api]: 
Enable Logplex by peace@gmail.com

2015-02-19T07:41:14.698690+00:00 heroku[api]: 
Release v2 created by peace098beat.t@gmail.com

2015-02-19T07:42:15.245796+00:00 heroku[api]: 
Deploy 4fb2fee by peace@gmail.com

2015-02-19T07:42:15.245796+00:00 heroku[api]: 
Release v3 created by peace@gmail.com

2015-02-19T07:44:51.059934+00:00 heroku[router]: 
at=error code=H14 desc="No web processes running" method=GET path="/" host=safe-badlands-8226.herokuapp.com request_id
=77132953-df7f-4985-9161-ca3cc02d2053 fwd="61.119.15.133" dyno= connect= service= status=503 bytes=

2015-02-19T07:44:52.062903+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/favicon.ico" host=safe-badlands-8226.herokuapp.com
request_id=38c1dee4-48b8-4ca4-9fc0-f5b7f4648154 fwd="61.119.15.133" dyno= connect= service= status=503 bytes=

2015-02-19T07:47:37.168802+00:00 heroku[router]: at=error code=H14 desc="No web processes running" me

全くわかりません。自分の実力が分かりますね。

もう少し挑戦します。

 

 参考記事

HerokuでWebアプリ開発を始めるなら知っておきたいこと(1) 無料のスペック

サイトデザインがかっこよすぎる。

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)