実務で躓いたポイントのうち、一つの記事に起こすまでもないものをまとめました。
【実務テクニック集】Djangoの豆知識
アプリをappsディレクトリにまとめる
まずは格納先のディレクトリを用意します。
ここではappsの配下にuserディレクトリを作成しましょう。
mkdir -p apps/userさらに以下のコマンドを実行すれば、userディレクトリ内に新しいアプリが作成されます。
python manage.py startapp user apps/userさらにapps.pyをいじります。
もともとnameは単にアプリ名のuserとなっています。今回はアプリをappsディレクトリ配下に配置していることから、apps.userに変更しておきます。
from django.apps import AppConfig
class UserConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.user'最後に、Djangoプロジェクトに新しいアプリを追加したことをsettings.pyに伝えます。
INSTALLED_APPS = [
'apps.user.apps.UserConfig',
]アプリを個別にマイグレーションする場合は以下のコマンドになります。
python manage.py makemigrations userappsは入れずに実行することに注意です。
Flake8をVSCodeに適用する
以下をsettings.jsonに追記します。
"python.linting.flake8Enabled": true,djLintをVSCodeに適用する
以下をsettings.jsonに追記します。
"python.linting.djlintEnable": true,モデルを管理画面に表示させる
まずは管理画面に表示させるモデルを作成します。
今回はサンプルとしてユーザー名のみを格納するシンプルなモデルを作成してみました。
from django.db import models
class User(models.Model):
username = models.CharField(
verbose_name="ユーザー名",
max_length=100,
)上記を書き換えたらmakemigrationsとmigrateコマンドでデータベースとして登録しておきましょう。
続いて管理画面に表示するため、admin.pyに以下のような感じで追加します。
from django.contrib import admin
from .models import User
class UserAdmin(admin.ModelAdmin):
pass
admin.site.register(User, UserAdmin)これでuserモデルが管理画面に表示されるようになります。
前に実行したrunserverが残っている時の停止方法
コンソール上で以下のコマンドを実行することで、前回実行して残ってしまったrunserverを止めることができます。
pkill -f runserverdjangoサーバーのプロセス名はrunserverなので、pkillコマンドで終了できます。
モデル編
ForeignKeyのon_delete
Foreingkeyにon_deleteオプションをつけることで、参照先が削除された場合の挙動をカスタマイズできます。
| オプション | 説明 |
|---|---|
| CASCADE | 参照元が消える |
| PROTECT | 参照元は残る |
| RESTRICT | エラーを出す |
| SET_NULL | nullにする |
| SET_DEFAULT | 初期値を設定する |
| SET() | SETの引数に渡した値にする |
| DO_NOTHING | 何もしない |
ビュー編
requestオブジェクトのプロパティ
# HTMLメソッドを取得
method = request.method
# HTMLヘッダを取得
html_header = request.META
# HTMLボディを取得
html_body = request.data
# GETリクエストのクエリパラメータ
get_method = request.GET
# POSTリクエストのクエリパラメータ
post_method = request.POST
# 送信されたデータを取得する
recieved_data = request.FILES
# クッキーを取得
cookies = request.COOKIES
# セッションにアクセス
session = request.session
# ユーザーオブジェクトを取得(認証されていない場合はAnonymousUserとなる)
user = request.userTemplate Viewでモデルのデータを取り出す方法
urlpatternsでURLの交通整理をします。
urlpatterns = [
path('', HomeView.as_view(), name='home'),
]views.pyで以下のようなTemplateViewクラスを作成し、get_context_dataメソッドを作成しましょう。
class HomeView(TemplateView):
template_name = "index.html"
model = Blog
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['blogs'] = Blog.objects.all()
return contextHTMLとしてレンダリングしたいモデルのデータをcontextという辞書に渡せば、該当のデータがHTMLに渡されます。(この場合はindex.htmlにcontextが渡されます)
<div>
<h2 class="mb-3">ブログの記事一覧</h2>
{% for blog in blogs %}
<h3>{{ blog.title }}</h3>
<p>{{ blog.body }}</p>
{% endfor %}
</div>上記はBlogモデルにtitle, bodyフィールドを設定していた場合の例です。
これでHTML上に描画されているのが確認できると思います。
HTML編
URLテキストをリンクとして描画する
テキストの中でURLがあれば、リンクに変換する。
{{ object.text | urlize }}改行に意味を持たせる
1度の改行は<br>タグに、2度の改行は<p>タグに変換する。
{{ object.text | linebreaks }}現在の「年」を表示させる
current_yearという変数に現在の「年」を入れ、それをHTML上に描画します。
{% now "Y" as current_year %}
{% blocktranslate %}Copyright {{ current_year }}{% endblocktranslate %}参考サイト: Django Built-in template tags and filters
ループ
{% for user in user_list %}
<li>{{ user }}</li>
{% endfor %}まとめ
記事は随時更新していきます。

コメント