Kindle UnlimitedのDjango超基礎入門をやってみた
今新卒研修でDjangoを扱っていて、昨年全然ついていけなかったので一年経った今だったら出来るんじゃないかという希望を持ってもう一回新卒の皆さんとやってみて気づいたことをまとめてみる
昨年やったことと状況
◯PyQでpythonの基本文法を確認後,Djangoで初めてのwebアプリコースをやった
pythonの基本文法までは分かるんだけど、webアプリコースにはいっていきなりhtmlとpythonファイルが入り組みだして全体像が全然見えないまま写経をするため、何がなんだかわからんまま進み、気持ち悪さを感じてしまった。もちろん自分で一からできないため、応用的な問題が出てくるとできなくてすぐに答えを見るような感じだった
(そもそもクラスの概念を理解してない+htmlやcssがあやふやな頃だったのでだいぶ背伸びだった・・・・)
そして、当時のpyQはリリースして直後だったため、いきなりDjangoのコースしかなく深く理解したくても、自分で試せなくてできなかった。pdbモジュールとか知らないし、そもそもどうやって使うのかわからなかった。
◯研修を復習して公式チュートリアルをやってみようとした
pyQでやってるのを再現できれば、一から作れるし理解が深まるかもと思って公式チュートリアルをやることにした。一応研修で先輩がDjangoを一からプロジェクトを作るというのをやってくれたものの、ターミナルでコマンド叩くというのに慣れなくてついていけなかった。
一応コマンドでやったことをメモをしておいてDjangoの公式チュートリアルを家でやってみようとするものの、バージョン管理や仮想環境という概念がわかっておらず。エラーが出てきても対処できなくて挫折した。
Djangoの1.11.1と2とでチュートリアルが違ったんじゃないかなと思う。
多分それに気が付かなくて、色々調べてはコマンドを打ってやっぱりできないという感じだった。
なんとなくDjangoに苦手意識を持ってしまった。
◯Cloud9とDjango Girls Tutorialでやってみる
Introduction · Django Girls Tutorial
どうしても環境構築ができなくて何も進まなかったので、Djangoの環境を用意してくれるCloud9でDjango Girls Tutorialを試した。
やっぱり0知識で英語のチュートリアルは読めないなと。英語自体が読めないんじゃなくて単語そのものの意味や概念がよくわからないから理解できなくて挫折してしまったので日本語のチュートリアルでやることにした。
Djangoに苦手意識を持ってしまったのが悔しくて、たしか一年前の自分は研修期間が終わった一ヶ月後くらいにやった気がする・・・・・・
ようやくDjango Girls Tutorialを終えることができてデータをデータベースに保存して表示するところまではやったが削除まではやってなかったと思う。
これを終わらせてもイマイチ分からず、その後はずっとiOS開発の方の練習をして一年間触らなかった。
Djangoの初心者が躓きやすいと思うところ
◯ファイルの構造が複雑
myappとtodo内に同じようなファイル名そして中身も似ていて何がどう違うのかがわからなかった。またtemplatesの中身も
templates/myapp/index.html
と書きどうしてmyappを途中で挟むのかがわからなかった。
自分がどのファイルをいじっているのかがだんだんわからなくなり、うまく動作させれなかった。だんだんどこに書けば良いのかがわからなくなる。
◯仮想環境が何かわからない
仮想環境を作って
python3 -m venv pyworks
仮想環境の有効化をすると思うのですが
. pyworks/bin/activate
これが何をしているのかがさっぱりわからなかった。これをすると仮想環境の名前(pyworks)が出てくると思うのですが、これが怖い・・・
それから仮想環境から出る方法が分からなくてどうしたら良いのか(そもそも仮想環境から出るという発想がない)元に戻す方法が分からなくて途方に暮れていた
◯manage.pyが何かわからない
python manage.py runserver
一番意味がわからなかったのがこれ
コマンド操作に慣れていない時期にやっていたからターミナルで動かしていると自分の位置がわからなくなり、manage.pyのファイル階層にいなかったりして、上記のコマンドを打つと失敗し(当然だけど)パニックを起こしていた。
またどうしてmanage.py の後にrunserverと書くのかわからず、仮想環境を立ち上げるとか何を言ってるんだとおもってた。
◯データベース関連
マイグレーションが何かわからなかった。全般的にデータベースがよくわかってなかった。
もしかしたらSQliteで実際に入っているデータを直接見れたらより理解が深まったのかもしれない
◯引数が何が入るのかがよくわからないままpyQで写経していくから本当の理解ができていなかった
応用ができないし自分で作れない。ドキュメントの読み方や探し方がわかってなかった。
◯エラーメッセージの読み方がわかりにくい
どこを読めば良いのかわからない。
今年やったこと
昨年出来なかった思い出を振り返り、アプリ開発でだいぶコマンド操作やgitにも慣れたので新卒研修で一緒にPythonとDjangoの復習をした。
◯pyQ
昨年よりも明らかに理解度が違う・・一年経つとこんなに分かるようになるんだ楽しいってなった。
一度Pythonの基本文法を復習してWebアプリケーション開発をすることにした。
初めてのWebアプリの一覧画面の表示から1からのWeb画面開発までやるのがちょうど良さそう。その後に下に紹介している本をやるといい感じに一から作って復習になる。
◯Django超基礎入門
KindleUnlimtedをパラ見してた時に巡り合った本。
ほんとに一日で理解できる程度と量
PyQやった後に、手元で一からやるのにちょうどいい内容だった。来年の新卒研修はこれを手元でやれば良いんじゃないかという丁寧な説明だった。
これに一年前のあの悩んでいた時期にめぐりあいたかったと思った一
この本のいいところ
◯KindleUnlimitedで0円読み放題
◯環境構築のしかたから紹介
◯urls.pyに関して解説が書いてある
◯ファイルの階層がスクショで掲載しててわかりやすい
◯3回Djangoの新規プロジェクト作成からアプリケーション作成までを最初からやってみる構成
1から作成を嫌でも覚えるしファイル構造がだんだんわかってくる
だいぶこれでDjangoが怖くなくなってきた。
作れるもの
メッセージアプリケーション
todoアプリケーション
ブラウザの操作だけでCRUD(Create, Read, Update, Delete) を実現できるものをつくれる
画像アップローダー
(失敗してるけど)画像をアップロードできるwebアプリ
この本をやってて詰まったところ
チャプタ8の最後で手順通りにすすめていたらチェックボックスが出なかったのでおそらくresult.htmlの設定を本の中で書き忘れてるようですresult.html(修正前)
{% if result_list %}
{% for i in result_list %}
<p>{{i.new_message}}</p>
{% endfor %}
{% endif %}
result.html(修正後)
{% if result_list %}
{% for i in result_list %}
<p><input type="checkbox" name="delete_text" value="{{i.id}}">{{i.new_message}}:{{i.created_at}}</p>
{% endfor %}
{% endif %}
こうする必要がありました
この本を進める前に設定しておくと便利なこと
atomのパッケージを入れておくと補完がついて便利
atomをインストール
https://atom.io/
atomを起動してwelcomGuideの中のinstall a Packageをクリック
赤枠のところにAtomのパッケージの名称をそれぞれ入れてinstallする
atom-django
autocomplete-python
django-templates
linter
linter-flake8
japanese-menu
データベースの中身を見てみる
この本やってる途中でデータベースの中身を見てみると理解がより深まるかも下記のようにコマンドを打つと
~/dev/Django_todo/pyworks/newsite(master*) » sqlite3 db.sqlite3
sqlite> .table
sqlite> .header ON
sqlite> .mode column
sqlite> select * from myapp_message_bord;
データベースの中身を見ることが出来る
id new_message
---------- -----------
1 aaaaaaaa
2 aaaaa
3
4
5
6
7
8
9
10 aaaakopkopk
11 grr
12 grr
13 aaa
14 aaa
15 aaa
16 aaa
この本のお陰でDjango苦手意識が少し消えました。
やっぱり一から構築してちょっとずつ試せないとなんだか気持ち悪さを感じてしまうのがなぁ・・・