LoginSignup
10
15

More than 5 years have passed since last update.

mezzanine -python版CMS- 自社で運用してみたのでデプロイ前までをまとめてみた

Posted at

謎に包まれた pythonのWordPress mezzanine を運用してみて、思ったことを加えながらまとめてみました。

前回、まだまだプログラミング学習中に右も左もわからないまま、Djangoの記事を書いてみたのですが、Pythonの知識も少なからずついてきたので、ひとまず、Djangoはおいおい書いていくとして、まだ日本語での文献が少ないMezzanineについてまとめていきます!

前回の記事
DjangoのMTVという考え方

Mezzanine はざっくりいうとPythonのCMS。WordPressみたいなものです。

あっという間にカスタマイズ可能なブログページやWebサイトが構築できます。

とりあえず、インストールからデプロイ前までまとめてみます。

どこから始めたらいいかわからないというあなた。とりあえず、Virtualenv をインストールして、環境構築をしましょう!

$ cd Desktop
  mkdir mezzanine
  cd mezzanine
  virtualenv myvenv

とりあえずこれで環境が構築できます。

virtualenv と書いて、 環境の名前を付け足します。

なぜか、myvenv が使われますが(my virtual environment の略)
名前は自分がわかればなんでも良いです。

環境はまっさらな、なにもインストールされてない環境なので(Pythonももちろん入っていません。)

mezzanineをインストールします。

その前に、環境に入りましょう。

$ source myvenv/bin/activate

これで仮想環境に入ることができます。

virtualenv myvenv でmyvenvというフォルダが作られ、そのフォルダの中のbinというフォルダにactivateというファイルがあるんですね。それにより環境に入ることができるというわけです。

環境に入ってから、pip install しましょう。

$ pip install mezzanine

結果

$ Installing collected packages: pytz, tzlocal, chardet, 
  future, 
  idna, certifi, urllib3, requests, pillow, grappelli-safe, 
  oauthlib, requests-oauthlib, filebrowser-safe, django, 
  django- 
  contrib-comments, soupsieve, beautifulsoup4, six, 
  webencodings, bleach, mezzanine

mezzanineをpip install しただけで、これだけのライブラリが一瞬でインストールされました。

あとはそのまま、

$ mezzanine-project sample(任意のプロジェクト名)

これだけで

$ deploy            manage.py       sample
  fabfile.py        requirements.txt

こいつら全て作ってくれます。

djangoに精通していれば馴染み深いと思いますが、ここではそれぞれの説明は割愛します。

deployとfabfileはデプロイするときに全部自動で、サーバーに上げてくれるという代物ですが、mezzanineのdjangoが1.1なのと、その他ライブラリもバージョンアップされていたりでエラーが頻繁におきます。

なので、基本的には、マニュアルでデプロイするのをお勧めします。(そのほうが、サーバー周りもわかってきます :) )

そして、ここからは同じで、startapp でアプリケーションの作成をして、データベースの作成をします。(djangoと違い、自動的にデータベースを作ってくれません。。。)

$ python manage.py startapp theme

themeの部分はなんでも良いのですが、テーマという意味で、mezzanineではよく使われます。
そしてデータベース

$ python manage.py createdb

db(database)をcreateですね。シンプルです。
これだけでmigrateもやってくれるので、あとは

$ python manage.py runserver

でローカル環境に入ることができます。
なんと、すでにブログっぽいテンプレートとワードプレスライクな管理画面が作成されています。

Screen Shot 2019-02-08 at 18.57.22.png

Screen Shot 2019-02-08 at 18.57.41.png

素晴らしいですね。

ここからが難しい!

さて、mezzanine について検索するとここまではわかりやすく教えてくれるのですが、ここからが情報が少ないんですよね。。。

実際、複雑になっていきます。

まずはdjangoであまり使う人がおそらく少ないであろうコードを打ちます。

$ python manage.py collecttemplates

  Copied 47 templates

こんなメッセージが出てきました。

$ deploy            manage.py       templates
  dev.db            requirements.txt    theme
  fabfile.py        sample

これだけでtemplates フォルダが追加されます。

$ base.html     generic          
  search_results.html
  blog          includes        twitter
  email         index.html
  errors            pages

mezzanineに使用されている全てのテンプレートがここで入手できます。

実をいうと、startprojectの時点で myvenv(仮想環境フォルダ)の中にこれらのテンプレートが自動で作成されているんですね。

ワードプレスライクな管理画面も、すでにデザインされているトップページも全部、こいつらなのです。

ということは、あとはこれらのファイルをいじっていくと、自分でデザインを変えていけるわけです。

正直、mezzanine を使う上で、models,py とかviews.py とかをいじるのは現実的ではありません。すでに、複雑なCMS機能が構築されているので、そこに手を加えるとなると、通常通りのdjangoの書き方では反映されないのです。

というよりもCMS機能を使う時って、プログラミングに詳しくない人が自分でページを作れるようにしたり、ブログの投稿を簡単にして、メタデータまでいじれるようにするっていうのが王道だと思うので、そもそもバックエンドをいじることも少ないんですよね。

 でもフロントは大事です。

テンプレートをいじっていく前に、まずはファイルを確認してみてください。

django特有の{%%}がずらりだと思います。

初めてみた時は、ゲロ吐きそうになりました。

色々なファイルやviews.py と複雑に連携している証拠です。

これをいじるのは流石に骨が折れますよね。。。

まずは、templates フォルダの名前を変更しましょう。

そして、theme フォルダの中にtemplatesを追加します。あとは、名前を変更したフォルダから、ファイルを移動していきます。

なぜこれを行うのかというと、

