WindowsでAIプログラミング

Pythonライブラリ:Django

コマンド

django-adminコマンド

django-admin startprojects <プロジェクト名>

manage.pyコマンド

Djangoアプリケーションの自動作成

python manage.py startapp <アプリケーション名>

開発サーバーの起動

python manage.py runserver

マイグレーション

マイグレーションファイルの作成

python manage.py makemigrations

マイグレーションの実行

python manage.py migrate

マイグレーション状況の確認

python manage.py showmigrations <アプリケーション名>

マイグレーションのロールバック実行(0001_initial適用直後まで戻す)

python manage.py migrate <アプリケーション名> 0001_initial

スーパーユーザーの作成

python manage.py createsuperuser

テストの実行

python manage.py test

インタープリタの実行

python manage.py shell

ビュー

クラス汎用ビュー

クラス名用途
RedirectViewリダイレクトに特化した処理
TemplateViewテンプレート表示に特化した処理
ListViewモデルオブジェクトの一覧を表示する
CreateViewモデルオブジェクトを作成する
DetailViewモデルオブジェクトの詳細を表示する
UpdateViewモデルオブジェクトを更新する
DeleteViewモデルオブジェクトを削除する
FormViewフォーム処理をする

オーバーライドする代表的なクラス変数

クラス変数対応するビュー用途使用例
template_nameRedirectView以外テンプレート名を指定するtemplate_name = “foo.html”
modelListView
CreateView
DetailView
UpdateView
DeleteView
モデルを指定する
※querysetを設定していない場合は必須
model = FooModel
paginate_byListView1ページに表示する件数を指定するpaginate_by = 10
querysetListView
CreateView
DetailView
UpdateView
DeleteView
テンプレートにクエリーセットを渡す
※get_querysetと違い、いつも同じクエリーの時に使える
※modelを設定しない場合は必須
queryset = FooModel.objects.filter(foo=bar)
form_classCreqteView
UpdateView
FormView
フォームクラス名を指定するform_class = FooForm
success_urlCreateView
UpdateView
DeleteView
FormView
処理成功時にリダイレクトさせるURLを指定する
※動的に変わるURLを指定する場合はget_success_urlメソッドを使う
success_url = reverse_lazy(“app:index”)
fieldsCreateView
UpdateView
ビューで使うフォームのフィールドを指定するfields = (“field1”, field2, )

オーバライドする代表的なメソッド

メソッド対応するビュー用途使用例
get_context_dateRedirectView以外テンプレートに辞書データを渡すdef get_context_data(self):
context = super().get_context_data()
context[“foo”] = FooModel.objects.get(user=self.request.user)
return context
get_querysetListView
CreateView
DetailView
UpdateView
DeleteView
テンプレートにクエリーセットを渡す
※querysetと違い、クエリーが都度変わるときに使える
def get_queryset(self):
foo = FooModel.objects.filter(user=self.request.user)
return foo
form_validCreateView
UpdateView
FormView
フォームバリデーションに問題がなかったときに行う処理を記述するdef form_valid(self, form):
messages.success(self, request, “成功しました”)
return super().form_valid(form)
form_invalidCreateView
UpdateView
FormView
フォームバリデーションに問題があったときに行う処理を記述するdef form_invalid(self, form):
message.error(self.request, “失敗しました”)
return super().form_invalid(form)
get_success_urlCreateView
UpdateView
DeleteView
FormView
処理成功時にリダイレクトさせるURLを指定するdef get_success_url(self):
return reverse(“app:detail”, kwargs={“pk”:self.kwargs[“pk”]})
deleteDeleteView削除処理時に何か処理を追加するdef delete(self, request, *args, **kwargs):
messages.success(self, request, “削除しました。”)
return super().delete(request, *args, **kwargs)
getRedirectView
TemplateView
ListView
CreateView
DetailView
UpdateView
DeleteView
FormView
ほかのメソッドには当てはまらないGET通信時の処理を記述するdef get(self, request, *args, **kwargs):
return HttpResponse(“Hello World”)
postRedirectView
CreateView
UpdateView
DeleteView
FormView
ほかのメソッドには当てはまらないPOST通信時の処理を記述するdef post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if not form.is_valid():
return HttpResponseRedirect(reverse_lazy(“app:index”))
return render(request, self.template_name, {“form”:form})

フォーム

代表的なフィールドクラス

フィールドクラスデフォルトのウィジェットデフォルトHTMLタグ
CharFieldTextInput<input type=”text”>
IntegerFieldNumberInput<input type=”number”>
ChoiceFieldSelect<select>
DateFieldDateInput<input type=”text”>
DateTimeFieldDateTimeInput<input type=”text”>
EmailFieldEmailInput<input type=”email”>
FileFieldClearableFileInput<input type=”file”>
ImageFieldCrearableFileInput<input type=”file”>

全フィールドクラスで使える代表的なフィールドオプション

フィールドオプション用途補足
required必須フィールドにするかどうかTrue(必須)またはFalse(任意)を設定。デフォルトはTrue。
labelフォーム画面のラベルを設定
widgetウィジェットを設定
validatorsバリデータを設定

独自バリデーションの追加方法

