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 指的是整个表的特性或特征