Django Newbieの浅い知識ですが、備忘録として書いておきます。
はじめに
Djangoで新規プロジェクトを作成する際、コマンドラインに
$ django-admin startproject project_name
と入力することでプロジェクトを始めることが多いのではないか思います。
このコマンドによって、Django 1.8では以下のようなディレクトリレイアウトでプロジェクトが自動的に作られます。
project_name/
manage.py
project_name/
__init__.py
settings.py
urls.py
wsgi.py
Newbieの自分からしたら、最初からここまで準備してくれるのはとても助かるのですが、実はこれらの自動作成されたファイルなしでも、自分好みの初期状態でプロジェクトを作成する方法があるらしいのです。
いざ。
では、早速プロジェクトを作成していきましょう。
今回は一つのpythonファイルを使って、ブラウザ上に「Hello, World!」と出力してみたいと思います。
適当なディレクトリにhello.pyというファイルを作成します。
まずは、viewから
最初にviewを作成していきます。とは言ってもとても簡単で、
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello, World!')
と入力するだけです。requestを待ち受けて、文字列を返します。
これは本来はview.pyに記述する内容です。
URL Patterns
次に、urlpatternsの設定です。正規表現パターンによって、どのurlに対するrequestに、どのviewを返すかを決めていきます。
今回は、一つの文字列を表示するだけなので、urlのパターンは一つだけです。これもhello.pyに書き加えていきます。
...
from django.conf.urls import url
urlpatterns = {
url(r'^$', index),
}
settings
ここで、ROOT_URLCONFや、MIDDLEWARE_CLASSESなど、デフォルトプロジェクトではsettings.pyに記述されている重要な設定のうち最低限必要なものをhello.pyに加えていきます。
...
from django.conf import settings
settings.configure(
DEBUG = True,
SECRET_KEY = 'secretkey',
ROOT_URLCONF = __name__,
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
)
主なコードは以上です。どうでしょうか。デフォルトのプロジェクトと比べると心配になるくらい少ない記述ですが、これだけでもしっかりとDjangoのプロジェクトとして機能します。
このプロジェクトを起動するために、sysをimportをしておきます。
import sys
...
if __name__ == '__main__':
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
以上です。
コマンドラインで、
$ python hello.py runserver
と入力します。すると、デフォルトプロジェクトのmanage.pyから起動した時と同じ文字列がコマンドラインに現れて、http://127.0.0.1:8000/ にアクセスすると、予定通り「Hello, World!」と表示されていると思います。
何が嬉しいの?
さて、このように自分でスクラッチからプロジェクトを作成して何が嬉しいかというと、自分で作成したプロジェクトをテンプレとして、違うプロジェクトを作成することができるからです。
例えば、今作成したhello.pyを以下のようなディレクトリに置くとします。
hello/
hello.py
この場合、helloというのがプロジェクト名になります。
では、このhelloプロジェクトを基に新しいプロジェクトを作成してみようと思います。
helloプロジェクトと同じディレクトリで、以下のコマンドを入力します。
$ django-admin startproject hoge --template=hello
すると、Djangoのデフォルトのプロジェクトレイアウトではなく、
hoge/
hello.py
のようなレイアウトでプロジェクトがスタートします。
テンプレさえ作っておけば、作成するプロジェクトの規模、機能などによってレイアウトを自由に変えられるのです。
以上、また発見があれば投稿したいと思います。