Brewfileを作成/Django Girlsがわかりやす過ぎて泣いた【92日目】(2018/09/14)
https://gyazo.com/d9129afde5ddb2353f5c23f3dea1f414
Porin.icon作業した内容を日々記録してるページだよん!
◆作業記録の目次
1. Mac環境構築用にBrewfileを作成する
2. Django Girlsがわかりやす過ぎて泣いた
◆作業時間のタイムトラッキング結果
https://gyazo.com/cfab71240c1dafe0029ed71f6ce14299
https://gyazo.com/ba4653756b6250620b10961ddb561811
https://gyazo.com/ea38e8d40023a4d62a667463b859b1d4
1. Mac環境構築用にBrewfileを作成する
◆理由
https://gyazo.com/0fcce28f1720698a2a286ce254986d26
Porin.iconどこでもすぐに環境セットアップできるようにするの憧れだったのです
◆セットアップ時は以下のものをインストール
code:terminal
$ xcode-select --install
$ sudo xcodebuild -license
$ brew tap caskroom/cask
$ brew tap homebrew/bundle
$ brew install mas
# 確認
$ brew doctor
$ brew cask doctor
$ brew --version
◆Brewfile作成
▼ 作成する
code:terminal
# Brewfile作成
$ brew bundle dump
# 確認
$ ls
Brewfile
適宜好みに編集する
code:terminal
$ vim Brewfile
ちなみにmasの実行時にAppleIDのパスワードを聞かれる
code:Brewfile
cask_args appdir: '/Applications'
tap 'caskroom/cask'
tap "heroku/brew"
tap "homebrew/bundle"
tap "homebrew/cask"
tap "homebrew/core"
tap "sanemat/font"
brew "bash"
brew "composer"
brew "fish"
brew "mas"
brew "php"
brew "python3"
brew "pipenv"
brew "redis"
brew "tree"
brew "heroku/brew/heroku"
brew "curl"
brew "ghq"
brew "gist"
brew "peco"
cask "docker"
cask "visual-studio-code"
cask "Karabiner"
cask "dash"
cask "flux"
cask "clipy"
cask "iterm2"
cask "virtualBox"
cask "vagrant"
cask "google-chrome"
cask "shiftit"
mas "GarageBand", id: 682658836
mas "iMovie", id: 408981434
mas "Keynote", id: 409183694
mas "Memory Cleaner", id: 518830108
mas "Numbers", id: 409203825
mas "Pages", id: 409201541
mas "Skitch", id: 425955336
mas "Todoist", id: 585829637
mas "TogglDesktop", id: 957734279
mas "VirusBarrier Scanner", id: 1200445649
mas "Xcode", id: 497799835
以下のコマンドでインストールできるようになる
code:terminal
$ brew bundle
終わったら以下のコマンドでクリーンアップする
code:terminal
$ brew cleanup
$ brew cask cleanup
▼ GitHubにGistとしてアップする
code:terminal
$ brew install gist
$ gist --login
brew bundle dump # Brewfileの生成
gist Brewfile # Gistにアップロード
GithubにアップしたGistを使用する場合は以下のコマンドでセットアップする
code:terminal
curl -O <GistのURL> && brew bundle
◆参考にしたもの一覧
◆次回やりたいこと
dotfilesをの共有方法
いろんなアプリの設定ファイルの共有方法
iTerm2, VSCode, Dash
https://gyazo.com/ea38e8d40023a4d62a667463b859b1d4
2. Django Girlsがわかりやす過ぎて泣いた
◆目次
◆理由
◆Django Girlsのページ
◆What will you learn during the tutorial? --このチュートリアルで作るもの
◆fishにPython3のパスとかの処理
◆Djangoのプロジェクトをスタートする
◆Djangoモデル設計
◆Django Admin
◆理由
もともとPythonのフルスタックフレームワークのDjangoやってみたかった
DjangoチュートリアルはDjango Girlsいいよってよく聞いてたのでそれをやることにした
DockerでDjango用の環境作るにも、一回Djangoやってみないとよくわからない部分あると感じたためまずはローカルでやってみる
◆Django Girlsのページ
https://gyazo.com/4df3b46be4eae6a83238af6ba1b7fc5e
作成過程ではあるもののYoutubeチャンネルもあるぽい
公式サイトも適宜みながらやる
◆What will you learn during the tutorial? --このチュートリアルで作るもの
Once you've finished the tutorial, you will have a small working web application: your own blog. We will show you how to put it online, so others will see your work!
It will (more or less) look like this:
チュートリアルでは以下のようなブログアプリを作成していく
デプロイまでやるぽい
https://tutorial.djangogirls.org/en/images/application.png
◆fishにPython3のパスとかの処理
fishインストールしてから設定してなかったせいでハマった。。。
code:terminal
$ set PATH $HOME/.pyenv/shims $PATH # パスは設定してた
$ eval (pyenv init - | source) # これが必要だった
$ source ~/.config/fish/config.fish # 設定の反映
◆仮想環境をつくりDjangoをインストール
▼ 作業用ディレクトリを作成
code:terminal
# 作成
$ mkdir django-girls
# 移動
$ cd django-girls
▼ pipenvで仮想環境を作成
最近はpipenvがマイブームなのでそれを使う
今回は対応してなかったりしたら怖いのでPython3.7ではなくPython3.6系を使う
code:terminal
$ pipenv --python=3.6
仮想環境に入る
code:terminal
$ pipenv shell
Djangoをインストール
code:terminal
$pipenv install django
※ちなみに仮想環境を削除するには該当ディレクトリで以下のコマンドをうつ
code:terminal
$ pipenv --rm
◆Djangoのプロジェクトをスタートする
▼ プロジェクトを作成する
以下のコマンドでDjangoプロジェクトを作成する
カレントディレクトリで開くので「.」を忘れないようにする
この場合mysiteというプロジェクトができる
code:terminal
$ django-admin startproject mysite .
django-admin.pyが必要なファイルやディレクトリを作成してくれる
ディレクトリ構成は以下のようになる
code:terminal
.
├── Pipfile
├── Pipfile.lock
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
▼ 設定を変更する
setting.pyを編集してく
タイムゾーンを変更
TIME_ZOMEのパラメータを日本用に変更する
code:setting.py
TIME_ZONE = 'Asia/Tokyo'
言語設定を変更
LANGUAGE_CODEを日本用に設定
code:setting.py
LANGUAGE_CODE = 'ja'
staticディレクトリへのパスを設定
STATIC_URLの下に新たにSTATIC_ROOTを作成し、staticディレクトリのパスを指定する
code:setting.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
ホストを指定する
DEBUG=Trueのとき、ALLOWED_HOSTSは空のリストになっていて、ホストはデフォルトでは['localhost', '127.0.0.1', '[::1]']で検証されるが、Django Girlsで使用するホスト名はこれと違うので変更する
code:setting.py
データベースのセットアップ
デフォルトで使えるsqlite3を使用する
すでにsetting.pyで以下のように設定されているとのこと
code:setting.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
データベースを生成するにはmanage.pyがあるディレクトリ下で以下のコマンドを実行する
code:terminal
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK
▼ Webサーバを起動する
manage.pyのあるディレクトリ下で以下のコマンドを実行することでサーバを起動できる
code:terminal
$ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
September 14, 2018 - 18:40:06
Django version 2.1.1, using settings 'mysite.settings'
Quit the server with CONTROL-C.
http://127.0.0.1:8000/にアクセスする
https://gyazo.com/99a213fbb4fc2e5add700e9ebd214f98
Porin.iconちゃんと日本語で表示された〜
待ってこのページ「<title>Django: 納期を逃さない開発者のためのWebフレームワーク</title>」ってなってて笑ったwwwPorin.icon
◆Django models
Djangoのモデルは特殊なオブジェクトで、データベースに保存する。
▼ アプリケーションを作成する
アプリケーションはプロジェクトディレクトリ内で別々に分けて作成するのがよい
アプリケーションを起動するにはmanage.pyがあるディレクトリ下で以下のコマンドを実行する
今回はblogという名前のアプリケーションを作成している
code:terminal
python manage.py startapp blog
そうすると以下のようにあらたにblogディレクトリが作成される
code:terminal
.
├── Pipfile
├── Pipfile.lock
├── blog
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── db.sqlite3
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
アプリケーション作成後、Djangoにそのアプリケーションを登録する必要がある。
setting.pyで設定する
INSTALLED_APPSのパラメータを編集
末尾にアプリケーション名を追加する
code:setting.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
]
▼ ブログポストモデルを作成する
blog/models.pyファイルでモデルと呼ぶオブジェクトを定義する
ここでブログポストを定義する
code:blog/models.py
from django.db import models
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
self.title
コードの説明
class Post(models.Model)について
モデルを定義(オブジェクトの一つ)
classはオブジェクトを定義する宣言
Porin.iconちょっと日本語にするのだるくなってきたから英語のままコピペする
models.Model means that the Post is a Django Model, so Django knows that it should be saved in the database.
properties(title, text, created_date, published_date, author)
define the type of each field (Is it text? A number? A date? A relation to another object, like a User?)
models.CharField – this is how you define text with a limited number of characters.
models.TextField – this is for long text without a limit. Sounds ideal for blog post content, right?
models.DateTimeField – this is a date and time.
models.ForeignKey – this is a link to another model.
__str__ method
In this scenario, when we call __str__() we will get a text (string) with a Post title
▼ 作成したモデルに沿ってテーブルをデータベース内に作成する
データベースにモデルを追加する
まず、Djangoにモデルの変更部分を登録する必要がある
ターミナル上で以下のコマンドを実行する(manage.pyがあるディレクトリで)
code:terminal
$ python manage.py makemigrations blog
Migrations for 'blog':
blog/migrations/0001_initial.py
- Create model Post
以下のコマンドで確認する
code:terminal
$ python manage.py migrate blog
Operations to perform:
Apply all migrations: blog
Running migrations:
Applying blog.0001_initial... OK
◆Django admin
▼ adminページの作成
さきほどモデリングしたブログポストのCRUDはDjango adminを使用する
Django adminについての詳細はこちら
blog/admin.pyを編集する
さきほど定義したPostモデルをインポートして使用する
モデルをadminページで表示するにはadmin.site.register(Post)でモデルを登録する必要がある
code:blog/admin.py
from django.contrib import admin
from .models import Post
admin.site.register(Post)
サーバを起動してhttp://127.0.0.1:8000/admin/を確認する
code:terminal
$ python manage.py runserver
https://gyazo.com/94ca143b6405729c95c31a4bab054227
▼ ログインする
ログインするには管理者ユーザを作成する必要がある
コマンドラインで以下のコマンドを実行する
今回の仮のパスワードめも:y9p10nu5iagc
code:terminal
$ python manage.py createsuperuser
ユーザー名 (leave blank to use 'ijumiho'):
メールアドレス: <メールアドレス>
Password:
Password (again):
Superuser created successfully.
ブラウザに戻ってユーザ名とパスワードを入力するとこんな感じの画面に飛べる
https://gyazo.com/f5b2aa2ed732a9179e813be96e0812dd
▼ 投稿してみる
https://gyazo.com/ce323a0dc78f0fb47c3a12aae3d5cb65
Porin.icon管理画面こんなに簡単につくれるのかよ....やべえな...
今日はこのくらいにして、続きはまた明日〜Porin.icon
◆感想
Porin.iconDjango Girls説明がめっちゃ丁寧でよい!!わかりやすい!!
ドキュメントもチュートリアルもわかりにくくて大変だったFlaskと全然違くて驚いてるPorin.icon
Porin.iconあと、今までの知識の積み重ねが少しずつ効果を発揮してて、詰まるところが少なくなってきた気がする
(了)
https://gyazo.com/ea38e8d40023a4d62a667463b859b1d4
感想や指摘などあったらどしどし連絡ください!!
もし万が一、気が向いたりして何かコメントをもらえたら超絶喜びます!!Porin.icon
投げ銭チャレンジ
Porin.icon以下みたい方、気が向いたら1円とかでもいいので投げてみてくだせえ」
「頑張ってるから応援してみよっかな〜」
「内容がちょっと役に立ったかも」
「なんか暇だから投げてみるブルジョワ気分を味わいたい」
◆投げる方法
Porin.iconアフィよりも投げ銭の方が好き派なのでKyashの投げ銭リンクを貼り付けています ▼ 39円送金してThank Youを送ってみよう
Porin.icon送金すると可愛いThank Youアニメーションが見れるよ
ここからKyashの送金画面に飛べます
https://gyazo.com/577c6c4bed5072aaaa19e788d6836ad5
Porin.iconここから送金すると見れるThank youアニメーション可愛いです。ほっこり癒されます
▼ QRコード(Kyashアプリで読み込んでね)
Porin.icon39円以外を投げたいよという方はこちらから
https://gyazo.com/df6e75970533e6c281b196aff4ba4ca9
https://gyazo.com/ea38e8d40023a4d62a667463b859b1d4