っとなったとしたら、
Pythonの全部入りwebフレームワーク『Django(ジャンゴ)』の出番かなと思うんですが、
いざ実際に世にリリースしようと思ったら、いろいろと考える事がでてきます。
特に問題なのが、
- データベースなどのパスワード
- APIのアクセスキー
- セキュリティ全般
などなど。
自分のパソコンでテストとして動かす時と、サーバーで動かす時では
データベースの接続先が変わったりして、
そのたびに設定を書き換えていると手間もかかるしミスする可能性もあるし・・
また、セキュリティは本番環境ではマストなので、
(もし情報漏洩だったりSQLで情報上書きされたりしたらエラい事になるので)
- 『Django』で開発ができて
- 実際に本番環境にも使えて
- セキュリティばっちりで
- しかもお手軽
という夢のようなテンプレートがあればなぁと思っていたら、
あったんです。
えぇ。
最初に知った時は
と思っちゃったけれど、
マジだったんです。
その名も、
『cookie-cutter』(クッキーカッター)。
こりゃ早速試してみるべ。
と試してみる事にしました。
実施環境は macOS High Sierra 10.13.8 です。
python3.6.4インストール済みです。(pipとvenvを標準で使えるバージョンです)
【Python/Django】Webアプリのテンプレート『cookie-cutter』をインストールしてみる
まずはインストールするフォルダをつくって、
mkdir django_test #フォルダをつくる
cd django_test #フォルダに入る
Pythonアプリつくるならお約束の仮想環境を作って、
(Anacondaで仮想環境作成済みならスルーでOK)
python -m venv venv #venvというツールを使って仮想環境をつくる
source venv/bin/activate #仮想環境を有効にする
> (venv)
準備OK。
pip install cookiecutter #cookie-cutterをインストール
cookiecutter https://github.com/pydanny/cookiecutter-django
しばらくすると、こんなメッセージが順番に表示されます。
project_name [Project Name]:
project_slug [cookiecutter_sample]:
author_name [Daniel Roy Greenfeld]:
email [you@example.com]:
description [A short description of the project.]:
domain_name [example.com]:
version [0.1.0]:
timezone [UTC]:
use_whitenoise [y]:
use_celery [n]:
use_mailhog [n]:
use_sentry_for_error_reporting [y]:
use_opbeat [n]:
use_pycharm [n]:
windows [n]:
use_docker [n]:
use_heroku [n]:
use_elasticbeanstalk_experimental [n]:
use_compressor [n]:
Select postgresql_version:
1 – 10
2 – 9.6
3 – 9.5
4 – 9.4
5 – 9.3
6 – 9.2
Choose from 1, 2, 3, 4, 5, 6 [1]:
Select js_task_runner:
1 – None
2 – Gulp
Choose from 1, 2 [1]:
custom_bootstrap_compilation [n]:
Select open_source_license:
1 – MIT
2 – BSD
3 – GPLv3
4 – Apache Software License 2.0
5 – Not open source
Choose from 1, 2, 3, 4, 5 [1]:
use_heroku[n]:
基本的にエンターでOK、windowsならwindowsの箇所をyにして、
heroku 使うならherokuもyにすればいいかなと思います。
あっさりとインストールが終わり、作成されたフォルダの中にはたっぷりのフォルダ群が。
├── CONTRIBUTORS.txt ├── LICENSE ├── Procfile ├── README.rst ├── config │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── urls.cpython-36.pyc │ │ └── wsgi.cpython-36.pyc │ ├── settings │ │ ├── __init__.py │ │ ├── __pycache__ │ │ ├── base.py │ │ ├── local.py │ │ ├── production.py │ │ └── test.py │ ├── urls.py │ └── wsgi.py ├── docs │ ├── Makefile │ ├── __init__.py │ ├── conf.py │ ├── deploy.rst │ ├── docker_ec2.rst │ ├── index.rst │ ├── install.rst │ └── make.bat ├── locale │ └── README.rst ├── manage.py ├── merge_production_dotenvs_in_dotenv.py ├── newbook │ ├── __init__.py │ ├── __pycache__ │ │ └── __init__.cpython-36.pyc │ ├── conftest.py │ ├── contrib │ │ ├── __init__.py │ │ ├── __pycache__ │ │ └── sites │ ├── static │ │ ├── css │ │ ├── fonts │ │ ├── images │ │ ├── js │ │ └── sass │ ├── templates │ │ ├── 403_csrf.html │ │ ├── 404.html │ │ ├── 500.html │ │ ├── account │ │ ├── base.html │ │ ├── pages │ │ └── users │ └── users │ ├── __init__.py │ ├── __pycache__ │ ├── adapters.py │ ├── admin.py │ ├── apps.py │ ├── forms.py │ ├── migrations │ ├── models.py │ ├── tests │ ├── urls.py │ └── views.py ├── pytest.ini ├── requirements │ ├── base.txt │ ├── local.txt │ └── production.txt ├── requirements.txt ├── runtime.txt ├── setup.cfg ├── tree.txt └── utility ├── install_os_dependencies.sh ├── install_python_dependencies.sh ├── requirements-jessie.apt ├── requirements-stretch.apt ├── requirements-trusty.apt └── requirements-xenial.apt
開発環境と本番環境で分けてたり、
後々必要であろう機能やフォルダ分けがあらかじめ用意されているよう。
さぁ早速動かしてみるかとおもむろに開発サーバーを立ち上げる魔法のコマンド、
python manage.py runserver
をやってみると、案の定エラー発生。
よくよくエラーを見ると、『Module Not Found “***”』と書いてあって、
ライブラリをいくつかインストールする必要があるようです。
【Python/Django】Webアプリテンプレート『cookie-cutter』で必要なライブラリ群
エラーを見て書いてあるライブラリをインストール。
そして python manage.py runserverとやるとまた違うエラーが発生。
またエラーの中身を見てライブラリをインストール、
というループを何度か繰り返して、これらのライブラリをインストールしました。
pip install django-environ #環境変数管理 秘密にしたいkeyなどを隠すため
pip install django-crispy-forms #いい感じにフォームをつくれるよう
pip install django-allauth #ソーシャルログイン機能
pip install django-rest_framework #APIやるなら必須
pip install django-debug_toolbar #開発やるなら必須
pip install django-extensions #djangoをいろいろと拡張してくれるらしい
pip install django[argon2] #ログイン時のパスワード暗号化と思われる
あらためて魔法のコマンド・・!
python manage.py runserver
またエラー。
次は psycopg2 (postgresqlを使うためのライブラリ)がないと。
『cookiecutter』はPostgresqlを使う設定になっているようで。
あらためて
pip install psycopg2 #postgresqlを使うためのライブラリ
でインストールして再度魔法の
python manage.py runserver
とするとさらに別のエラー。
django.db.utils.OperationalError: FATAL: database “newbook” does not exist
データベースがないと。
と思いつつ、
createdb
でデータベースをつくって、
魔法の・・!
python manage.py runserver
疲れたけれどちょっとした達成感あり。
エラーの内容が少しずつ変わってくると、前に進んでる感がしていいですよね。(エンジニアあるある)
参考図書
coocie-cutterはこの本で知りました。
Djangoの勘所が簡潔にばっちり記載されていてとても良書です。
ジャンゴガールズの次はこの本で決まり!
PS.
macでは動いたけれどwindows7ではpostgresqlの接続がうまくいかずエラーばかり。
最近は開発環境を整えるだけでも一苦労しますよね。
だからこそなおさらプロジェクトのテンプレートがあるのはとても助かりますね。
『Python』関連ではこんな記事も読まれています。
1. 【Python】手軽に試す方法2つとwebフレームワークについて【初心者向け】2. 【Python(パイソン)】でできる事の実例 じゃらんや楽天トラベルからデータをとってゴニョゴニョできちゃうんです
3. 【Python(パイソン)】でホームページをつくった時の話【Flask/Vagrant/Heroku】
4. 【Python】Flaskのチュートリアルがもっとわかるようになるまとめ【初心者向け】
5. 【Python】用語集まとめてみた。~Webサービスをつくりたい人向け~【初心者向け】※随時更新中
6. 【Python】でWebアプリをがっつりやるならDjango一択な4つの理由【初心者向け】
7. 【Python/Django】Webアプリのテンプレートなら『cookiecutter』がよさげ【簡単で安心】
8. 【Python/Django】mysqlとの接続があまりにあっさりしすぎて拍子抜けした話
9. 【Python/Django】webフレームワークを使う6つのコツ〜最短距離でアプリをつくるために【初心者向け】
10. 【Django】Webアプリのフォルダ構成のアイデア〜違うアプリで同じテーブルを使いたい!
11. 【Django】【Laravel】【RubyOnRails】を比較してみた【初心者向け】【体験談】
アオキのツイッターアカウント。