myvenvの環境の中には、親元のtemplatesフォルダが存在しているわけです。

templatesを全ていじるわけではないので、いじらないtemplateファイル(html)はそのまま反映してほしいわけです。

ただ、自分で色々変更したhtmlファイルに関してはしっかり変更が反映されてほしいので、それらをthemeフォルダの中のtemplatesフォルダに移動して、

コピーしたtemplatesフォルダと全く同じ構造でファイルを置いていきます。

例えば、blogフォルダの中にあるファイルはblogフォルダを作ってから、ファイルを作成していきます。

これでしっかり読み込んでくれます。

そして、settings.py を開きましょう。

installed_appsにthemeを追加します。

必ず一番上に!

とりあえず、base.htmlと同じ階層にあるindex.htmlになんでもいいので、文字を追加してみてください。

Screen Shot 2019-02-08 at 19.20.38.png

文字が変わりました!

つまり、テンプレートをいじれた!

さあ、あとは、djangoと同じように自分で作ったcssファイルを

に追加するなり、bootstrapを使って、デザインを変更していくなり、好きなようにデザインをいじってください!!

管理画面でページを追加すればしっかりページがナビに現れますよ!

Screen Shot 2019-02-08 at 19.26.41.png

サイドバーを消すなり、なんでもありです。

 - settings.py
LANGUAGE_CODE = "ja"

余談ですが、settings.py のlanguage_codeを’ja’にすることで、管理画面が日本語になります。

あとはTimezoneとかも'Asia/Tokyo'に変更したりしておくと便利ですね。

Screen Shot 2019-02-08 at 19.30.00.png

何がすごいかって、このコードを変えるだけでいろんな言語にmezzanineが勝手に変えてくれます。検索もあるし、色々便利なmezzanineです。

長くなってきたので、そろそろ切り上げようかと思いますが、

大事なポイントを何点か上げていきます。

urls.pyの英語が読めれば、コメント欄を呼んでください。

このurls.pyでブログをトップページに表示させるかとか、とか、新しくデザインを作るかとか(pages/index.htmlにコードを書くことで、トップページだけ、templates/index.htmlのコードを反映させる)
の設定があるので、、、

多くの場合、ブログ用に作成すると思うので、トップにブログ記事を載せる用の設定に変更しなければいけないと思います。

英語の説明ですが、何をすればいいかはurls.pyに書かれています。基本的には #のコメントマークを外して機能すると思います。

base.htmlのnavでdropdown,treeなど、ナビゲーションのスタイルが変更できる。

templates/pages/menus の中からdropdown, tree, primary のどれかを選んで、themeのtemplatesフォルダに同じ構造でコピーし、

base.htmlのnavを少しいじります。

67   {% block navbar_dropdown_menu %}{% page_menu 
      "pages/menus/dropdown.html" %}{% endblock%}

67行目にありますね。デフォルトではdropdownになっていますが、変更可能です。

 終わりに

正直、デプロイ前まで書くといいながら、内容がかなり増えてしまいました。

まだまだ色々、追加できる機能はありますが、とりあえず、トップページと追加するページのデザインをいじることができればサイトとして機能すると思います。

デフォルトで投稿へのコメントとか、シェアボタンとかが実装されているので、その辺りも気にする必要はありませんが、邪魔なら、前述したように、themeのtemplatesの中に持ってきて、消すこともできるので、割と好きなようにいじることができます。

mezzanine を実際に運用してみて

私は正直、djangoの方が好きです。。。笑

その理由の一つがmezzanine がdjango1.1であるということ。

djangoはバージョン2になってから大きく進化しました。使えるライブラリが増えたり、googleに転がってる参考コードがバージョン2だったり。

もう一つが、mezzanineが複雑なシステムで構成されている故のもっさり感です。

正直、djangoの何倍もの容量があるので、少し重たくなります。

もちろんそこまで気になるものでもないのですが、速さを重視するなら断然djangoです。

そして、もう一つがdjangoの素晴らしさ。

djangoと他のフレームワークである Rails等との大きな違いは、URLの設定やデータベースとのやりとりを全て明示的にコードとして書かなければいけないこと。

裏を返せば、

 かなり自由にシステム構築ができる

そして、機械学習や数値演算など、pythonが強みとすることがdjangoのシステム内で行えるのです。

今回の記事はmezzanineですが、これはこれからdjangoの記事を書いていくための序章なので、これからはどんどんdjangoの記事を上げていきますw

URLの設定や関数など、バックエンドに関する大半は使い回しもできるように作ることで、一度、複雑なdjangoのシステムを作ってしまえば、2つ目のWebサービス以降は時間が大幅に削減できます。

そして、さらにdjangoのことをわかってくれば、CMSであるmezzanineのようなシステムも素早くdjangoで作れるようになります。

その上で、簡単にデータベースやviews.pyなどのフロントとのやりとりの中間を成す部分も自由にいじることができるので、

mezzanineの実装をするよりは、djangoを極めていくことをお勧めします。笑

とはいうものの、mezzanineを使えば、コード5行くらいで、ブログやHPを作ることもできるので、簡単なブログを作ったりする点ではmezzanineはやっぱり便利だと言えます。

最後に、もっとmezzanineのことを使いこなしていきたいという方は、

こちらのudemyの動画をお勧めします。

今回の内容を含め、デプロイまでの全ての行程をわかりやすく説明してくれています。

英語ですが、動画でのコードをコピペしていくだけでもとりあえず、完璧なものが作れるので、mezzanineを使いこなしていきたい方は、ぜひ、学習してみてください!

mezzanine学習動画 at Udemy

ご質問もお待ちしてまーす!

10
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
15