しゃちの備忘録

プログラミングを中心とした技術関連の備忘録です(今のところ)

Djangoに触る(その7)

7日目です.

チュートリアルの続きに挑みます.

前回まで

teru0rc4.hatenablog.com

ビューのハードコーディング改善,URLの名前空間の改善を行いました.

今日やったところ

はじめての Django アプリ作成、その 4 | Django documentation | Django

フォーム作成とコードの縮小化についてです.

フォームの作成

前回ビューの部分の修正を行いました. 今回はそこにhtmlの formを追加します.

polls/templates/polls/detail.htmlを以下に変更します. 今回はラジオボタンを追加しました.

これの追加で質問の選択肢が追加できたと思います.

<h1>{{ question.question_text }}</h1>

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<form action="{% url 'polls:vote' question.id %}" method="post">
{% csrf_token %}
{% for choice in question.choice_set.all %}
    <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
    <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />
{% endfor %}
<input type="submit" value="Vote" />
</form>

送信したデータを処理するための変更を施していきます. polls/urls.pyには,実はすでに必要なものは書かれています.

url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'),

なのであとは,polls/view.pyを修正すればOKです. 以下の内容を追記してあげてください.

from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect, HttpResponse
from django.urls import reverse

from .models import Choice, Question
# ...
def vote(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        # Redisplay the question voting form.
        return render(request, 'polls/detail.html', {
            'question': question,
            'error_message': "You didn't select a choice.",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        # Always return an HttpResponseRedirect after successfully dealing
        # with POST data. This prevents data from being posted twice if a
        # user hits the Back button.
        return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

また質問の投票を行った時のリダイレクト処理も実装します. 同じく,polls/views.pyに対して,追記します

from django.shortcuts import get_object_or_404, render


def results(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/results.html', {'question': question})

最後に実際に表示されるwebページのテンプレートとして, polls/templates/polls/result.htmlを作成します.

<h1>{{ question.question_text }}</h1>

<ul>
{% for choice in question.choice_set.all %}
    <li>{{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}</li>
{% endfor %}
</ul>

<a href="{% url 'polls:detail' question.id %}">Vote again?</a>

これで投票をするとリダイレクトしてくれたり, 選択せずに投票をすると,エラーを吐く仕組みができました. お疲れ様でした.

おわりに

ぼちぼちでチュートリアルが終わるので,実際に手を動かしたいですね….

追記

やっぱり一回自分が何をやってきたか再確認する意味も兼ねて, 明日からは今日までの範囲を改めて見直しながら, 何か作りたいと思います.

ので毎日更新も一度今日までです.

作った何かの進捗を報告することはあるかもしれません.

チュートリアルの続きは詰まったその時にやりたいと思います.

Djangoに触る(その6)

6日目です.

チュートリアルの続きに挑みます

前回まで

teru0rc4.hatenablog.com

404エラーの追加,またDjangoでよく使う操作をまとめてくれたモジュール類についての修正を行いました.

今日やったところ

はじめての Django アプリ作成、その 3 | Django documentation | Django

ここの残り部分,テンプレートシステムの活用についてです. 短い….

テンプレートシステム

前前回辺りにテンプレートをロードし表示するところをやりました. その部分の追記です.

polls/detail.htmlを以下のように修正します. テンプレートシステムでは,次のように辞書検索でquestionの該当物を探したり,forを使う事でquestion内のメソッドを呼び出しています.

<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
    <li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>

テンプレート内のハードコーディングを消す

以前にビューのハードコーディングを残すと,のちのち修正が大変になるという話がありました. 具体的にはURLを変更したりするときなどに,変更困難になるなどのことが起きます.

そして現在もpolls/index.html内にはハードコーディングが残ってしまっています.

{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

この

 <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>

の部分を修正していきたいと思います.

過去にpolls/urls.pyの中で,url関数に関する記述を行いました.

    url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),

この記述を利用して,polls/index.htmlを以下のように修正します

<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>

かつて url()関数内でnameを定義認めそれを利用することで,/pollsという記述を消すことに成功しました.

逆に言えば,今後URLに関する変更を行いたいときは,polls/urls.pyを変更すればいいということです. 例えば,polls/12と表示されていたところを, polls/specifics/12というURLに変えたいときは,以下のようにpolls/urls.pyを変更すればいいのです.

...
url(r'^specifics/(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
...

URLの名前空間の管理

先ほどまででURLの追記変更について説明しました. 今回はpollsというアプリケーションしか存在しませんが,実際はこれより多くの数のアプリケーションとビューを管理することになります.

そんなとき,どのようにアプリとそのURLを区別するかについてかいていきます.

結論から言うと,URLconfに対して名前空間を追加すればいいようです. polls/urls.pyのなかのアプリケーションの名前空間の箇所を修正します. 今回はapp_name = 'palls'を追加しました.

from django.conf.urls import url

from . import views

app_name = 'polls'
urlpatterns = [
    # ex: /polls/
    url(r'^$', views.index, name='index'),
    # ex: /polls/5/
    url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
    # ex: /polls/5/results/
    url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'),
    # ex: /polls/5/vote/
    url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'),
]

続いて,polls/index.htmlテンプレートも修正します.

  <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>    {% endfor %}

<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>

に変更し,pollsdetailだよと言うことを教えてあげます.

おわりに

チュートリアル3が終わりました.

微妙に忙しくてペースが落ちてますが, もう少し頑張ります.

Djangoに触る(その5)

5日目です.

チュートリアルの続きに挑みます

前回まで

teru0rc4.hatenablog.com

ビューの修正を行いました.

今日やったところ

はじめての Django アプリ作成、その 3 | Django documentation | Django

ここの残り部分,404エラーの創出を行いました

renderの使用

前回はテンプレートをロードし,値を入れレンダリングし,HttpResponseオブジェクトを読み込むといった処理をしていました. この処理はよく使われるということで,Djangoではこれらをささっとこなすための処理が実装されています. なのでそれを組み込んで行きます

polls/view.pyを次の内容を追記.修正します.

from django.shortcuts import render

from .models import Question


def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)

ビュー自体は変わっていないです.

404エラーの追記

前回pollsにアクセスした時のビューを修正し,htmlを読み出したり,IDに対応したペーシを生成したりしました. 今回は,想定されていないIDが飛んできたときに404を返すように追記したいと思います,

polls/view.pydetailを中心に次の内容に追記.修正します.

from django.http import Http404
from django.shortcuts import render

def detail(request, question_id):
    try:
        question = Question.objects.get(pk=question_id)
    except Question.DoesNotExist:
        raise Http404("Question does not exist")
    return render(request, 'polls/detail.html', {'question': question})

加えて,polls/templates/polls/detail.htmlを以下のように作成します

{{ question }}

この状態でサーバを起動しアクセスします.

f:id:teru0rc4:20170904022248p:plain

対応するIDが存在しないページにアクセスするとこのように404エラーを吐いてくれます.

f:id:teru0rc4:20170904021709p:plain

また404エラーも非常によく使う例外なので, djangoのほうにショートカットが提供されています. get_object_or_404というモジュールです.

それを使ってdetail()を書き換えると以下のようになります.

from django.shortcuts import get_object_or_404, render


def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/detail.html', {'question': question})

おわりに

404とショートカットについてです.

django自体が色々なものをささっとやる環境なのに,ショートカットまであるとは….

あとチュートリアルが7まであるので,そこまではなるべく毎日更新で頑張りたいと思います. それ以降は何かを作るのをやりたいと思ってます.

Djangoに触る(その4)

4日目です.

チュートリアルの続きに挑みます

前回まで

teru0rc4.hatenablog.com

テーブルの作成についての整理と, チュートリアルを進めadminのセッティングを行いました..

今日やったところ

はじめての Django アプリ作成、その 3 | Django documentation | Django

ビューに関して,polls/view.pyなどを修正しました.

ビューの追記

前々回pollsにアクセスした時のビューを結構あっさり作ったのですが, 今回はそこの部分をもう少し掘り下げ,かっこいい見た目にしていこうと思います

polls/view.pyを次の内容を追記します.

def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)

def results(request, question_id):
    response = "You're looking at the results of question %s."
    return HttpResponse(response % question_id)

def vote(request, question_id):
    return HttpResponse("You're voting on question %s." % question_id)

また,polls/url.pyの内容は以下のように書き換えます. url()を追記して,更新した`polls/view.pyに対応する形にしました.

from django.conf.urls import url

from . import views

urlpatterns = [
    # ex: /polls/
    url(r'^$', views.index, name='index'),
    # ex: /polls/5/
    url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
    # ex: /polls/5/results/
    url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'),
    # ex: /polls/5/vote/
    url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'),
]

この状態でpython3 manage.py runserverをし, http://127.0.0.1:8000/polls/29/にアクセスをするとこのような画面になります.

f:id:teru0rc4:20170903004104p:plain

http://127.0.0.1:8000/polls/以下に数字を入れてアクセスすると,URLで指定した数字が出力されます.

何が起きているのかというと, たとえば,今回のようにhttp://127.0.0.1:8000/polls/29/に対してアクセスし,リクエストを送ると, Djangomystic/setting.pyの中のROOT_URLCONF = 'mysite.urls'という部分を参照し, mystie/url.pyをロードをします.

mystie/url.pyに従い与えられたURLを検査しpolls/に該当する処理を見つけたあと, /pollsを取り除いた残り/29polls/url.pyに引き渡し, この表現がr'^(?P<question_id>[0-9]+)/$'に合致するのでdetailを呼び出してその結果として, URLにIDを打ち込むだけで,対応した画面を出力してくれるというわけです.

これの強みとしては,URLのマッチングには正規表現を使っているため,基本的に制限はなく, 同時に.htmlなどの追加もいらない点が挙げられます.

ちゃんと動作を持つビューを作る

ここまでではあくまで表示しているだけで,ビューにとって大事な要素を満たしているとは言えません.

それはリクエストに対して季節なHttpResponseを返すことと,例外をしっかり返すことです. 以降ではそれらをindex()を変更しながら実装したいと思います.

まずはpolls/views.pyを次のように追記いたします. やっていることはindex()の書き換えです.その他部分は残しておいてください.

from django.http import HttpResponse

from .models import Question


def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    output = ', '.join([q.question_text for q in latest_question_list])
    return HttpResponse(output)

しかしこのコード,記法状は問題はないのですが,システムとして問題を抱えています. それはビューの内容を直接書き込んでしまっていることです. このままでは,ページの見栄えを変更するたびにこのPythonコードを編集せねばなりません.

そこで,このビューの部分をPythonから切り離したいと思います. そのためにDjangoのテンプレート機能とhtmlファイルを利用します.

まずはpollsディレクトリの中にtemplatesというディレクトリを作成します. そしてその中にpolls(誤字ではないです)を作成します. そしてその中にindex.htmlを作成します. つまりpolls/templates/polls/index.htmlになるわけです.

何故こんなことをしているのかというと,Djangoのテンプレートのロードと, 同名のテンプレートを作った際の区別を簡単に明確化する目的があります. 詳しくは公式ドキュメントに書いてあるので是非ご参照ください(はじめての Django アプリ作成、その 3 | Django documentation | Django)

肝心のindex.htmlですが次のように記入します.

{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

また,テンプレート適用のためにpolls/view.pyindex()も次のように変更します.

from django.http import HttpResponse
from django.template import loader

from .models import Question


def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    template = loader.get_template('polls/index.html')
    context = {
        'latest_question_list': latest_question_list,
    }
    return HttpResponse(template.render(context, request))

この状態でサーバーを立てpolls/にアクセスすると,questionの質問リストを表示します. 何もなければNo polls are availableと言われます 質問を追加する場合は

はじめての Django アプリ作成、その2 | Django documentation | Django

を見ながら追加してみましょう.

おわりに

ビューのリクエストまで作成しました.

明日はもうちょっと進めるといいですね….

というか,機能はなんとなくぽよっとわかったので, 1回思ったものがどこまでできるかーをやってもいいのかなーと思ってたりします.

うーん.

Djangoに触る(その3)

3日目です.

昨日混乱したテーブルの追加とmigrateについて調べたことと,チュートリアルの続きに挑みます

前回まで

teru0rc4.hatenablog.com

データベースのテーブル作成に挑みました. がテーブルの作成で混乱したので,そこで詰まってました….

今日やったところ

はじめての Django アプリ作成、その2 | Django documentation | Django

宣言通り,テーブルの作成について調べてまとめました. まとめた知識について触れながら,この章を終えました.

テーブルの作成について

前回migrateコマンドで混乱したのでそこについて調べました.

モデルを作成しテーブルを作るのですが, データベースサーバーにテーブルを作成する場合,マイグレーションファイルと呼ばれるものを作成する必要があります. これを作成するためのコマンドが,makemigrationsコマンドになります.

今回は前につくったpollsの中にテーブルを作成します. その為にまず,プロジェクトにpollsの存在を教えてやる為に, mystie/setting.pyの中のINSTALLED_APPSpolls.apps.PollsConfigを追加してあげます.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls.apps.PollsConfig'
]

makemigrations

INSTALLED_APPSへの追記が完了したらmakemigrationsを実行します. これをすることで,settings.py内に記入したアプリケーションを精査し,マイグレーションファイルを作成してくれます. マイグレーションファイルはpythonの形式で保存されます.

その前に今回はpolls/modelsの中に,以下のモデルを作成します. これの説明は省略しますが,これを作ることで質問事項や情報の公開日などの情報や, 質問のテキスト,投票数などを情報を記述してます.

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

モデルを記述したら,いよいよミグレーションファイルを作成します.

$ python3 manage.py makemigrations polls

するとこのような画面になると思います. polls/migrationsファイル内に0001_initial/pyが生成されたと思います.

f:id:teru0rc4:20170902003110p:plain

ひとまずこれでマイグレーションファイルの生成は完了です.

sqlmigrate

マイグレーションファイルを対象にとって, そのマイグレーションファイルがどのようなSQLを実行するかを確認するコマンドに,sqlmigrateというコマンドが存在します. 今回は以下のコマンドを入力します. ここでの pollsはアプリケーション名を指し,0001は先ほど作成したマイグレーションファイル名を指しています

$ python3 manage.py sqlmigrate polls 0001

こんな感じの内容が出ればひとまずOKです. f:id:teru0rc4:20170902004324p:plain

migrate

では最後に先ほど作ったマイグレーションファイルを,サーバーに適応します.

$ python3 manage.py migrate

するとこんな感じになります. これで適用は完了です.

f:id:teru0rc4:20170902004858p:plain

シェルでの操作

python manage.py shellとすることで,先ほどデータベースの中などを色々見ることができます. ここでの記述は省略.

管理ユーザadminの作成

データベースをあれこれする上で大切なのが,管理者の存在です.(adminとかsuperuserとか言ったりすると思います)

まずはadminサイトに接続できるユーザーを作成します.

$ python3 manage.py createsuperuser

するとUsernameEmail ddressPasswardを要求されるので設定してあげてください.

下はパスワード設定を適当にやりすぎて,3回も失敗している図です. f:id:teru0rc4:20170902011007p:plain

adminサイトに入る

ではサーバを起動してadminページに入りたいと思います.

python3 manage.py runserverを実行し,http://127.0.0.1:8000/admin/にアクセスしましょう.

f:id:teru0rc4:20170902011259p:plain

ここに先ほどのUsernamePasswardを入力すると….

f:id:teru0rc4:20170902011355p:plain

このようにadmin用の管理サイトに入れました.

pollsアプリを追加する

実はこのadminページ上ではpollsを編集することはできません. なのでpolls/admin.pyを以下のように編集ましょう.

from django.contrib import admin

from .models import Question

admin.site.register(Question)

変更の上で,リロードするとこのようにpollsアプリの中からQuestionが追加されました.

f:id:teru0rc4:20170902011821p:plain

今日はここまでお疲れ様でした.

おわりに

テーブルの作成について色々調べました. 結局人に聞いてしまったりしたので,なるだけ自分だけで完結できるといいですね…と少し反省.

三日坊主の壁を超えたので,そこはほっとしてますが, 進捗スピードは速くないのでスピードアップできるといいかなーとも思いました.

うーん.頑張ります.

Djangoに触る(その2)

昨日の続きに挑みます. 昨日にもまして短めです. それでも書きたいなと思ったので書きます.

前回まで

teru0rc4.hatenablog.com

Djangoについて簡単に触れ, インストールとサーバの動かし方について. そして,Pollsというビューを表示するだけの簡単なアプリケーションを動かしました.

今日やったところ

はじめての Django アプリ作成、その2 | Django documentation | Django

ここのmigrateまでです. migrate周りで混乱したのもあり,コードとかは昨日以上に短いです….

データベースをセットアップする

Djangoを動かす上で忘れてはならないのはデータベースの取り扱いです. これを使うことで,色々な認証情報などの管理をします.

データベースの構築には色々な種類がありますがデフォルトはSQLiteになっています. Pythonに標準で組み込まれていることもあり,今回はこれを使っていきたいと思います.

ちなみに変更する場合は, mysite/settings.pyの中のDATABASESdefaultの部分を変更すればいいはずです.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

またここでタイムゾーンや言語の設定もしていきます. デフォルトの時間設定は日本ではないため,今後データベースの記録を日本の時間でしていくために変更しておきます. mysite/settings.pyの中のLANGUAGE_CODETIME_ZONEを以下のように変更しておきます. こうすることで,日本語で日本時間の設定にすることができます.

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

あわせてPythonタイムゾーンを扱うためのモジュール`pytz`もインストールしておきましょう.

$ pip3 install pytz

テーブルを作成する(今回はしない)

mysite/settings.pyの中のにはINSTALLED_APPSという項目があり, ここにはこのプロジェクトでしようされるアプリケーションの一覧が記述されてます. (ここに書かれているものを全て使うというわけではないらしく,よく使われるものとして揃えてくれているらしいです.) ではいよいよデータベースのテーブルを作成していきます. ここでいうテーブルというのはいわゆるデータを取りまとめたシートのようなものです. イメージとしてはExcelのブックが近いと思います.

データベースを使用するということはすなわち,このテーブルを1つ以上使用することになります. なのでデータベースにテーブルを作成していきます.

ここからmakemigrationsmigrateを使用し,テーブルを作成していきますが, まだ自分の中で腑に落ちていないので,これについてはきっちり調べた結果を明日の記事でまとめます.

おわりに

2日目です.

時間があまり取れなかったのと, migrateの部分で混乱したので短めです. migrate難しいです….

きっちりmigrateについて調べて上で明日の記事では,admin作成の部分まで進めたいと思います.

Djangoに触る(その1)

PythonフレームワークDjangoの使い方を勉強します. 過去にちょろっと触った程度なので,再勉強するつもりでやります

ほぼ日記です.

解説要素はあまりありません…. チュートリアルをなぞって,自分が疑問に思ったところを追記する感じでやっていきます.

Djangoとは

PythonでうごくWebフレームワークの1つです. webアプリ開発で使える機能がまとまっているので, これを利用することで,Webアプリを作成する際の効率を上げることができます.(現代においては当たり前に使われているかもしれません)

Pythonで動くWebフレームワークは他にもあり, BottleFlaskPyramid, Ploneなどが存在しています.

今回はPython界で最も使われているフレームワークであるDjangoに挑んでみようというわけです.

また今回の学習ではDjangoの公式ドキュメントを参考に進めていきたいと思います.

Django ドキュメント | Django documentation | Django

今日やったところ

はじめての Django アプリ作成、その 1 | Django documentation | Django

Djangoのインストール

pipを使うことでインストールは完了します.

$ pip3 install django

重ねてバージョン確認もしてみます.現在(2017/08/30)での最新バージョンは1.1です

$ python3
$ import django
$ print(django.get_version())

f:id:teru0rc4:20170830222101p:plain

プロジェクトを作成する

Djangoのコードはプロジェクトという単位で管理されます, プロジェクトには実際のコードや設定などが詰まっており,djangoにはそれをまるっと生成するコマンドがあります.

プロジェクトを生成したい場所で,次のコマンドを入力します.**********の部分には生成したいプロジェクト名を入れます.

$ django-adomin startproject **********

今回の例ではdjango-adomin startproject mysiteとしました. 生成するとこんな感じのディレクトリとコードが生成されます.

f:id:teru0rc4:20170831003140p:plain

ファイルのそれぞれの役割は割愛します(私自身まだわかりきってないのと,公式ドキュメント(https://docs.djangoproject.com/ja/1.11/intro/tutorial01/)に丁寧に買いてあるので…)

サーバーを動かしてみる

作成したプロジェクトが動くかのテストをします. 作成したディレクトリに入って,次のコマンドを実行します.

$ python manage.py runserver

するとコマンドラインに次のような表示がなされます.

f:id:teru0rc4:20170831003457p:plain

この状態で,http://127.0.0.1:8000/にアクセスして見ます. このような画面が出れば,OKです.

f:id:teru0rc4:20170831003612p:plain

シンプルなビューを作る

サーバがかけたので,今度はビューを作ります. いわゆるwebページの見た目を制御する部分です.

そのために色々ファイルを準備するのですが, djangoにはそれらのファイルやディレクトリを自動生成する機能が含まれています.すごい,

なのでその機能を使って,pollsという名前のアプリケーションを作り,そこにビューとしての機能をもたせたいと思います.

今回はmysiteの中のmanage.pyと同じディレクトリで作業をします(こうすることでmysiteのサブモジュールではなく,トップレベルのモジュールとしてインポートできます).

$ python manage.py startapp polls

すると新たにこんな感じにファイルが追加されます. f:id:teru0rc4:20170831005323p:plain

ここにpolls/urls.pyを追加し, polls/vies.pypolls/urls.pymysite/urls.pyに対して,チュートリアルのサイト(https://docs.djangoproject.com/ja/1.11/intro/tutorial01/)で言われるような追記を行います. ここで行われているのは,URLの対応付けと,実際のビューに関する記述です.

ここまで記述が完了したら,改めてサーバーを動かします.

$ python manage.py runserver

今回アクセスするのは,http://127.0.0.1:8000/polls/です. 次の画面が出れば,正しく機能しています. もしエラーのようなものを吐いていれば,当該ファイルを修正します.

f:id:teru0rc4:20170831005820p:plain

おわりに

ひとまず今日はここまでです. Djangoおもしろいです,知らないことも多いですが勉強して期待です. チュートリアルを動かしてるだけなので新規性も何もありませんが,やっていく中での疑問とかを調べて一緒にまとめていければいいなと思ってます.

明日はこの続きができればいいなーと考えていますが時間が取れるかわからないのと, 私自身の資料執筆が遅いので,今日と同じくらい短めになると思います.

それでも,短くても小出しで更新したいと思ってます…….

頑張ります.