django備忘録1
参照サイト
try-django-1.8 というjustinさんのサイトを参考に学習を進めています。 https://www.youtube.com/watch?v=KsLHt3D_jsE
markdown記法の備忘録用のリンク Markdown記法 チートシート - Qiita
djangoをinstallしてからやること
- startproject → migrate →createsuperuser → runserver → admin サイトが開ける startapp 'app名' → appディレクトリの完成 views.py の設定 引数は必ず、request (requestは、特定のurlを開いた時に、urls.py→views.pyに送られるサイト訪問者の情報とかのこと)GETは、情報の送信方法とかね。
views.pyの設定の基本
views.py
def home(request): return render(request, "home.html",{}) (request(固定)、"template名", {context})
urls.py を設定
- requestの送付先が、viewsの関数名になるように設定する。
- 'url(r'^home/$', 'trydjango18.views.home', name='home')'の場合、127.0.0.1:8000/home/ にアクセスした時は、'trydjango18.views.home'に行くという意味。
template, BASE_DIR, その他諸々の設定のために、settings.pyを設定
- BASE_DIR= rootディレクトリの場所を表す
- BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(file))) の場合は、settings.py の上の階層の上の階層がroot directory (project directoryともいうのかな)
- つまり、settings.py が、以下の場合、 src -trydjango -settings.py
base_dir は、srcになり、例えば、
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
みたいな感じで、データベースを設定すると、src に、db.sqlite3 がつくられる。
- LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
INSTALLED_APPS に、'app名'を加える app名が、newsletter の場合は、'newsletter', ※こうしないと、django.template が、探してくれない。
appディレクトリに、templatesディレクトリを作成(django.template.loaders.app_directories.Loaderが自動でtemplatesのディレクトリを探してくれる。) newsletter
templates
- home.html
別のやり方で、templatesをsrc(root dir)に作る場合は、
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, "templates")],
という感じで、TEMPLATESのDIRを指定する。↑は、srcのtemplatesディレクトリを参照するということで、os.path.joinは、合わせるということなので、src/templates という意味になると思う。
- ちなみに、
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, "templates"),"/Users/yassy/Desktop/dailydj/dj160922/src"],
というように、参照DIRは、2つ選べる
models.py を設定
https://docs.djangoproject.com/ja/1.10/ref/models/fields/ などを参照に設定
class SignUp(models.Model): email = models.EmailField() full_name = models.CharField(max_length=2000, default='',blank=True,null=True) timestamp = models.DateTimeField(auto_now_add=True,auto_now=False) update = models.DateTimeField(auto_now_add=False,auto_now=True) def __str__(self): # python2 では、__unicode__ return self.email
STR は、連結リストの表示、要は、djangoのadminのリストのタイトルになるところ?
admin.pyの設定
from django.contrib import admin from .models import SignUp #. modelsは、admin.pyと同じ階層にあるmodels.py という意味 この方がsmartと言われている。 admin.site.register(SignUp) #admin.site.register(関数名)でOK!
- admin.pyのさらなる変更
from django.contrib import admin from .models import SignUp class SignUpAdmin(admin.ModelAdmin): list_display = ["__str__", "timestamp", "updated"] class Meta: model = SignUp admin.site.register(SignUp, SignUpAdmin) #signUpadminも継承するように気をつける
という感じで、Adminの表示などを変更できる
- djangoのadminのカスタマイズについては、以下を参照 https://docs.djangoproject.com/ja/1.10/ref/contrib/admin/