PythonのvenvにDjangoをインストール

https://djangogirlsjapan.gitbook.io/workshop_tutorialjp/django_installation
venvはPython自体が持つ仮想環境作成機能。

仮想環境作成

$ python3 -m venv [[任意の名前]] 

仮想環境起動

$ source [[任意の名前]]/bin/activate

仮想環境のpipを最新に

$ pip install --upgrade pip

仮想環境のpipを最新に

$ pip install django

仮想環境終了

$ deactivate

HerokuにDjangoアプリをデプロイする

https://devcenter.heroku.com/articles/getting-started-with-python

  1. herokuにアカウントを作る。
  2. Heroku CLIをインストール
  3. runtime.txtrequirements.txtというファイルが必要らしい。

    $pip freeze > requirements.txt

    で作れる。

    $ heroku create

    上記コマンドを実行すると、

    :
    remote: ! Error while running ‘$ python manage.py collectstatic –noinput’.
    remote: See traceback above for details.
    remote:
    remote: You may need to update application code to resolve this error.
    remote: Or, you can disable collectstatic for this application:
    remote:
    remote: $ heroku config:set DISABLE_COLLECTSTATIC=1
    remote:
    remote: https://devcenter.heroku.com/articles/django-assets
    remote: ! Push rejected, failed to compile Python app.
    remote:
    remote: ! Push failed
    remote: Verifying deploy…
    remote:
    remote: ! Push rejected to caffca.
    remote:

    DisallowedHost at /
    Invalid HTTP_HOST header: ‘caffca.herokuapp.com’. You may need to add ‘caffca.herokuapp.com’ to ALLOWED_HOSTS.

DjangoでListViewを使う

from django.views import generic

class ArticlesView(generic.ListView):
    model = Article

上記のように定義すると

{% for article in object_list %}
{% endfor %}

テンプレート側では「object_list」という名前で渡される。

{% for article in article_list %}
{% endfor %}

model名がarticleだからなのか「article_list」という名前でも値が取れる。

DjangoでTemplateViewを使う

Djangoのドキュメント

例えばhttps://output.space/about/というページをDjangoで実装するとしたら、

urlpatterns = [
    path('about/',views.AboutView.as_view(),name="about"),
]

urls.pyに上記のようにurlpatternsを追加し、

from django.views import generic

class AboutView(generic.TemplateView):
    template_name = 'cafe/about.html'

views.pyにAboutViewを追加する。

DjangoでDBに初期データを登録する。

Djangoにはfixtureという、初期データを登録する機能が備わっている。XML、json、yaml形式のファイルを該当ディレクトリに配置してコメンドを打つとデータを挿入してくれる。今回はyaml形式を使う。

  1. アプリケーションディレクトリにfixturesというディレクトリを作る

    $ python manage.py startapp myapp

    で作られたディレクトリ直下に/fixtures/という名前のディレクトリを作成する。

  2. 初期データ(yamlファイル)を作る

    ここでは都道府県テーブルにデータを挿入すると想定してprefecture.yamlを作る。
    「.htm」と「.html」のように、「.yml」と「.yaml」という拡張子があるようだが「.yaml」を使う。

    - model: myapp.prefecture
      pk: 1
      fields:
        name: "北海道"
    - model: myapp.prefecture
      pk: 2
      fields:
        name: "青森県"
    

    中身はこんな感じ。
    「myapp」のprefectureモデルに挿入する。
    モデル名の定義はクラスなのでPrefectureと頭が大文字だが、小文字でOK。

  3. コマンドを入力して挿入する。

    manage.pyのある階層で

     $ python3 manage.py loaddata prefecture.yaml

    を実行。

    Installed 1 object(s) from 1 fixture(s)

    のように表示されれば成功。

    CommandError: Problem installing fixture 'prefecture': yaml is not a known serialization format.

    のようなエラーが出るかもしれない。

    これはPythonがyaml形式のファイルを認識できないためで、pyyamlというライブラリを追加する必要がある。

    $ pip3 install pyyaml

    のようにして追加すればOK。

Djangoの管理画面の見出しとかを変更する。

タイトル、ヘッダー

https://qiita.com/okoppe8/items/702dab51e4db5d0ed677

urls.py

from django.contrib import admin

admin.site.site_title = '<title>に表示される' 
admin.site.site_header = 'ヘッダーに表示される' 
admin.site.index_title = 'ログイン後のトップページ、ヘッダー直下に表示される'

モデル名

admin.site.register(Station)

admin.pyで上記のように記述すると、Django管理画面のメニューについかされ、管理画面上で追加削除更新が行えるようになる。
が、気になるのはメニューに「Station」とモデル名そのまま表示される点。
ここを「駅名」のようにわかりやすい名前で表示したい。

class Station(models.Model):
    class Meta:
        verbose_name = '駅名' #単数形
        verbose_name_plural = '駅名' #複数形