首页 > 代码库 > 使用django开发博客过程记录1——数据库设计

使用django开发博客过程记录1——数据库设计

1.数据库设计

2.插入测试数据

3.配置相关问题

 

1.数据库设计

数据库有简单的三张表:Article、Category、Tag以下是代码

 

 1 # -*- coding:utf-8 -*- 2 from __future__ import unicode_literals 3  4 from django.db import models 5  6  7 class Article(models.Model): 8     STATUS_CHOICES = ( 9         (d, Draft),10         (p, Published),11     )12 13     title = models.CharField(标题, max_length=64, unique=True)14     content = models.TextField(正文)15     create_time = models.DateTimeField(创建时间)16     last_modified_time = models.DateTimeField(修改时间)17     status = models.CharField(文章状态, max_length=1, choices=STATUS_CHOICES)18     abstract = models.CharField(摘要, max_length=64, blank=True, null=True, help_text=可选,如若为空将摘取正文的前64个字符)19     views = models.PositiveIntegerField(浏览次数, default=0)20     likes = models.PositiveIntegerField(点赞数, default=0)21     topped = models.BooleanField(置顶, default=False)22 23     category = models.ForeignKey(Category, verbose_name=分类, null=True, on_delete=models.SET_NULL)24     tags = models.ManyToManyField(Tag, verbose_name=标签集合, blank=True)25 26     def __unicode__(self):27         return self.title28 29     class Meta:30         ordering = [-last_modified_time]31 32 class Category(models.Model):33     name = models.CharField(类名, max_length=20)34     create_time = models.DateTimeField(创建时间, auto_now_add=True)35     last_modified_time = models.DateTimeField(修改时间, auto_now=True)36 37     def __unicode__(self):38         return self.name39 40 class Tag(models.Model):41     name = models.CharField(标签名, max_length=20)42     create_time = models.DateTimeField(创建时间, auto_now_add=True)43     last_modified_time = models.DateTimeField(修改时间, auto_now=True)44 45     def __unicode__(self):46         return self.name

 

2.插入测试数据

此时登录admin后台没有数据,于是想利用编写一个populate.py负责插入测试数据以下是代码:

 1 # -*- coding:utf-8 -*- 2 import datetime 3 import os 4 os.environ.setdefault(DJANGO_SETTINGS_MODULE, pureblog.settings) 5  6 import django 7 django.setup() 8  9 from apps.models import Article, Category, Tag10 11 def populate():12     tags = []13     cat_linux = add_cat(Linux)14     tag_ubantu = add_tag(ubantu)15     tag_redhat = add_tag(redhat)16     tags.append(tag_ubantu)17     tags.append(tag_redhat)18     add_article(标题1, p, cat_linux, tags)19 20 def add_article(title, status, cat, tags):21     a = Article.objects.get_or_create(title=title,22             create_time=datetime.datetime.utcnow(),23             last_modified_time=datetime.datetime.utcnow(),24             status=status)[0]25     a.content = 这是测试数据26     a.abstract = a.content[:64]27     a.category = cat28 29     for tag in tags:30         a.tags.add(tag)31     a.save()32     return a33 34 def add_cat(name):35     c = Category.objects.get_or_create(name=name, create_time=datetime.datetime.utcnow())[0]36     return c37 38 def add_tag(name):39     t = Tag.objects.get_or_create(name=name, create_time=datetime.datetime.utcnow())[0]40     return t41 42 if __name__ == __main__:43     populate()

3.配置相关问题

1)因为我的数据库使用的是mysql数据库,插入数据时可能会遇到字符编码同问题,以下链接是解决这个问题的链接:

  http://stackoverflow.com/questions/6065037/rails-mysql-encoding-issue-question-mysqlerror-illegal-mix-of-collations-l

 

使用django开发博客过程记录1——数据库设计