nikkie-ftnextの日記

イベントレポートや読書メモを発信

イベントレポート | Django Girls Japanの月次勉強会でコーチをしてきました(2019年3月) #djangogirls

はじめに

いつも心は虹色に! nikkieです。
3/30にDjango Girls Tutorialを使った勉強会のコーチをしてきました。
参加者の方の質問に答える中で学んだことをレポートとしてお送りします。

f:id:nikkie-ftnext:20190331122559j:plain

勉強会の概要

PythonでWebアプリを作ろう [女性対象/男女コーチ◎] 2019.3 - connpass

Django Girls のチュートリアルを使って、一緒にWebアプリケーションをつくります。
コーチ・メンターが、躓いたところや、分からないところはサポートします。

レベル別にチームを分けて勉強するので、 はじめてプログラミングに挑戦する方も、焦ることなくイチから学ぶことができます。

Django Girlsにはチュートリアルの翻訳やワークショップでのコーチで関わっています。
予定が合ったので、数カ月ぶりにコーチ参加しました。

解決した質問

もしよろしければ以下の観点でお読みください。

  • 「もしこういうエラーが出たらここを見ればいいのか」とFAQ的に読む
  • Djangoをご存知の方はどこが原因か考える(全3題のクイズ形式)

1. 作ったblog/urls.pyについてModuleNotFoundError

この中で発生:Django URL · Django Girls Tutorial

エラーメッセージはNo module named 'blog.urls'(mysite/urls.pyのpath('', include('blog.urls')),で発生)
チュートリアルに沿って作ったblog/urls.pyが見つからない?🤔

作成したblog/urls.py

from django.urls import path, include
from django.contrib import admin

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

どうやらrunserverした状態でblog/urls.pyを作成(新規追加)しても、反映されないようです(runserverは落ちたまま)。
Ctrl+Cでrunserverを終了し、再度runserverすると解決しました。
(runserverでは既存のファイルの変更は反映されますが、新規追加ファイルが反映されないことがあると理解しています)

2. migrateしたらModuleNotFoundError

この中で発生:Djangoモデル · Django Girls Tutorial

エラーメッセージを見ると、staticfilesblog がインポートできないとのこと
staticfilesblog?🤔

原因箇所(mysite/settings.py)

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles'
    'blog'
]

原因:INSTALLED_APPSの'django.contrib.staticfiles'の後ろにカンマがない
そのため、後続のblogという文字列と連結して扱われていた。

文字列の要素からなるリストでカンマを忘れると、連結した文字列として扱われます(bcに注目ください)。

>>> ['a', 
...  'b'
...  'c']
['a', 'bc']

3. published_dateを更新しないpublishメソッド

この中で発生:Django ORM(クエリセット) · Django Girls Tutorial

前提:published_dateに値を持つ記事がない状態

>>> post = Post.objects.get(title="Sample title")
>>> post.publish() # published_dateを設定しているはず
>>> Post.objects.filter(published_date__lte=timezone.now())
<QuerySet []> # 現在時刻以前のpublished_dateを持つ記事がない→値が設定できていない?

原因箇所(blog/models.py)

    def publish(self):
        self.published_date = timezone.now()
        self.save

原因:self.saveの後ろにカッコ())がない
そのため、saveメソッドが実行されていない

Anacondaでの環境構築

AnacondaでPythonをインストールした方が、Django Girls Tutorialをやる場合、conda install読み替えDjangoをインストールすることをオススメ1します。
参考:Djangoハンズオンの環境構築で書いた記事:環境を分離してDjangoの開発環境を作る(Python3系・Django2.1系) - Qiita
Anacondaの方は、 Djangoのインストール · Django Girls Tutorial にあるrequirements.txtやpip install無視してください

Django Girls Tutorialの手順

  1. python.orgからPythonをダウンロードしてインストール
  2. venvモジュールで仮想環境を作成
  3. requirements.txtを用意して、Djangopip install

AnacondaでPythonを入れていて、venvモジュールで仮想環境を作るとエラーが発生することが多い印象です。
この日、私が知る限りで2件ありました。(一例:sqlite3用のモジュールが読み込めないというエラーが出た)

エラーの内容が同一ではないので、Anacondaとvenvモジュールが原因かは断定できない2のですが、conda installでDjangoをインストールして進めていただいたところ、エラーは解消したようです。

「データ分析からPythonを始めてDjangoへ」という方が増えている印象なので、Django Girls TutorialにAnaconda向けの環境構築方法は必要そうですね。(言い出しっぺの法則で提案してみようかな。まずはIssue探しから)

Anacondaに関してこの日学んだこと

関連情報

私が関わっているものも宣伝させていただきました。

感想

やはり人に教えることは自分の学びにもなりますね。

Django Girlsでお世話になっているkaizumakiさんから、刺激的なIssueを共有していただきました。
(今後ハンズオンを開く機会があったら試してみたいです)

終わったあとの懇親会も盛り上がり、楽しいひと時でした。
(コーチ参加者同士で「どう教えるか」というトピックになると、すごく盛り上がりますね!)

参加者、コーチ、運営の皆さま、ありがとうございました。

この記事のアイキャッチは以下から利用しました。魅力的な写真素材をありがとうございます:
Photo by Startup Stock Photos from Pexels


  1. 参考情報:Conda コマンド - python.jp

  2. sqliteのエラーのケースは、python.orgからインストールしたPythonとAnacondaでインストールしたPythonが共存していました(Windows 10)