LoginSignup
3
3

More than 5 years have passed since last update.

初心者がDjangoのチュートリアルで何をやり何を考えているか(3)-1

Last updated at Posted at 2018-12-14

前回までのあらすじ

前回、全体像がある程度見えたことでわかった気になり調子をこいたが、やはり躓いてしまった。原因は単なる知識不足で、ほとんど知識もないままに車を運転して事故に遭ってしまったようだ。亀のような歩みだが1歩1歩知識を確かめながら進める。というわけで「はじめてのDjangoアプリ作成その3」。

URL ディスパッチャって何?

このチュートリアルでは URLconf の基本的な使い方を知ってもらいます。より詳しくは URL ディスパッチャ を参照してください。

ディスパッチャってなんぞ?ググる。

ディスパッチャ:処理を待っているデータやプロセスが複数ある場合に、効率よく処理できるよう必要な資源の振り分けや割り当てを行うシステムやプログラムのこと

再びチュートリアル。

アプリケーションのURLを設計するには、俗に URLconf (URL configuration) と呼ばれる Python モジュールを作る必要があります。

URLconf とか url.py とか何がどう違うんだ?とググる。広く浅く読んで理解したところでは、URL dispather = URF conf = urls.py ですべて同じものだった。モジュールを作るっていってもテキストでPython入力して〇〇.pyって保存するだけのこと。〇〇っていうのがモジュール名になるみたい。

初心者は同じものを別の名前で言われても混乱するだけなんだよ

再びチュートリアル。

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

ここで自分が理解できていたこと

  • def で関数つくる
  • detail は関数名
  • question_id はチュートリアルその2でデータベースに設定した主キー(のはず)
  • return この値を返せっていう命令

頭を悩ましたのがこの2つ

  • request お前誰?いつ湧いてきた?オレが勝手に名前を決めていいモノなの?__init__のselfみたいに決まったものなの?
  • HttpResponse お前も大文字で偉そうだよな?クラスなの?

request と HttpResponse って何?

今さらなんでそんなところで躓くんだ?と思われるかもしれないが、初心者は得てしてそんなもの。足し算引き算を覚えたくらいで足元も覚束ない。わからないまま見過ごしてきたモノもたくさんある。ググる。

Django は、システム全体にわたって、リクエストとレスポンスオブジェクトを使っ て処理状態を受け渡します。

あるページへのリクエストを受け取ると、Django は HttpRequest オブジェクトを生成します。このオブジェク トにはリクエストのメタデータが入っています。次に Django は適切なビューをロー ドして、 HttpRequest をビュー関数の最初の引数に渡しま す。各ビューは HttpResponse オブジェクトを返さねばな りません。

このドキュメントでは HttpRequest および HttpResponse オブジェクトの API について説明します。

http://djangoproject.jp/doc/ja/1.0/ref/request-response.html#httprequest

Django v1.0 のドキュメントが出てきた。現バージョンの方も同じような記述が見つかった。現バージョンの該当箇所も下記に引用しておく。

Django は、システムを通じてステータスを渡すために、リクエストとレスポンスのオブジェクトを使います。

あるページがリクエストされたとき、Django はリクエストに関するメタデータを含んだ HttpRequest オブジェクトを生成します。それから Django は HttpRequest をビュー関数の最初の関数として渡し、適切なビューを読み込みます。あらゆるビューは HttpResponse オブジェクトを返す必要があります。

このドキュメントでは、HttpRequest と HttpResponse オブジェクトの API を説明しています。これは django.http モジュールにて定義されています。

昔のバージョンのほうがわかりやすいな。「Django は、システム全体にわたって、リクエストとレスポンスオブジェクトを使って処理状態を受け渡します。」と「Django は、システムを通じてステータスを渡すために、リクエストとレスポンスのオブジェクトを使います。」とじゃあ前者に軍配が上がる。そういうこともあるのか。

いやいやそうじゃなくて。最後の記述にモジュールが出てきた。モジュールとな?ということはファイルがあるということだ。ずーっとモヤモヤしてたこと。from django.urls import path とか from django.http import HttpResponse とかちょいちょい django が顔を出してくるけれど、本体はどこにあるんだろう?という疑問。 Djangoってwebフレームワークだから環境そのもので、こうして作業している場所全体が Djangoってやつなのかなぁ、となんとなく見過ごしてきたけれど、自分の認識は間違っていて、どうやらはっきりとしたモノがいるらしい。刑事は容疑者がどこにいるのかを聞き込みして足で探し回るのだ。そこで覚えたのがfind と locate コマンドである。

Django ってどこにあるの?

$ find ~/ -name django -type d

するとあっさり発見した。(pollsdirectory/pollsvenv/までが自分がつけた名前)

~/pollsdirectory/pollsvenv/lib/python3.6/site-packages/django
(以下略)

で、$ cd (略)/django で飛んで、さらにtree コマンドで調べたら…

django
├── __init__.py
├── __main__.py
├── __pycache__
├── apps
├── bin
├── conf
├── contrib
├── core
├── db
├── dispatch
├── forms
├── http
├── middleware
├── shortcuts.py
├── template
├── templatetags
├── test
├── urls
├── utils
└── views

そうか、お前たちここにいたのか!

続く。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3