新手学习——用django搭建个人博客_day2

一、模型设计

任何一个产品,最开始应该就是设计数据模型,模型设计好一般就不会轻易去修改它了,但是在此处,我们暂时不考虑用户登录评论这些,只考虑博客展示需要的模型。对应的表应该为以下:
博客:标题 作者 分类 标签 创建时间 最后修改时间 摘要 正文 博客插图等
作者表: 其实也就是用户表,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_name
	
    class 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_name

    class 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,Article


class 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章