PythonでWebアプリ開発03（DjangoでHello World!を表示させる）

前の記事: [PythonでWebアプリ開発（開発サーバ環境選定〜Django起動）](https://qiita.com/TechAngel/items/eadbcf784710839d7c00)

前回はローカル環境でDjangoのプロジェクトを新規作成し、サーバが起動するところまでの確認を行った。
今回は作成したプロジェクトの中に新しくアプリケーションを作成し、ミニマムな構成でページが表示できるところまでを確認する。

Djangoプロジェクト配下では複数のアプリケーションを管理することができる。
新規Webアプリ開発毎に毎回新規プロジェクトを作成する必要はなく、プロジェクト配下にアプリケーションを追加していくことができる。

プロジェクトディレクトリ配下でpython manage.py startapp <アプリ名>でアプリケーションを作成し、treeコマンドで階層を確認。
プロジェクトディレクトリ直下に<アプリ名>で新しくディレクトリが作成され、配下にファイル一式が含まれることを確認できる。


```
$ python manage.py startapp myHelloWorld
$ tree
.
├── db.sqlite3
├── manage.py
├── myDjangoPrj01
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   ├── settings.cpython-36.pyc
│   │   ├── urls.cpython-36.pyc
│   │   └── wsgi.cpython-36.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── myHelloWorld
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

4 directories, 17 files
```
- 余談: 自分の場合何か試しでファイルやディレクトリを作成する場合myxxxというようにmyをつけるクセがあります。プログラムが自動的に生成したものか、自分が名前を指定して生成されたものかあとから見て区別をするためです。自分のニックネームなどをつけてもいいかもしれません。あとからファイルやディレクトリを整理するときに役立ったりします。

この中でHello Worldを表示するのに編集が必要なファイルは下記の3ファイル。
（myHelloWorldはアプリ名、myDjangoPrj01はプロジェクト名）

- myHelloWorld/views.py
- myDjangoPrj01/settings.py
- myDjangoPrj01/urls.py

上にtreeコマンドで階層構造を示したが、編集対象ファイルに"←これを編集!!"を記入すると下記の通り。

```
$ tree
.
├── db.sqlite3
├── manage.py
├── myDjangoPrj01
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   ├── settings.cpython-36.pyc
│   │   ├── urls.cpython-36.pyc
│   │   └── wsgi.cpython-36.pyc
│   ├── settings.py    ←これを編集!!
│   ├── urls.py    ←これを編集!!
│   └── wsgi.py
└── myHelloWorld
    ├── __init__.py
    ├── __pycache__
    │   ├── __init__.cpython-36.pyc
    │   ├── admin.cpython-36.pyc
    │   ├── models.cpython-36.pyc
    │   └── views.cpython-36.pyc
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   ├── __init__.py
    │   └── __pycache__
    │       └── __init__.cpython-36.pyc
    ├── models.py
    ├── tests.py
    ├── views.py    ←これを編集!!

6 directories, 22 files
```

最初にviews.pyを編集。
オリジナル:

```py:views.py
from django.shortcuts import render
  
# Create your views here.
```
変更後:

```py:views.py
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def myFunk(req):
    return HttpResponse('My Hello, World!')
```
HttpResponseをimportして文字列をHttpResponse返すという内容を記述。

続いてプロジェクトディレクトリ配下にプロジェクト名と同じ名前のディレクトリが存在するが、その配下のmyDjangoPrj01/settings.pyを編集する.

オリジナル（33行目からを部分抜粋）:

```py:myDjangoPrj01/settings.py
INSTALLED_APPS = [ 
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
```
変更後:

```py:myDjangoPrj01/settings.py
INSTALLED_APPS = [ 
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myHelloWorld'
]
```
アプリ名を追記。

続いてプロジェクト配下のmyDjangoPrj01/urls.pyを編集。

オリジナル:

```py:myDjangoPrj01/urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
]
```
変更後:

```py:myDjangoPrj01/urls.py
import myHelloWorld.views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('myHelloWorld/', myHelloWorld.views.myFunk),
]
```
myHelloWorldはアプリ名、myFunkはviews.pyに追加した関数名を指定。

上記の通り３ファイルを編集をした後にサーバ描きURLにアクセスし、ブラウザに"My Hello, World !!"が表示されることを確認する。

- http://127.0.0.1:8000/myHelloWorld/

ちなみにmyDjangoPrj01/urls.pyを書き換えることでURLを変更することができる。

```py:myDjangoPrj01/urls.py
import myHelloWorld.views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('myHelloWorldxxx/', myHelloWorld.views.myFunk),
]
```
- http://127.0.0.1:8000/myHelloWorldxxx/

このことからmyHelloWorldxxxがURLのディレクトリ階層を指定し、myHelloWorld.views.myFunkがディレクトリパス実態を意味することがわかる。

次の記事: [PythonでWebアプリ開発04（DjangoでHello World!を表示した後にやること〜HTMLテンプレートに変数をセットする）](https://qiita.com/TechAngel/items/8305b6720b2cdc4b4270)