Django數據模型及管理后臺
啟動一個Django項目
安裝:
$ sudo -H pip install django==1.8.5
創建項目并運行:
$ django-admin startproject [project]
$ mv [project]/* [git folder]/
$ rm -rf [project]
$ cd [project]
加載初始數據 生成sqlite3數據庫
$ python manage.py migrate
運行服務器
$ python manage.py runserver
學會多留意終端輸出的信息
論壇的基本組成部分
- 用戶
- 板塊
- 文章
- 評論
- 消息
創建一個小應用(APP)
創建目錄結構:
$ python manage.py startapp [app]
在全局配置中 注冊應用:
在 [project]/setting.py 中的 INSTALLED_APPS 添加 [app]
-
注意:如果未注冊應用就運行服務會報錯:
no such table xxx_xxx
- 注冊應用后同步數據庫即可解決
- 未注冊的話,在同步時數據庫不用找到更新的內容。
定義數據模型
file: block/models.py
from django.contrib.auth.models import User # django默認用戶體系
from django.db import models
class Demo(models.Modle): # django的所有數據模型都要繼承這個類
# CharField 字符串列
example4char = models.CharField(max_lenth=30)
example4int = models.IntegerField()
# IntegerField 整數列 choices限制整數為1,2,后面是對1,2的描述
sex = models.IntegerField(chioces=((1, u"男"), (2, u"女")))
# ForeignKey 外鍵 從外部數據庫引入一個數據表
# owner的可能值是User里面的行
# owner 必須是User一個用戶
# owner_id 就是User的id的字段所有取值的可能
owner = models.ForeignKey(User, verbose_name="作者")
# 幾乎所有的數據庫表都應該都有這兩個字段
create_timestamp = models.DateTimeField(auto_now_add=True)
last_update_timestamp = models.DateTimeField(auto_add=True)
首期目標數據模型
板塊(Block):
名稱
描述
管理員創建時間戳
更新時間戳
同步 數據模型 到 數據庫
$ python manage.py makemigrations
$ python manage.py migrate
- makemigrations 是django對數據庫的改動做記錄
- migrate 對數據庫進行實際的修改
閱讀文檔
- 地址
The model layer --> models --> Field types - 兩個部分
Field的屬性 和 Field的類型
強大的Admin
自動生成管理后臺
操作
在總urls.py加入
admin.autodiscover()
在命令中創建一個超級管理員
$ python manage.py createsuperuser
Admin 管理我們的數據表
在 block/admin.py 中添加
from django.contrib import admin
from models import Block
admin.site.register(Block)
美化漢化我們的數據表
在 block/admin.py 中
from django.contrib import admin
from models import Block
class BlockAdmin(admin.ModelAdmin):
list_display = ("a", "a", "c", "d")
list_filter = ("e",) # 過濾器
search_field = ("f") # 搜索欄 不能搜索外鍵
admin.site.register(Block, BlockAdmin) # 在注冊時放在后面
漢化我們的數據表
from django.contrib.auth.models import User
from django.db import models
class Demo(models.Modle):
example4char = models.CharField(u"字符范例", max_lenth=30)
example4int = models.IntegerField(u"數字范例")
sex = models.IntegerField(u"性別", chioces=((1, u"男"), (2, u"女")))
owner = models.ForeignKey(User, verbose_name="作者")
create_timestamp = models.DateTimeField(auto_now_add=True)
last_update_timestamp = models.DateTimeField(auto_add=True)
def __unicode__(self):
return self.example4char
class Meta: # 元數據
verbose_name = u"模板"
verbose_name_plural = u"模板" # 復數
- 在 block/models.py 中
- 加上第一個參數說明,處理外鍵需要關鍵字參數verbose_name
- unicode 定義這個數據模型的名字說明
- Meta class 指的是整個表的特性或特征