前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django学习_简易博客(二)

Django学习_简易博客(二)

作者头像
zx钟
发布2019-07-18 21:50:24
6330
发布2019-07-18 21:50:24
举报
文章被收录于专栏:测试游记

项目:基于某些设置项的Django安装结果; 应用程序:模型,视图,模版,URL的组合

应用程序和框架进行交互,并提供特定的功能,并可以在不同的项目中加以复用

创建项目

代码语言:javascript
复制
$ python manage.py startapp blog

新建项目blog

设计数据方案

代码语言:javascript
复制
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'

代码语言:javascript
复制
INSTALLED_APPS = [
    'django.contrib.admin',  # 管理站点
    'django.contrib.auth',  # 验证框架
    'django.contrib.contenttypes',  # 处理内容类型的框
    'django.contrib.sessions',  # 会话框架
    'django.contrib.messages',  # 消息机制框架
    'django.contrib.staticfiles',  # 管理静态文件的框架
    'blog.apps.BlogConfig',
]

数据库迁移

代码语言:javascript
复制
$ python manage.py makemigrations blog

数据库迁移

查看数据迁移SQL输出结果

代码语言:javascript
复制
$ python manage.py sqlmigrate blog 0001
代码语言:javascript
复制
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;

数据库迁移语句

数据同步

代码语言:javascript
复制
$ python manage.py migrate

数据同步

创建超级用户

代码语言:javascript
复制
$ python manage.py createsuperuser

创建超级用户

Django管理站点

使用刚创建的账户进入http://127.0.0.1:8000/admin/

admin

管理站点中添加模型

blog/admin.py文件下添加

代码语言:javascript
复制
from django.contrib import admin
from .models import Post

admin.site.register(Post)

添加模型

新建一条博客

普通展示

定制admin页面的显示方式

代码语言:javascript
复制
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
代码语言:javascript
复制
@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')

增加定制内容

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建项目
  • 设计数据方案
    • 激活应用程序
      • 数据库迁移
        • 查看数据迁移SQL输出结果
          • 数据同步
          • 创建超级用户
          • Django管理站点
            • 管理站点中添加模型
              • 定制admin页面的显示方式
              相关产品与服务
              数据传输服务
              腾讯云数据传输服务(Data Transfer Service,DTS)可帮助用户在业务不停服的前提下轻松完成数据库迁移上云,利用实时同步通道轻松构建高可用的数据库多活架构,通过数据订阅来满足商业数据挖掘、业务异步解耦等场景需求。同时,DTS 还提供私有化独立输出版本 DTS-DBbridge,支持异构数据库和同构数据库之间迁移和同步,可以帮助企业实现完整数据库迁移(如 Oracle)。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档