《Django By Example》讀書筆記 03

《Django By Example》讀書筆記 03

接下來我們要安裝python的一個模組

pip install pytz

關於時區使用的幾點想法:

  1. 如果你的網站可能有來自其它時區的,可能你要考慮這個問題。都是一個地區的話,還要看伺服器是否與使用者在一個地區,如果不在,也要考慮。
  2. 因此,基本上要考慮伺服器時區與使用者時區。伺服器時區可以配置在系統中,全域性生效。而使用者時區則與使用者相關,可以由使用者自已進行設定。
  3. 在生成相關時間物件時要加入時區的資訊,並在輸出時進行合適的轉換。

而pytz提供了建立某個時區物件的方法

在settings.py的 INSTALLED_APPS 設定中新增blog. 如下所示:

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
)

建立和應用遷移

在資料庫中建立一個表
這裡寫圖片描述

在blog的migrations資料夾,Django建立了0001_initial.py
在cmd輸入
python manage.py sqlmigrate blog 0001
會看到輸出如下資訊

BEGIN;
CREATE TABLE "blog_post" ("id" integer NOT NULL PRIMARY KEY
AUTOINCREMENT, "title" varchar(250) NOT NULL, "slug" varchar(250) NOT
NULL, "body" text NOT NULL, "publish" datetime NOT NULL, "created"
datetime NOT NULL, "updated" datetime NOT NULL, "status" varchar(10)
NOT NULL, "author_id" integer NOT NULL REFERENCES "auth_user" ("id"));
CREATE INDEX "blog_post_2dbcba41" ON "blog_post" ("slug");
CREATE INDEX "blog_post_4f331e2f" ON "blog_post" ("author_id");
COMMIT;

接下來同步一下資料庫,在cmd執行

python manage.py migrate

會看到以下輸出:

Operations to perform:
Apply all migrations: auth, contenttypes, admin, blog, sessions
Running migrations:
Rendering model states... DONE
Applying blog.0001_initial... OK

為models建立一個administration site

django.contrib.admin 已經包含在INSTALLED_APPS
建立一個超級使用者,執行

python manage.py createsuperuser

根據提示輸入使用者名稱密碼等資訊

Username (leave blank to use 'hunter'): whywhom
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.

Django 網站管理介面可以通過執行

python manage.py runserver

然後開啟站點:
http://127.0.0.1:8000/admin/
可以看到
這裡寫圖片描述
登入後
這裡寫圖片描述

group和user模組是Django的django.contrib.auth授權的一部分
點選user可以看到剛才建立的登入使用者

將自己的models加入到管理站點中

編輯admin.py
輸入以下程式碼

from django.contrib import admin
from .models import Post
admin.site.register(Post)

在瀏覽器reload一下網站
這裡寫圖片描述
在post右邊點選add
可以看到Django為自己新增的models動態生成的頁面
這裡寫圖片描述
編輯表單點選save
這裡寫圖片描述
這裡可以自定義模組的顯示
修改admin.py,如下所示

from django.contrib import admin
from .models import Post
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish',
'status')
admin.site.register(Post, PostAdmin)

進一步自定義

from django.contrib import admin
from .models import Post
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish',
'status')
list_filter = ('status', 'created', 'publish', 'author')
search_fields = ('title', 'body')
prepopulated_fields = {'slug': ('title',)}
raw_id_fields = ('author',)
date_hierarchy = 'publish'
ordering = ['status', 'publish']
admin.site.register(Post, PostAdmin)

這裡寫圖片描述

趁著加班寫到這裡吧,明天繼續