独自バリデーションの追加方法使い所
validatorsを使う異なるフォーム間やフォーム/モデル間で同じバリデーションを共有する。
「cleac_<フィールド名>」メソッドを使う単一フォーム内で単体フィールドバリデーションを行う。
「clean」メソッドを使う単一フォーム内でフィールドをまたがるバリデーションを行う。

モデル

代表的なモデルのフィールドクラス

フィールドクラスデータ型デフォルトのウィジェット補足
CharFieldTextInput・フィールドオプション「max_length」が必須
・短いテキスト向き
TextFieldTextarea長いテキスト向き
IntegerFieldNumberInput「-2147483648~2147483647」の範囲内で利用
PositiveIntegerFieldNumberInput「0~217483647の範囲内で利用
FloatFieldNumberInput浮動小数点数
DateFieldTextInput・「auto_now」オプションをTrueにすると、レコード更新のたびに現在日をセットする。
・「auto_now_add」オプションをTrueにすると、レコード新規作成時に現在日をセットする。
・「auto_now」と「auto_now_add」オプションはどちらか一方しか使えない。
DataTimeFieldTextInputDateFieldと同じ

全フィールドクラスで使える代表的なフィールドオプション

フィールドオプション用途補足
nullデータベースのNULL可否を設定デフォルトはFalse
blankフォームフィールドのブランク可否を設定デフォルトはFalse
choicesフォームの選択肢を設定以下はchoiceオプションを使った例。この場合、フォーム画面の選択ボックスには「選択肢A」「選択肢B」と表示されるが、データベースにはそれぞれ「a」、「b」と保存される。
class Example(models.Model):
SELECTION = ((“a”, “選択肢A”), (“b”, “選択肢B”),)
selection = models.CharField(max_length=1, choices=SELECTION)
defaultデータベースのデフォルト値を設定
uniqueデータベースのユニーク制約を設定
verbose_nameフィールド名を設定
validatorsバリデータを設定使い方はフォームのときと同じ

リレーションフィールドクラス

リレーションフィールドクラス関係
OneToOneField1対1
ForeignKey1対多
ManyToManyField多対多

on_deleteオプション

on_delete紐づけられたレコードを削除しようとしたときの動作
models.CASCADE一緒にレコードごと削除される
models.PROTECT削除できない
models.SET_NULLNULLがセットされる
(nullオプションがTrueである必要がある)
models.SET_DEFAULTデフォルト値がセットされる
(defaultオプションを設定しておく必要がある)
models.SET()任意の値がセットされる
DO_NOTHING何もしない

テンプレート

Djangoテンプレート言語

記法用途使用例
{{ <変数名> }}
{{ <変数名>.<キー名> }}
{{ <変数名>|<フィルタ> }}
変数を表示する。フィルタは変数の用事を制御する。{{ value}}
{{ valuel.key }}
{{ value|default_it_none:”” }}
{% <タグ名> %}条件分岐など多少複雑な処理を行う{% if object %}…{% endif %}
{# <コメント> #}コメントを記述する{# この記述は非表示 #}

デフォルトで利用可能な代表的変数

変数名格納されているデータ
userアクセスユーザー情報
object または
<小文字モデル名>
ビューから渡されるモデルオブジェクト(1レコード)
object_list_ または
「 <小文字モデル名>_lsit 」
ビューから渡されるモデルオブジェクトのリスト
messagesメッセージリスト
formフォームオブジェクト

代表的な組み込みフィルタ

フィルタ機能使用例
default変数の値がFalseに該当するときに表示する値を指定する{{ var|default:” }}
default_it_none変数の値がNoneに該当するときに表示する値を指定する{{ var|default_if_none:” }
linebreaksbr改行コード「\n」をHTMLの改行タグ「<br>」に変換する{{ var|linebreaksbr }}
safe自動エスケープを無効化する。テンプレートは自動エスケープがデフォルトで有効になっている。すなわち、以下の左側の5つの文字は右側の文字にデフォルトで自動的にエスケープされる。
< ⇒ &lt;
> ⇒ &gt;
‘(シングルクォート) ⇒ &#89;
“(ダブルクォート) ⇒ &quot;
& ⇒ &amp;
{{ var|safe }}
truncatechars先頭から数えて指定した文字数を超えた文字は切り詰める
urlizeURLとメールアドレスをHTMLのアンカータグ「<a>」でくくってクリック可能にする{{ var|urlize }}

代表的な組み込みタグ

タグ機能使用例
autoscape自動エスケープ機能を制御する{% autoescape on %}
{{ body }}
{% endautoescape %}
block子テンプレートの内容に置き換える
extends親テンプレートを拡張することを宣言する
for…empty…endforループさせる
if…elif…else…endif条件分岐させる{% if foo_list %}
処理1
{% elif bar_list %}
処理2
{% else %}
処理3
{% endif %}
loadカスタムテンプレートタグを読み込む
urlURLを逆引きする

form変数のオプション

オプション用途補足
as_p<p>タグで描くフィールドをくくって描画
as_tableテーブル形式で各フィールドを描画<table>タグは出力されないので開発者側で補っておく必要がある
as_ulリスト形式で各フィールドを描画<ul>タグは出力されないので開発者側で補っておく必要がある