コピペ用!!おれ的Djangoのチートシート
自分用にメモしていたDjangoのチートシートをここで公開してみます。各ファイルごとによく使うものをまとめています。
models.py
テンプレ
# ブログ用のmodels.pyとして
from django.db import models
class Blog(models.Model):
title = models.CharField(max_length=30)
contents = models.TextField()
def __str__(self):
return self.title
class Meta:
verbose_name = "記事"
verbose_name_plural = "記事"
各Field型
コピペ用です。よく使う項目を詳細に解説した記事はこちらにあります。
# CharField(短い文字列)
title = models.CharField(max_length=20)
# TextField(長い文字列)
contents = models.TextField()
# IntegerField(整数値)
count = models.IntegerField()
# DateTimeField(日時)
time = models.DateTimeField()
# EmailField(メールアドレス)
email = models.EmailField()
# ForeignKey(一対多)
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="blog_set_of_this_category")
# ManyToManyField(多対多)
tag = models.ManyToManyField(Tag, related_name="blog_set_of_this_tag")
views.py
import部分
「どこからimportするんだったっけ?」という時のため 。
HttpResponse
from django.http import HttpResponse
render
from django.shortcuts import render
get_object_or_404
from django.shortcuts import get_object_or_404
get_list_or_404
get_list_or_404
from django.shortcuts import get_list_or_404
Qオブジェクト
from django.db.models import Q
F関数
from django.db.models import F
パラメータの取得
パスパラメータの取得
urls.pyで
path('<str:slug>’, views.your_func,name=’your-route’)とした時
def your_func(request,slug):
# hogehoge
クエリパラメータの取得
https://example.com/?q=your_queryの時
a = request.GET['q'] → "your_query"
ホスト、ドメイン、HTTPメソッドなどをrequestから取得
https://example.com/search/?q=django の時
request.scheme → "https"
request.get_host() → "example.com"
request.path → "/search/"
request.get_full_path() → "/search/?q=django"
request.build_absolute_uri() → "https://example.com/search/?q=django"
その他
request.method → "GET" or "POST" or etc,
request.META → REMOTE_ADDRなどたくさん入った辞書型
request.headers → ヘッダー
ORMまとめ
Blogというモデルが存在したとして。
絞り込みの仕方
通常のカラム
from .models import Blog
# pkがaのブログを一つだけ取得
a_blog = Blog.objects.get(pk="a")
# priceが100のブログを絞り込み
blogs = Blog.objects.filter(price=100)
# priceが100でないブログを絞り込み
blogs = Blog.objects.exclude(price=100)
#
複数条件で絞り込み
i: AND条件のとき
ii: OR条件のとき
Qオブジェクトを使う
一対多や多対多での絞り込みの時
ManyToManyFieldへのアクセス
対象のオブジェクトをblogとして取得(blog=Blog.objects.get(id=id))した後、多対多の関係にあるTagをアクセスさせる
追加
blog.tag.add(tag_obj)
取り除く
blog.tag.remove(tag_obj)
すべて取り除く
blog.tag.clear()
DjangoRestFrameworkの時
APIView
from rest_framework.views import APIView
from rest_framework.response import Response
class YourClass(APIView):
def get(self, request, format=None):
# do something
return Response("hogehoge")
def post(self, request, format=None):
# do something
return Response("hogehoge")
def put(self, request, format=None):
# do something
return Response("hogehoge")
def delete(self, request, format=None):
# do something
return Response("hogehoge")
urls.py
プロジェクト部分
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls), # 管理サイト用
path('your-path/',include('your_app.urls')), # 普通のアプリ用
]
アプリ部分
from django.urls import path
from . import views
app_name = 'your-app'
urlpatterns = [
path('',views.your_func,name='func'), # 関数を使う時(function-based view)
path('class',views.YourClass.as_view(),name='class'), # クラスを使う時(class-based view)
]
settings.py
日本語への対応
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
settings.pyにある変数を参照したいとき
from django.conf import settings
# 例:DEBUGの値を取りたいとき
debug = settings.DEBUG
PostgreSQLをデータベースとして使いたい時
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'データベース名',
'USER': 'ユーザー名',
'PASSWORD': 'パスワード',
'HOST': 'ホスト名',
'PORT': 'ポート番号',
}
}
serializers.py
admin.py
管理サイトでそのモデルを見れるようにする(=register)。
from django.contrib import admin
from .models import YourModel
admin.site.register(YourModel)
manage.pyのコマンド
以下はターミナルで
(DjangoBabyのサンプルコード等を使っている場合は以下のコマンドの前に docker compose run –rm web を付ける)
# プロジェクトの作成(早速manage.pyではないが)
django-admin startproject config
# アプリケーションの作成
python manage.py startapp your_app
# マイグレーションファイルの作成
python manage.py makemigrations
# migrate
python manage.py migrate
# 開発用サーバーを走らせる
python manage.py runserver
# adminサイトの管理ユーザを作る
python manage.py createsuperuser
# 静的ファイルをまとめる
python manage.py collectstatic
# キャッシュテーブルを作る
python manage.py createcachetable
# 対話モードに入る
python manage.py shell
ディスカッション
コメント一覧
まだ、コメントがありません