项目:基于某些设置项的Django安装结果; 应用程序:模型,视图,模版,URL的组合
应用程序和框架进行交互,并提供特定的功能,并可以在不同的项目中加以复用。
$ python manage.py startapp blog
新建项目blog
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
class Post(models.Model):
# 帖子状态选项,后面会用到
STATUS_CHOICES = (
('draft', 'Draft'),
('published', 'Published'),
)
# 帖子标题,CharField数据库中会转换为VARCHAR
title = models.CharField(max_length=250)
# 简短的标记
# slug指有效URL的一部分,能使URL更加清晰易懂。
# 比如有这样一篇文章,标题是"13岁的孩子",
# 它的 URL 地址是"/posts/13-sui-de-hai-zi",后面这一部分便是 slug。
# 通过它构建有较好外观,SEO友好的URL
slug = models.SlugField(max_length=250,
unique_for_date='publish')
# 作者,外键
# 一个作者可以有多篇帖子
# 当作者被删除,相应的帖子也会被删除
author = models.ForeignKey(User,
on_delete=models.CASCADE,
related_name='blog_posts')
# 正文,TextField会转换为TEXT
body = models.TextField()
# 发布日期,timezone.now:以时区格式返回当前的时间
publish = models.DateTimeField(default=timezone.now)
# 创建时间,auto_now_add:当「创建」某个对象时,日期将被自动保存
created = models.DateTimeField(auto_now_add=True)
# 最后一次更新时间,auto_now:当「保存」某对象时候,日期将被自动保存
update = models.DateTimeField(auto_now=True)
# 帖子的状态,choices选择STATUS_CHOICES元祖中的某一个状态
status = models.CharField(max_length=10,
choices=STATUS_CHOICES,
default='draft')
class Meta:
# 对publish字段进行排列,由「-」确定为降序
ordering = ('-publish',)
def __str__(self):
# 增加人们可读对象表达方式
return self.title
INSTALLED_APPS
中添加'blog.apps.BlogConfig'
INSTALLED_APPS = [
'django.contrib.admin', # 管理站点
'django.contrib.auth', # 验证框架
'django.contrib.contenttypes', # 处理内容类型的框
'django.contrib.sessions', # 会话框架
'django.contrib.messages', # 消息机制框架
'django.contrib.staticfiles', # 管理静态文件的框架
'blog.apps.BlogConfig',
]
$ python manage.py makemigrations blog
数据库迁移
$ python manage.py sqlmigrate blog 0001
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, "update" datetime NOT NULL, "status" varchar(10) NOT NULL, "author_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE INDEX "blog_post_slug_b95473f2" ON "blog_post" ("slug");
CREATE INDEX "blog_post_author_id_dd7a8485" ON "blog_post" ("author_id");
COMMIT;
数据库迁移语句
$ python manage.py migrate
数据同步
$ python manage.py createsuperuser
创建超级用户
使用刚创建的账户进入http://127.0.0.1:8000/admin/
admin
在blog/admin.py
文件下添加
from django.contrib import admin
from .models import Post
admin.site.register(Post)
添加模型
新建一条博客
普通展示
from django.contrib import admin
from .models import Post
# admin页面普通展示
# admin.site.register(Post)
# admin页面定制展示
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status')
定制展示
增加定制内容
list_filter
search_fields
date_hierarchy
ordering
@admin.register(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')
增加定制内容