Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

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の表示などを変更できる