Help us understand the problem. What is going on with this article?

初めてのDjango開発

More than 3 years have passed since last update.

話題のPythonフレームワーク、Djangoを初めて使ってみた。
今回は公式のTutorialを参考にした。

参考:Django Documentation

Djangoのインストール

今回はvirtualenvを利用して、Django用に仮想環境を作成する(Pythonのバージョンは3.5.1)。

$ pyenv virtualenv 3.5.1 django

開発時に使用するディレクトリに移動して、今作った仮想環境をセットする。

$ mkdir django
$ cd django
$ pyenv local django

あとはpipを使ってDjangoをインストール。

$ pip install django


ちゃんとインストールできたか確認する。

$ python -c "import django; print(django.get_version())"
1.9.4

できたみたい。

Djangoプロジェクトの作成

Writing your first Django app, part1を参考に。

まずmysiteという名前でDjangoプロジェクトを作成する。

$ django-admin startproject mysite

プロジェクト名の後ろにパスを指定すると指定した場所に作成できるらしい(試していない)。

このコマンドを実行するとmysiteというディレクトリができた。

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

mysiteディレクトリに移動してサーバーを起動してみる。

$ python manage.py runserver

コマンドを実行したら、ブラウザでhttp://127.0.0.1:8000/にアクセス。
ちゃんと "Welcome to Django" ページが表示された(スクリーンショット撮るの忘れた)。

また、上記のコマンドのrunserverの後にポート番号もしくはIPアドレス:ポート番号と指定するとIPアドレスやポート番号を変更できる。

とりあえずCtrl-Cでサーバーを終了する。

Pollsアプリの作成

次はアプリを作っていく。
まずはアプリを作るための元を作成。
mysiteディレクトリで下記コマンドを実行。

$ python manage.py startapp polls


これでpollsという名前のディレクトリができた。

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

これから実際にコードを書いていきます。

いま作成したpollsディレクトリの中のviews.pyを下記のように変更。

polls/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

このファイルでlocalhost:8080/pollsにアクセスした時のビュー(見た目)を作成する(まだアクセスしても見れません)。
これを見るためにはURLconfというものが必要になるらしい。次はこれを作成します。

pollsディレクトリにurls.pyというファイルを新規作成。
以下のコードを記述する。

$ vim polls/urls.py
polls/urls.py
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

次に、pollsの1つ上の階層、mysiteにあるurls.pyを編集。

mysite/urls.py
from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]

5行目のinclude()は、他のURLconfファイルを参照するために使用するものみたい。

ここまでできたら再度サーバーを起動して確認。

$ python manage.py runserver

ブラウザでhttp://127.0.0.1:8080/pollsもしくはhttp://localhost:8080/pollsにアクセスする。
これでpolls/views.pyに記述した "Hello, world. You're at the polls index." が表示されれば成功。
チュートリアルには書いていないが、ここでhttp://localhost:8080/adminにアクセスすると、管理者のログイン画面が表示される。この辺については、次の「url()について」のregexで触れます。

とりあえずここでTutorial1は終わりです。
お疲れ様でした。

url()について

urls.pyで使用しているurl()について記述があったので理解できた範囲で書き記しておきます。

url()には4つの引数がある。

url(regex, view [,kwargs, name])

後ろ2つ(kwargs, name)はオプション。

regex

名前の通り正規表現。ここでURLパターンを指定する。
mysite/urls.pyの場合は、
r'^polls/'にマッチした時 → pollsのURLconfを参照
r'^admin/'にマッチした時 → admin.site.urlsを参照
という具合。

試しに、polls/urls.pyurl()を以下のように変更してみる。

polls/urls.py
    :
url(r'^test', views.index, name='index'),
    :

これで保存して再度サーバーを起動し、http://localhost:8080/pollsにアクセスすると404エラーが出る。
次に、r'^test'にマッチするような文字列(test01など)を先ほどのアドレスの後ろにつけてアクセスしてみる(例:http://localhost:8080/polls)。
すると、チュートリアルでやったように、きちんと文字列が表示された。

要するに、regexのパターンによってアドレスが決定される。

view

第1引数のregexにマッチした場合、この第2引数の関数が呼ばれる。この関数にはHttpRequestオブジェクトが第1引数に、regexから得られたすべての値が第2引数以降に与えられる。

HttpRequestオブジェクトが渡されるのはわかったけど第2引数以降がいまいちよくわからない。GETとかで渡されるパラメータが入るのでしょうか...
これからチュートリアルを進めるうちに理解できればいいな。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした