使用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.title
28
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.name
39
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, Tag
10
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 = cat
28
29     for tag in tags:
30         a.tags.add(tag)
31     a.save()
32     return a
33
34 def add_cat(name):
35     c = Category.objects.get_or_create(name=name, create_time=datetime.datetime.utcnow())[0]
36     return c
37
38 def add_tag(name):
39     t = Tag.objects.get_or_create(name=name, create_time=datetime.datetime.utcnow())[0]
40     return t
41
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

时间: 2025-01-03 23:26:02

使用django开发博客过程记录1——数据库设计的相关文章

使用django开发博客过程记录5——日期归档和视图重写

针对每条博客的观看次数我么是使用django的Mixin实现的: def get(self, request, *args, **kwargs): last_visit = request.session.get('last_visit') reset_last_visit_time = False if last_visit: last_visit_time = datetime.datetime.strptime(last_visit[:-7], "%Y-%m-%d %H:%M:%S&quo

Django开发博客(基础篇)

Django开发博客(基础篇)http://www.itmin.cn/archives/918

Django开发博客系统(04-常用字段与属性)

Django models中常用的字段类型 数值型 这些类型都是数值相关的. l  AutoField int(11). 自增主键,Django Model默认提供,可以被重写.完整定义是 id = models.AutoField(primary_key=True) l  BooleanFueld tinyint(1). 布尔类型字段,一般用于记录状态标记. l  DecimalField decimal. 开发对数据精度要求高的业务时考虑使用,比如做支付相关,金融相关.定义时需要指定精确到多

Django开发博客 入门篇

Django是神马? Django是一个开源免费的Web框架,使用Python编写.能够让你快速写出一个Web应用, 因为它包含了绝大部分的组件,比如认证,表单,ORM,Session,安全,文件上传,页面模板等,避免了重复造轮子. 官方网站:https://www.djangoproject.com/ 笔者写这篇教程的时候,最新版本是1.9 安装Django1.9 安装python虚拟环境 为了开发应用的时候使用单独的环境,最好是安装virtual environment, 这样有很好的独立性

Django开发博客- 三部曲

其实在django中实现一个功能只需要三个步骤即可,这里我姑且叫它三部曲. 这三部曲就是: 定义urls映射 定义views 定义templates 什么是URL? URL就算一个WEB地址,你在浏览器输入这个地址,然后浏览器返回相应的网页给你. 比如http://djangogirls.com是一个URL,而127.0.0.1:8000同样也是个URL,默认就是http协议的. Django中的URL工作原理 我们打开mysite/urls.py文件,会发现类似下面这样: 1234567891

Django开发博客系统(01-前言与需求分析)

原本是跟着视频学,无奈发现视频中用到的资源找不到,于是自己买了本书来进行学习,贴上JD链接.<Django企业开发实战> 我的开发环境是win10+python3.8+django3.0.4,而书上是在linux环境下进行开发的,= =(汗),先这样学下去吧,毕竟面向百度编程.写博客也是为了督促一下自己,毕竟在家里宅着容易学着学着就玩手机去了.. 书前面还有一些入门知识,这里我就直接跳到做项目的部分了. 目标是开发一个博客系统, 需求分析: 简单来说,博客分为两个部分:读者访问部分(用户端)和

Django开发博客- 部署

安装Git Git是一个被大量程序员使用的”版本控制系统”.此软件可以跟踪任何时间文件的改变,这样你以后可以随时召回某个特定版本. windows系统下面可以下载git-scm安装.除了第5步”Adjusting your PATH environment”, 需要选择”Run Git and associated Unix tools from the Windows command-line”(底部的选项).除此之外,默认值都没有问题. Linux系统的安装使用包管理器安装 123 sudo

Django开发博客系统(08-路由配置与views编写)

我们需要的页面: l  博客首页 l  博文详情页 l  分类列表页 l  标签列表页 l  友链展示页 但实际上,博客首页,分类列表页和标签列表页,本质上都是文章列表页,只有一些信息有差别.那么View大概就有三类: l  列表页: 根据不同的查询条件分别展示博客首页,分类列表页和标签列表页 l  博文详情页: 展示博文详情页 l  友链展示页: 展示所有友情链接 书上使用的环境是django1.11.1,而我使用的是3.0.4,所以路由我使用path来写,并且把路由分散开来写,让代码分工能明

Django开发博客系统(05-QuerySet的使用)

在Model层中,Django通过objects属性来提供数据操作的接口, 比如我们想要查询所有文章的数据,只需要 Post.objects.all() 他会返回一个QuerySet对象,当我们需要用到它时,它会去db中获取数据,注意是用到的时候才会去查,而不是定义的时候去查,原因是QuerySet要支持链式操作,如果每次执行都要查询数据库的话,会影响性能,假设我要查询所有文章中状态为正常的文章,有如下代码. posts = Post.objects.all() available_posts