Django学習(Coursera Meta Back-End Developper course)
Djangoで環境構築とサーバー起動
1 virtualenvの設定
まず仮想環境を構築するためにvirtualenv(venv)をインストールする。
pip3 install virtualenv
homebrewでインストールしたPythonを使っているなら、下記のコマンドと思われる。
brew install virtualenv
次に設定仮想環境を構築する
virtualenv {任意のディレクトリ名}
2 仮想環境の適用
適用する場合
source {任意のディレクトリ名}/bin/activate
終了する場合(シンプル)
diactivate`
3 Djangoのインストール
pip3 install django
4 Djangoのproject設定
django-admin startproject {任意のproject名}
5 Djangoのapp設定
cd {任意のproject名}
python3 manage.py staratapp {任意のapp名}
6 DBの設定
python3 manage.py migration
7 サーバー起動
python3 manage.py runserver
そもそもなんのメモ
CouseraのMeta Back-End Developer Professional CertificateのためのDjangoのcourseでのメモです
Djangoでのルーティング
ゴールはこの画面表示
app内の実装
- app内のviews.pyにメソッドを書く
from django.urls import HttpResponse
def home(response):
return HttpResponse('hogehoge')
- app内にurls.pyを作る
from django.urls import path
from . import views # 同じディレクトリに存在するmoduleなのでfrom .
urlpatterns = [
path('', views.home, name="home"),
]
project直下の実装
- project内のurls.pyのurlPattersに、pathを追加する
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('myapp.urls')), # 追加
]
urlPatterns
ではなくurlpatterns
なので注意
- project内のsettings.pyのINSTALLED_APPSにappの情報を追加する
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp' # どっちか追加
'myapp.apps.MyappConfig', # どっちか追加
]
サーバー起動
親のprojectでコマンドを叩き起動
python manage.py runserver
出でくるlocalhostのリンクをクリックすれば、ゴールの画面が表示される
用語の整理
pip(パッケージ管理)
+ virtualenv(仮想環境構築)
= pipenv
ルーディングでpathパラメーターの渡し方
pathをappに渡す場合
ゴールはこの画面
urlの例
{ドメイン名}/drinks/mocha
appの実装
app内のviews.pyで、該当のfunctionのパラメーターにpathを追加する
from django.shortcuts import render
from django.http import HttpResponse
def drinks(request,drink_name):
drinkDic = {
'mocha':'type of coffee',
'tea':'type of beverage',
'lemonade' : 'type of refreshment',
}
choice_of_drink = drinkDic[drink_name]
title = f"<h2> {drink_name} </h2>"
return HttpResponse(f"<h2>{drink_name}</h2> " + choice_of_drink)
urls.pyに`任意のpathを渡す
from django.urls import path
from . import views
urlpatterns = [
path('drinks/<str:drink_name>', views.drinks, name="drink_name"),
]
用語の整理
-
app_name
=> どのurls.pyにあるurlpatters(namespace)かを示す -
url_name
=> urlPatternsのうちどのURLかを示す
app_nameとurl nameがわかればreverse()でurlを導き出せる
from django.urls import path
from . import views
app_name = 'blog' # URL名前空間
urlpatterns = [
path('post/<int:id>/', views.post_detail, name='post_detail'), # URL名
]
用語の整理
URLConf
はURLを設定するというDjangoにおける概念的な意味
ModelとMigration
ModelはDBのテーブル・スキーマと同じ構造を持ったクラス。Migrationは、データベーススキーマの変更を管理するためのバージョン管理システムとして機能する。ModelをベースにMigrationをし、テーブルの中身や構造を更新する。
CLIコマンドの整理
Migrationには下記のCLIコマンドが用意されている。
makemigrations
migrate
showmigrations
sqlmigrate
makemigrations
モデル(models.py)に加えた変更を元に、どのようにデータベースを更新すべきかを記述したスクリプトを自動生成する。
migrate
migration fileに基づいて、実際にDBのテーブルの構造を更新する。
showmigrations
migrationの経過を表示してくれる(git logのイメージ)
sqlmigrate
不明
実際のMigrationとModelの操作
最初のmigrate
まず初期段階としてmigrateを行う。runserverの際に元々警告がterminalに出てくるので、すでに行なっている場合は不要だし、Model作った後でも行う。
python manage.py migrate
このリストに記載された分のデフォルトのディレクトリが作られると思われる。作られる中身の詳細は不明。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Model作成
DBのスキーマとなるModelを作る前にappを用意し、myappに移動する(ここまでに用意済の場合は不要)。
python manage.py startapp app
cd myapp
model.pyを用意する(terminal使わなくても良い)。
touch models.py
Modelを作成する。
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=20)
email = models.EmailField()
phone = models.CharField(max_length=20)
Modelを作ったらadmin.pyにも追加する。これで管理画面上で操作できるようになる
from . models import Person
admin.site.register(Person)
CreateMigration
Modelからマイグレーションファイルが作成される。
python manage.py makemigrations
Migrations for 'app':
app\migrations\0001_initial.py
- Create model Person
Migration
再びMigrationすることでマイグレーションファイルを読みとり、DBが更新される
python manage.py migrate
Migrationの取り消し
migrationの取り消し、というか戻す方法について記載する。
まずはmigrationの履歴を確認
python manage.py showmigrations
どこまで戻すかを確認。コマンドの中で指定する。
0001まで戻る場合
python manage.py migrate app_name 0001
Pythonで使えるVScodeのExtension
- Pyhon Indent
- Djaneiro