作ったもの
Python 3を使ってWikiのようにページの内容をユーザーが書き換えることができるシステムを作りました。
ページの内容はreStructuredTextを使って記述します。
リポジトリは https://github.com/SiLeader/e97 です。
使ったもの
Python 3
Python 3.5からType Hintsがついて個人的にかなり使いやすくなったと感じているPython 3です。
Pythonは動的型の言語ですが、型を示すことである程度のバグを減らしたり、うっかりミスをなくしたりすることができます。
Pythonを使った理由としては以下のとおりです。
- Pythonは標準のライブラリが多い (比較していないからどれくらいとかはわからない)
- Python 2を今更使うのはなんか微妙
- Rubyは記述が自由すぎて自分に合わない (Disるつもりはないです)
- Node.jsはJavaScriptの弱い型が苦手 (これもDisるつもりはないです)
- WebアプリをC++で書くとなるとHTTPサーバー作るところから始めないといけないし
ということでPythonになりました。
MongoDB
個人的にSQLは難しいと感じます。SQL自体は書けなくはないですが、配列がないのが辛い。
結構配列ってよく使う構造だと思うのですが、自分の知る限りのSQL系データベースは配列に対応していない。(知らないだけかもしれません)
ということでJSONぽいBSONでデータを保存するMongoDBを使いました。
配列が使えて、カラムに当たる部分が突然一つ増えても普通に対応してくれて、文字数を指定しなくて良いというのは個人的にかなり気に入ってます。
PyMongo
PythonのMongoDBのドライバです。
今のところ何も問題にぶち当たっていないので使いやすい部類に入ると思います。
Pythonのdatetime
を入れるとISODataとして自動的に保存してくれます。
最近気づいたのですがMongoClient
にtz_aware=True
を渡すとタイムゾーンを付けて返してくれるみたいですね。これを知るまでは毎回タイムゾーンを付けて回るという無駄な処理を施していました。
Flask
Pythonのマイクロフレームワークです。
個人的には、ここまで面倒を見られないくらいがちょうどいいですね。
RailsとかDjangoはデータベースへの処理を抽象化してくれる上、MVCとかMVTをしっかり分離させてくれるのですが、色々覚えることとか設定が多いと感じました。(使いこなせるようになれば滅茶苦茶 楽なんでしょうけど)
FlaskはテンプレートエンジンにJinja2を使っています。
Jinja2はAnsibleにも使われているテンプレートエンジンで、Djangoぽさがある文法で書かれます。
Flask-WTF (CSRFProtect)
Flask-WTFのCSRFProtectの部分だけ使わせていただいてます。
このシステムは社内Wikiとかを想定しているので、ログインしないと何もできません。
なので本来はCSRF対策はいらない気がしなくもないですが、対策ならやって後悔することもないだろうと思い付けてみました。
さいごに
かなり作りがやわいところなどがあると思いますが、興味がある方は使ってみていただきたいです。
変なところや良くないところ、あったらいい機能などありましたら、お伝えいただけると幸いです。