ローカルでも動くPython3+Djangoを使ったアップローダーなんかを作ってみる 2

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

ローカルでも動くPython3+Djangoを使ったアップローダーなんかを作ってみる 1 の続き。

※8/20 よりDJangoで作成するプロジェクト名を uploader から sites_project に変更

まだ小生もおぼつかないところが多いため、冗長な点、不足な点が多いと思うので、コメント等いただけたら幸いです。

setting.pyを編集

Djangoではプロジェクト内に共通して設定するものは sites/sites_project/sites_project/settings.py に設定されている。
現段階では触らなくてもよい項目も多いため、はじめに最小限に設定する項目を編集、追記していく。


    ・・・・・

    # 日本語の場合は jp ではなく ja に。
    LANGUAGE_CODE = 'ja'

    # タイムゾーンを設定。
    TIME_ZONE = 'Asia/Tokyo'

    # slashなしのURLをslashありにリダイレクトする設定を追記。
    APPEND_SLASH = True

    ・・・・・

    STATIC_URL = '/static/'

    # 静的ファイル(css、js、img等)をsites/staticディレクトリにおく設定を追記。
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, "static"),
    )

 

データベースをmigrate

まだデータベースを利用していないが、予めmigrateしておく。
ここらへんはデータベースを扱うようになってから分かる範囲で解説を入れる。

$ python manage.py migrate

 

https://localhost:8082/admin にアクセスした際にログインする管理者ユーザーを作成する。

 

管理者ユーザーの作成

$ python manage.py createsuperuser
Username (leave blank to use 'username'):
Email address: 
Password:
Password (again):
Superuser created successfully.

 

アプリケーションを作成

uploader というアプリケーションを作成する。
アプリケーションの作成は sites/sites_project/manage.pyを使う。

$ python manage.py startapp uploader

忘れがちだが、アプリケーションを作成したらアプリケーションがあることをsettings.pyを通じてDjangoに教える必要がある。sites/sites_project/sites_project/settings.pyのINSTALLEDD_APPSに追加しておく。

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'uploader',
)

 

views.pyの編集

作成したアプリケーションのディレクトリの中にviews.pyというファイルがある。(sites/sites_project/uploader/views.py)
これは、GETやPOSTなどのリクエストとテンプレートに渡したり、どのHTMLテンプレートファイルを使用するかを指定するなど、表示に関わるところをカバーする。

今回はとりあえずトップページだけ作成する想定で、次のように編集した。

sites/uploader/views.py

    # -*- coding: utf-8 -*-
    from django.shortcuts import render
    from django.http import HttpResponse
    from django.shortcuts import render_to_response
    from django.template import RequestContext

    def top_page(request):
        '''トップページ'''

        return render_to_response('uploader/top_page.html',  # 使用するテンプレートを指定
                                  {}, # テンプレートにデータを渡すときに辞書式で指定。
                                  context_instance=RequestContext(request))  # その他標準のコンテキスト

よくわからない場合は、現段階ではなんとなくコードを書くだけでいい。
簡単に解説すると、後のほうでurls.pyというところであるURLにアクセスが来た際に、views.pyの中に定義した関数を呼び出すようにする。
たとえば、https://localhost:8082/uploader/top にアクセスが来たらtop_page関数が呼び出される。
呼び出されたら、top_page.htmlテンプレートを開くんだなぁ、くらいにとらえておいてもらえれば十分。

 

URLディスパッチャー

今回は、https://localhost:8082/uploader というURLを作成してツールを公開したいとする。
DjangoにはURLディスパッチャーという、https://localhost:8082/配下に https://localhost:8082/admin や https://localhost:8082/uploader などのアプリケーションごとにURLを割り振ったり、
更にそのアプリケーションごとに、例えばhttps://localhost:8082/uploader/top や https://localhost:8082/uploader/uploadなどのURLを割り振るための機能がある。

sites/sites_project/sites_project/urls.pyは上の例では前者のアプリケーション単位でのURLを割り振る設定ファイルで、
後者の各アプリケーション事のurls.pyは、各アプリケーションごとに自分で作成する必要がある。

具体的には以下のように設定していく。

まずsites/sites_project/sites_prject/urls.py には、 uploader/ にアクセスが来た場合は uploader/urls.pyに記述されているようにディスパッチすると記述する。(追記の部分)

    urlpatterns = [
        url(r'^admin/', include(admin.site.urls)),
        url(r'^uploader/', include('uploader.urls', namespace='uploader')),   # 追加

    ]

今回は更にuploader/top のようにURLを作成したいため、
url()関数の2つ目の引数で、uploader/ へアクセスが来た場合はsites/sites_project/uploader/urls.pyを参照するように指定している。

sites/sites_project/uploader/urls.py

# -*- coding: utf-8 -*-
from django.conf.urls import patterns, url
from uploader import views

urlpatterns = patterns('',

    url(r'^/top$', views.top_page, name='top_page'),   
)