satomanotebook

プログラミング勉強で学んだことのアウトプットなんかだったり思ったことだったり

メモ

仮想環境作成

#仮想環境の名前
python3 -m venv XXX

#ディレクトリに移動し仮想環境にする
source XXX /bin/activate

#仮想環境を閉じる
deactivate

#仮想環境を削除
rm -r XXX


Django プロジェクト作成~最初にすること

#プロジェクトを作成( . を付ける)
 django-admin startproject XXX .

"""
setteing.pyのDIR「BASE_DIR / 'XXX'」
manage.pyと同じ階層にXXXを作成
INSERD_APPS「XXX.apps」

urls.pyにincludeをインポート
path('', include('XXX.urls')),
アプリにurls.pyを作成し、上記入力したもの以外をコピー

makemigrationsを実行 最期にアプリ名を指定できる
python3 manage.py makemigrations

migrateを実行 上の変更を反映
python3 manage.py migrate

スーパーユーザー
python3 manage.py createsuperuser

サーバー立ち上げログイン

admin.py
admin.site.register(XXX)
model.pyをimportする

def _str__(self):
    rturn self.titl


urls.pyアプリ
from .views import TodoList
urlpatterns =[
    path('list/', TodoList.as_view()),
]

views.py
from django.views.generic.list import ListView
from .models import TodoModel

class TodoModel(ListView):
        template = 'list.html'
        model = TodoModel


list.htmlを作成(BASE_DIRのあるところ(manage.pyと同じ階層))

{% for item in object_list %}
<ul>
<li>{{ item.title}}</li>
<li>{{ item.memo}}</li>
</ul>
{% endfor %}

object_listはListViewの機能でmodelの中身をitemに入れていく

ulrs.pyにpath('detail/<int:pk>', TodoDetail.as_view())追加
TodoDetailをimport

views.pyにclass TodoDetail(DetailView):
    template_name = 'detail.html'
    model = TodoModel 追加
DetailView をimport(listを削除)

templateディレクトリにdetail.htmlを作成
{{ object.title }} 追加
urls.pyのpatheに /<int:pk>を追加
"""

bootstrapで見た目を整える

"""
サイトにアクセスし、ドキュメントを見る。
スタートテンプレートからコピー
detail.htmlに貼り付け
必要なもの以外は削除
コードはbodyタグの中に書く

base.htmlのbodyタグの中に
    {% block header %}
    {% endblock heaader %}

    {% block content %}
    {% endblock content %}
を追加し
各htmlに
{% block content %}
{% for item in object_list %}
    {{ item.tile}}
    {{ item.memo}}
{% endfor %}
{% endblock content %}
を追加

detailの場合はobject.になる。forも書かない

bootstrapのcomponentのalertstからコピー

<div class="alert alert-success" role="alert">
   {{ item.tile}}
</div>
<div class="alert alert-success" role="alert">
   {{ item.memo}}
</div>

headerに
<div class="jumbotron jumbotron-fluid">
  <div class="container">
    <h1 class="display-4">Fluid jumbotron</h1>
    <p class="lead">This is a modified jumbotron that occupies the entire horizontal space of its parent.</p>
  </div>
</div>

contentに<div class="container"></div>
を追加for分の外
幅を調整する

サイトのボタンのコードをコピーしてitemの下に追加
itemに<p></p>追加

btn-primary btn-lg disabled" tabindex="-1"
  色  大きさ クリック    

list.html
class "alert alert-{{ item.priority }}"

model.pyに
CHOICE = (('danger','high'), ('warning ','normal'),('primary ','low'))
    priority = models.CharField(
        max_length=50,
        choices= CHOICE
        )
    dudate = models.DateField()
を追加してマイグレーションする

1→timezone.now→1→'danger'

"""
"""
ulrs.pyにpath('create/', TodoCreate.as_view()),
importにTodoCreate追加

viewsにclass TodoCreate(CreateView):
    template_name = 'create.html'
    model = TodoModel
 
fields = modelで書いた変数を書く

createviewもimport

create.htmlに
{% extends 'base.html' %}

{%block content %}
<form action="" method="POST">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="create">
</form>
{% endblock content %}
追加

ulrsにname=を追加
viewsにdjango.urls revers_lasyをimport
success_url = reverse_lazy('list')追加

DeleteView
urls.pyにTodoDleteをimportし
path('delete/<int:pk>', TodoDelete.as_view(), name='delete'),
追加

viewsにDeletViewをimport
class TodoDelete(DeleteView):
    template_name = 'delete.html'
    model = TodoModel
    success_url = reverse_lazy('list')
追加

delete.htmlにcreate.htmlのコードをコピー
form.as_pを削除しvalueをdeleteに変更

updatevie

ulrs
    path('update/<int:pk>', TodoUpdate.as_view(), name='update'),

views
class TodoUpdate(UpdateView):
    template_name = 'update'
    model = TodoModel
    fields = ('title', 'memo', 'priority', 'dudate')

update.html
{% extends 'base.html' %}

{%block content %}
<form action="" method="POST">{% csrf_token %}
{{ form.title }}
{{ form.memo }}
{{ form.priority }}
{{ form.dudate }}
<input type="submit" value="update">
</form>
{% endblock content %}

各ボタンをクリックしてリンクさきへ飛ぶ
list.htmlの<href>の"#"を
{% url 'detail' item.pk %}などに変更

"""