一、模型设计

任何一个产品,最开始应该就是设计数据模型,模型设计好一般就不会轻易去修改它了,但是在此处,我们暂时不考虑用户登录评论这些,只考虑博客展示需要的模型。对应的表应该为以下:
博客:标题 作者 分类 标签 创建时间 最后修改时间 摘要 正文 博客插图等
作者表: 其实也就是用户表,django有内置的User模型
分类: 分类名称
标签: 标签名称
基于以上的模型设计,建立以下的模型代码:
website/blog/models.py

from django.db import models
from django.contrib.auth.models import User  # 导入内建的User模型,之后方便用户认证等。博客就可以快速加入用户登录注册认证等功能。class Categorys(models.Model):category_name = models.CharField(max_length=128, verbose_name='博客分类')def __str__(self):return self.category_nameclass Meta:verbose_name = '博客分类'verbose_name_plural = '博客分类'class Tags(models.Model):tag_name = models.CharField(max_length=128, verbose_name='博客标签')def __str__(self):return self.tag_nameclass Meta:verbose_name = '博客标签'verbose_name_plural = '博客标签'class Article(models.Model):title = models.CharField(max_length=128, verbose_name='标题')auth = models.ForeignKey(User, verbose_name='作者')  # 作者和文章是一对多的关系,所以这边使用ForeignKey用于关联查询categorys = models.ManyToManyField(Categorys, verbose_name='分类') # 文章和分类是多对多的关系tags = models.ManyToManyField(Tags,verbose_name='标签')  # 标签和分类也是多对多的关系created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')update_time = models.DateTimeField(auto_now=True, verbose_name='最后修改时间')abstract = models.TextField(max_length=256, blank=True, verbose_name='摘要')body = models.TextField(verbose_name='正文')img = models.ImageField(upload_to='images', blank=True, null=True, verbose_name='博客插图')class Meta:verbose_name = '博客文章'verbose_name_plural = '博客文章'ordering = ['-created_time']

1 模型内部类Meta

class Meta用来使用类提供的模型元数据。例如排序选项ordering、数据库表名db_table、单数和复数名称verbose_name和 verbose_name_plural(verbose这两个元数据基本所有Django项目都这样固定写)。
在class Article中我们使用的元数据ordering =[’-created_time’],表明了将来取出文章列表时候,是以创建时间降序排列的。如果去掉‘-’则升序排列

2 一对多,多对多

作者和文章的关系是一对多的关系,Django中使用ForeignKey来关联。

from django.contrib.auth.models import User
auth = models.ForeignKey(User, verbose_name='作者')

这里使用了Django自带的User类,之后在写博客登录注册认证时候会详细介绍。

文章和标签以及分类是多对多的关系,Django中使用ManyToManyField。
(img的工作原理是存储图片的相对路径——第一个参数,与settings中静态文件目录路径搭配做到加载图片的效果,下一节模板渲染会用到js,css等静态文件,一起讲下怎么使用。)

3 blank 以及 null

在img中,可以看到有blank 和 null参数,这两个参数的区别在于null为数据库范围的,而blank是表单验证时候的。例如如果一个字段的 blank=True ,Django 在进行表单数据验证时,会允许该字段是空值。如果字段的 blank=False ,该字段就是必填的。
这里blank=True,null=True则对应表示,在写博客文章时候可以选择不上传博客插图,且在不上传博客插图时候,数据库img字段的值为null。如果null设置为False,则不上传博客插图时候,数据库img字段的值会为’’ 空字符串。

4. 生成迁移文件

模型设计好以后,就要和数据库对接生成相应的数据存储。第一次运行时候执行以下命令先生成迁移文件:
python manage.py makemigrations

可以看到在migrations文件目录下生成了一个0001_initial.py的迁移文件,可以自行打开看一下。(每当你修改数据模型以后都要重新生成一次迁移文件)

然后根据迁移文件,执行以下命令,生成我们的数据库表:
python manage.py migrate

二、创建超级用户

想要使用admin管理博客内容,需要进行admin的数据模型注册,然后创建超级用户

1. 模型注册。

from django.contrib import admin
from blog.models import Categorys,Tags,Articleclass ArticleAdmin(admin.ModelAdmin):list_display = ['title','auth','created_time','update_time','abstract']admin.site.register(Categorys)
admin.site.register(Tags)
admin.site.register(Article,ArticleAdmin)

这里list_display 中的字符名一定要要模型中的数据变量名相同。
具体干嘛用的其实就是admin管理页面要展示的内容。
除了list_display还有,list_filter详情使用和效果如下
http://www.pianshen.com/article/384761692/

2 创建超级用户

python manage.py createsuperuser

3. 登录管理页面

注册模型和超级用户创建完毕以后,可以启动项目查看admin界面:
http://192.168.1.113:8888/admin (这边是你设置的web入口)
如果你直接没有配置IP端口启动了项目,则admin界面就是默认的
127.0.0.1:8000/admin

python manage.py runserver



现在就可以用admin管理界面为你的博客添加文章,添加分类和标签了。添加以后可以去django项目的sqlite查询表是否有对应的数据。

三、配置使用mysql

以上都是使用的django自带的sqlite3,实际生产中我们一般都使用mysql,MongoDB,Oracle等。我们以mysql为例。

1. 使用mysql的准备配置

首先在mysql中创建项目需要的mysql数据库

接着在website/website/settings.py 中将默认的数据库配置成mysql;

DATABASES = {'default': {# 'ENGINE': 'django.db.backends.sqlite3',# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),'ENGINE': 'django.db.backends.mysql','NAME': 'website',  # 你的数据库名称'HOST': '127.0.0.1',  # 数据库主机'PORT': 3306, 'USER': 'root', 'PASSWORD': 'ljp310851649.', }
}

配置完以后为了让django能够使用mysql需要pip安装pymysql包,

同时在settings中加入以下代码:

import pymysql
pymysql.install_as_MySQLdb()

2. 重新执行迁移文件

因为数据模型没有发生变化,只是数据库发生了改变,所以重新执行一次迁移操作就可以了:

python manage.py migrate


再次创建超级用户,登录admin管理页面新增你的相关数据,然后查看mysql看是否添加成功。

python manage.py createsuperuser

总结:
这节主要讲了在项目环境搭建好以后,进行模型设计,数据库配置以及admin的应用注册和后台页面管理等,下一节开始讲一下用户展示的页面,主要包括以下内容吧:

  1. 静态文件的使用
  2. 模板继承
  3. 博客分页

git:
website-day02
https://github.com/syjzlee/Django-website-days

新手学习——用django搭建个人博客_day2相关推荐

  1. 10分钟利用django搭建一个博客

    以前老是听说ROR开发有多快多块,网上还有朋友为了证明这,专门制作了10分钟利用rails框架搭建一个简易博客的教程,最近学习django框架,觉得django给开发者的便捷也很多,心血来潮来写个10 ...

  2. Django搭建简易博客

    Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...

  3. Django搭建个人博客:用django-notifications实现消息通知

    凭借你勤奋的写作,拜读你文章的用户越来越多,他们的评论也分散在众多的文章之中.作为博主,读者的留言肯定是要都看的:而读者给你留言,自然也希望得到回复. 怎么将未读的留言呈现给正确的用户呢?总不能用户自 ...

  4. django项目转pyc_Python自动化运维系列:Django搭建小博客

    如何使用Django和Python怎么搭建一个小博客呢? 这是一个简单而困难的问题.简单的原因是,只要做过一次,基本上就能做到举一反三: 困难的原因是有没有用心和耐心去完成这个实验. 如果你成功了,那 ...

  5. 用django搭建个人博客(一)

    用django2.0搭建个人博客 博客网站的需求与规划 该个人博客为简单的入门示范网站,具有以下功能 项目名称为mblog 通过admin管理界面发帖.编辑以及删除贴文,且此界面支持markdown语 ...

  6. 新手小白零基础搭建个人博客(二)Hexo搭建

    之前已经给大家讲完了,如何准备一个阿里云服务器或者准备github代码托管,今天就给大家说说如何搭建hexo. 服务器用户请阅读1.3 github用户请阅读3 双管齐下用户请阅读1.2.3 1.本文 ...

  7. Django搭建个人博客(二)

    更换数据表mysql 上文说到编写好了我们的 model 模块,映射生成数据表,之前我们用的是Django 默认的数据库 sqlite3 ,这里我们更改一下使用 mysql. 我们在 navicat ...

  8. Django搭建简易博客教程(四)-Models

    原文链接: http://www.jianshu.com/p/dbc4193b4f95 Django Model 每一个Django Model都继承自django.db.models.Model 在 ...

  9. 新手小白零基础搭建个人博客(一)服务器篇

    搭建博客,第一步肯定就是要准备一个服务器了,除非你找到别人帮你代挂,这里给大家推荐阿里云的服务器.如果不想花钱,也可以使用Github进行代码托管,但是GitHub是国外服务器,读取速度肯定不如阿里云 ...

最新文章

  1. 51 执行远程命令(Paramiko)
  2. python packages limited ram_python import自己创建的框架下的子模块—pychram和cmd正确执行脚本的两种方法...
  3. 外部网络如何获取网口打印机的ip地址_网络打印机端口用名称好是还是IP好?...
  4. ES10 可以使用几个新特性
  5. leetcode911. 在线选举(二分法)
  6. java静态类堆栈_Java回归学习-面向对象内存分析-堆栈
  7. Go Hack 2017 报名开启:十月魔都约一场 Go 语言烧脑之战
  8. 2021年压力焊工作业考试题库
  9. sql 获取日期时分秒_sql2000 获取当前日期只要年月日,不要时分秒
  10. 松散四叉树+网格法实现
  11. OPENG 获取状态的一些枚举值
  12. MSDOS设置代码页
  13. 什么是DTU?DTU的作用是什么?
  14. 「占星术杀人魔法」 读后感
  15. arcgis制作瓦片地图_利用ArcGISDesktop制作【地图瓦片包(TPK切片包)】的技术流程及优化...
  16. python+VBA实现照片转Excel
  17. 解决:Import googleapiannotations.proto was not found or had errors
  18. Android手机一键Root原理分析(作者:非虫,文章来自:《黑客防线》2012年7月)
  19. 跑腿app开发软件需要具体哪些功能
  20. 成功解决This application failed to start because no Qt platform plugin could be initialized.

热门文章

  1. 原子操作(atomic operation)
  2. 戴尔服务器0xc0000001怎么修复,错误代码:0xc0000001蓝屏 解决方法
  3. 学界 | 读计算机博士的未来出路在哪里?
  4. 异类 不一样的成功启示录笔记以及读后感
  5. QQ影音自动下载字幕乱码
  6. 整理网上资料---C标准库值篇二 :标准库源码下载地址、标准库手册下载地址
  7. linux下静态编译mupdf,在Qt中调用Mupdf库进行pdf显示
  8. 计算机网络补考复习题答案
  9. 服务器系统和用户与组管理
  10. /includes/fckeditor/editor/filemanager/connectors/php/upload.php