Djangoを使ってシステムの開発をしよう!! 文系学生がWindows10にインストールしてみた!!

##はじめに
インターン先でプログラミング勉強中の文系学生。

Pythonのことを調べていたら、**Django**というフレームワークのことを知った。
これはインストールしないと!!

##Djangoとは
Pythonに対応しているフレームワークらしい。
Webアプリケーションなど、一定のシステムを構築するときに、ある程度枠組みが完成しているから、簡単に作ることができる仕組みができているようになっているんだって。
まぁ、プログラマーには必須か。

##Djangoの導入
[Django Girls Tutorial](https://djangogirlsjapan.gitbooks.io/workshop_tutorialjp/content/)を参考に、導入していこうっと。

###Djangoをインストールする準備
まぁ、チュートリアルの最初のほうは、ある程度理解しているし、`Djangoをインストールしよう`から始めていくか。

まずは、ディレクトリを作って…

```
$ mkdir django
```

そのディレクトリに移動。

```
$ cd django
```

仮想環境を作って…

```
$ python -m venv(仮想環境の名前)
```

実行!!

```
$  venv\Scripts\activate
```

**できませんでした!!**

`このシステムではスクリプトの実行が無効になっているため、ファイルを読むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135
170) を参照してください。`だって。
まぁ、とりあえず、検索してみるか。

[[Power Shell] Power Shellでスクリプトファイルを実行できるようにする](http://windows-podcast.com/sundayprogrammer/archives/95)によると、Power Shellのセキュリティー対策が原因らしい。
今がどんな状況化を確認するには、`Get-ExecutionPolicy`でできる。
ちなみに、`Restricted`って表示された。

管理者でPowerShellを起動して、実行ポリシーを変更するのね。

```
$ Set-ExecutionPolicy RemoteSigned
```

を入力して、`[Y]はい(Y)`を打って、Enter!!

PowerShellを開きなおして、

```
$ cd django
$ myvenv\Scripts\activate
```

を打ってみると、
最初に`(myvenv)`が表示された!!
これでOK!!

###Djangoのインストール
Djangoをインストールするには、最新の`pip`が必要みたい。

```
$ pip install --upgrade pip
```

を打ってみると、`equirement already up-to-date`て出たから大丈夫だね。

それじゃあ、(2018/4/5時点で)最新の2.04をインストールするか。

```
$ pip install django==2.04
```

でDjangoのインストール開始!!

###Djangoでブログシステムを作成する準備
インストールが終わったら、Djangoで簡単なプロジェクトを作っていくか。

```
$ python myvenv\Scripts\django-admin.py startproject mysite(プロジェクト名) .
```

でプロジェクトを作れるみたい。

作れたら、サイトの情報を日本にしていくか。
エクスプローラーから、`mysite`にある`settings.py`を選択して、エディタで開く。
該当する行を変更する。

```
LANGUAGE_CODE = 'ja-JP'

TIME_ZONE = 'Asia/Tokyo'

USE_TZ = False
```

続いて、データベースのセット。
`sqlite3`を使うなら、`settings.py`で既にセットアップされているみたい。

```
$ python manage.py migrate
```

で`Apply all`や`Applying`がたくさん出てくればデータベースができてるらしい。

ちゃんと稼働しているかを確かめるには、

```
$ python manage.py runserver
```
でサーバーを動かして、`http://127.0.0.1:8000/`をブラウザで確認。

![スクリーンショット (2).png](https://qiita-image-store.s3.amazonaws.com/0/218398/5f996921-6f6c-b8da-704e-de3b730c1c24.png)

これでいいのかな?

###ブログシステムの作成
アプリケーションを作っていきますか。

```
$ python manage.py startapp blog
```

これでブログに関するプロジェクトができたね。
`settings.py`の`INSTALLED_APPS`に`'blog',`を追加。

続いて、`blog`ディレクトリの中にある`modeis.py`を開いて、すべての内容を削除。
その後、次の内容を記入。

```models.py
from django.db import models
from django.utils import timezone

class Post(models.Model):
    author = models.ForeignKey('auth.User')
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(
            blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title
```

内容が変更したことを、Djangoに伝えるために、

```
$ python manage.py makemigrations blog
```
と打つ。しかし…

```
TypeError: __init__() missing 1 required positional argument: 'on_delete'
```

__init__()なんて書いた記憶ないけどな…。
調べるか。
[TypeError: __init__() missing 1 required positional argument: 'on_delete'](https://teratail.com/questions/87245)によると、引数が足りてないみたい。
だから、`on_delete`を追加してくれとのこと。

エディタで編集したら、できたできた。

```
$ python manage.py migrate blog
```

じゃあ、

```
$ python manage.py migrate blog
Operations to perform:
  Apply all migrations: blog
Running migrations:
  Applying blog.0001_initial... OK
```

OK!!

###管理者の作成

次に、投稿したブログを追加したり、編集したり、削除したりするための設定をしていこう。
`blog`の`admin.py`を以下の内容に変えるのね。

```
from django.contrib import admin
from .models import Post

admin.site.register(Post)
```

そしたら、`$ python manage.py runserver`で`http://127.0.0.1:8000/admin/`をブラウザで開く。

![スクリーンショット (3).png](https://qiita-image-store.s3.amazonaws.com/0/218398/99799a0b-c456-1d9e-35d6-313dfed4821a.png)

(・∀・)ｲｲﾈ!!

さてさて、管理者を作っていきますか。

```
$ python manage.py createsuperuser
```

そうすると、以下のことを聞かれる。
まぁ、忘れなければ自由に設定していいでしょ。

```
Username: 
Email address: 
Password:
Password (again):
```

スーパーユーザーができたら、`$ python manage.py runserver`で`http://127.0.0.1:8000/admin/`に接続。
ログイン情報はさっきの通り。
![スクリーンショット (4).png](https://qiita-image-store.s3.amazonaws.com/0/218398/7a2e1302-4a40-f0a5-157d-7d2fead55c4e.png)

できた!!

##まとめ
今回はDjangoのインストールをしました!!
チュートリアルの途中だけど、ここまでくれば後は各々の自由にできるよね。
Djangoを使って、Pythonでシステムを構築していこう!!

##参考資料
[Django Girls Tutorial](https://djangogirlsjapan.gitbooks.io/workshop_tutorialjp/content/)-https://djangogirlsjapan.gitbooks.io/workshop_tutorialjp/content/
[[Power Shell] Power Shellでスクリプトファイルを実行できるようにする](http://windows-podcast.com/sundayprogrammer/archives/95)-http://windows-podcast.com/sundayprogrammer/archives/95
[TypeError: __init__() missing 1 required positional argument: 'on_delete'](https://teratail.com/questions/87245)-https://teratail.com/questions/87245