環境
- Amazon Linux 2
- Python 3(現時点で3.6.4)
- Django(現時点で2.0)
参考サイトとメモ
Pythonの復習とバージョン3のキャッチアップ
Pythonの基礎の基礎の基礎 - QiitaPython3基礎文法 - Qiita
Python2からPython3.0での変更点 - Qiita
with構文とは何なのか - 年中アイス
Amazon Linuxで環境構築
Amazon LinuxでPython3系を使う - Qiita- Apacheは別途(先に)yumで入れた
- pipもできるようになった
- 今回は別にpyenv使わなくても、yumでpython3を入れれば良かったかも
Djangoでサンプルアプリを作りながら全体像を把握する
Djangoを最速でマスターする part1 - Qiita
(参考(github) gragragrao/manager_project: 「Djangoを最速でマスターする」ための参考レポジトリ)
- models.ForeignKey()の第2引数(on_delete)が必要なので、on_delete=models.CASCADE を渡すようにした(参考 Django、on_deleteを使う - naritoブログ)
- Django shellでは、モデルを使う前に下記でインポートする(参考 PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(5)【Django shellでDB操作入門編】 - Qiita)
from manager.models import *
- urls.pyのurlpatternsはurl()ではなくpath()にして、正規表現もやめた
- 外部からはアクセスする場合は下記のようにIPの指定(参考 はじめての Django アプリ作成、その 1 | Django documentation | Django )と、
python manage.py runserver 0:8000
- settings.pyでの下記のようなIP許可(参考 Django ALLOWED_HOSTSの設定 | エンジニア足立のコーディング日記 - 株式会社ディープ)も必要。
ALLOWED_HOSTS=[‘*’]
Djangoを最速でマスターする part2 - Qiita
- Debug ToolbarのINTERNAL_IPSはApacheのリバプロとかあるから変えるかと思ったけどそのままでいけた
- python shellのログインユーザー登録でWarningが出たけど、とりあえず無視...
/usr/bin/.pyenv/versions/3.6.4/lib/python3.6/site-packages/django/db/models/fields/__init__.py:1365: RuntimeWarning: DateTimeField Person.birthday received a naive datetime (2018-01-04 00:00:00) while time zone support is active.
- view.pyのCustomLoginViewの下記はメソッドじゃなくなったみたい
if self.request.user.is_authenticated(): #'bool' object is not callableと怒られる
↓
if self.request.user.is_authenticated:
- login.htmlはGithubからコピーした
- hijackは下記エラーでうまくいかなかったのであきらめた
ModuleNotFoundError: No module named 'hijack'
- 自動テストはmodelとview(いわゆるMVCの"View"というより、Djangoのviewはどちらかというと"Controller"の方が近い感じか?)を対象にしていくようだ。templateのテストとなると言及されているSelenium(今ならHeadless Chrome?)とかと連携させていく?(参考 はじめての Django アプリ作成、その 5 | Django documentation | Django)
Django1と2の違いを抑える
Django 2.0の変更点について - Qiitaそんなに変わらなそう。
Django公式チュートリアルでアプリを作成しながら学ぶ
- migrationのRailsとの違い(はじめての Django アプリ作成、その2 | Django documentation | Django)
Ruby On Rails と違って、マイグレーションは完全にモデルのファイルから生成されます。マイグレーションは本質的には単なる履歴です。 Django はデータベースのスキーマをアップデートしながら履歴を進んでいき、現在のモデルに合致させることができます。
- Django adminは便利そう。(参考 はじめての Django アプリ作成、その2 | Django documentation | Django)
settings.pyでLANGUAGE_CODEを'ja'にしたら日本語化された。システムよりの人が使うなら、英語の方が混乱が無いか? エンドユーザーに渡すなら日本語化が手軽なのは便利。
それにしても、adminっていう名前はもうひとひねりしても良かったのでは...。Pythonの文化なのかな?
アノテーションが気になるので調べた
Python と型アノテーション現時点では...使わないかなぁ。
Pythonのインストーラについて
Python パッケージ管理技術まとめ (pip, setuptools, easy_install, etc)- pip: とりあえずこれを使っておけばOK。Python3.4以降ではPython本体に同梱されるようになった。(参考 Pythonで一番最初に入れるべきパッケージ setuptools と pip - Life with Python)
- setuptools: これを入れると付属するeasy_installが使えるようになる。
- easy_install: 昔使った時はデファクトスタンダードっぽかったが、廃れたのか。
- PyPI: the Python Package Index。自由にPythonのパッケージを公開できる python.orgのサイトで、easy_install・pipはここからパッケージを探す。
Amazon RDSのAurora(MySQL)につないでみる
- 事前にAuroraは起動しておく。DB(schema)もcreateしておく。
- settings.py等を変更(参考 Python3 + Django で MySQL に接続 - Qiita)。
- NAMEにはschemaの名前をセットする。
- optionsで文字コードも指定する(参考 Djangoで文字コードutf8mb4でMySQLに接続する方法 - aoishiの備忘録)
- これでmakemigrationsをしようとしたらエラー
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
- pipでmysqlclientを入れようとしてもできない。mysql_configが必要らしい(参考 Ubuntu14.04 + Django1.10 - django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb' - Qiita)
- いろいろやったら、Amazon Linux2の場合はyumでmariadbを入れたらpipでmysqlclientが入れられた。(その間にいろいろ入れたので、その影響もあるかも? mariadb-develとか?)
- あとは下記を実行!
python manage.py makemigrations <アプリ名>
python manage.py migrate
- 既にadmin用のユーザーを作っていても、作り直す。(そのデータはDB上にあるので。)(参考 はじめての Django アプリ作成、その2 | Django documentation | Django)