查看原文
其他

Python自动化运维必看系列:Django搭建[进阶版]博客之数据篇

机智的安老师 Python自动化运维 2024-03-03

Hello,大家好!俺回来啦,最近比较忙,憋了很久的[进阶版]博客之数据篇,终于出来了!下面就开始为大家介绍下如何搭建进阶版博客的数据篇,主要涉及数据库和models模块。


            大纲            


一.  环境信息:

1.1 主机信息

        操作系统:windows 10

        主机IP地址:192.168.1.107/192.168.1.105

1.2 软件版本

        Python版本:3.7.0

        数据库版本:Mysql 8.0.15

1.3 pip模块

        Django版本:2.1.7

        PyMysql版本:0.9.3

二.  基本步骤

1.   快速安装Mysql数据库

2.   创建和配置[进阶版]博客

3.   微优化进阶版]博客之数据篇


01

快速安装Mysql数据库

1.  官网下载Mysql安装包

https://dev.mysql.com/downloads/mysql/


2.  解压安装包


3.  创建my.ini文件

内容如下:

[mysqld] 

basedir=F:\mysql\mysql-8.0.15-winx64

datadir=F:\mysql\mysql-8.0.15-winx64\data


4.  创建Mysql数据库


5.  启动Mysql数据库服务


6. 找到初始密码

目录:F:\mysql\mysql-8.0.15-winx64\data

文件:DESKTOP-SSCLB77.err

备注:在mysql8的根目录下会生成一个data文件夹,里面有个以.err 结尾的文件,初始密码就在这个文件里。


7.  修改root密码


8. 创建进阶版个人博客的数据库

F:\mysql\mysql-8.0.15-winx64\bin>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.15 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database blog;
Query OK, 1 row affected (0.06 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| blog               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.03 sec)

mysql> exit
Bye



02

创建和配置[进阶版]博客项目

1.  创建pyblog项目


2.  创建APP(blog)



3.  查看此时的目录结构


4.  配置settings.py

4.1  添加主机的IP地市

将 
ALLOWED_HOSTS = []

改为如下:
ALLOWED_HOSTS = ['192.168.1.107','192.168.1.105']


4.2  添加APP(blog)模块


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

改为如下:
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
]


4.3  修改语言和时区


LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'

改为如下:
ANGUAGE_CODE = 'zh_hans'
TIME_ZONE = 'Aisa/Shanghai'


5.  测试网站的IP和端口是否OK

        

显示安装成功,祝贺!    


6.  settings.py配置Mysql数据库


7.  创建中介文件


8.  models.py添加博客表

from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse

class Category(models.Model):
    name = models.CharField(max_length=128,unique=True)

    def __str__(self):
        return self.name

class Tag(models.Model):
    name = models.CharField(max_length=128,unique=True)

    def __str__(self):
        return self.name

class Blogcontent(models.Model):
    title = models.CharField(max_length=128)
    author = models.CharField(max_length=128)
    image = models.ImageField(upload_to='blog_image',null=True,blank=True)
    body = models.TextField()
    abstract = models.TextField(max_length=256,null=True,blank=True)
    visitnum = models.PositiveIntegerField(default=0)
    category = models.ManyToManyField('Category')
    tags = models.ManyToManyField('Tag')
    created_time = models.DateTimeField(auto_now_add=True)
    modifyed_time = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

    def increase_visiting(self):
        self.visitnum += 1
        self.save(update_fields=['visitnum'])

    class Meta:
        ordering = ['-created_time']


9.  创建数据库和同步Django间的中介文件

执行"python manage.py makemigrations blog",让此模型生效


执行“python manage.py migrate”,同步更新数据库内容。


10.  启动 admin 的管理界面


1)打开网页http://192.168.1.105:8000/admin/,登陆!

2)填写信息


3)查看文件的概要情况


03

微优化[进阶版]博客之数据篇

管理页面目前是使用英文显示表名,能否用中文显示表名呢?当然啦,不是说英文不OK!只是我们在管理页面操作时,能不能为他们加上别名呢?那样会为我们高效管理,那下面就开始为大家讲解下吧。


1.  修改models.py

1from django.db import models
2from django.contrib.auth.models import User
3from django.urls import reverse
4
5class Category(models.Model):
6    name = models.CharField('分类',max_length=128,unique=True)  
7
8    def __str__(self):
9        return self.name
10
11    class Meta:
12        verbose_name = '博客分类'
13        verbose_name_plural = verbose_name
14
15
16class Tag(models.Model):
17    name = models.CharField('标签', max_length=128,unique=True)
18
19    def __str__(self):
20        return self.name
21
22    class Meta:
23        verbose_name = '博客标签'
24        verbose_name_plural = verbose_name
25
26
27class Blogcontent(models.Model):
28    title = models.CharField('文章标题',max_length=128)
29    author = models.CharField('作者',max_length=128)  
30    img = models.ImageField(upload_to='blog_image',null=True,blank=True,verbose_name='博客配图')
31    body = models.TextField('正文')
32    abstract = models.TextField('摘要',max_length=256,null=True,blank=True)
33    visitnum = models.PositiveIntegerField('访问量',default=0)              
34    category = models.ManyToManyField('Category',verbose_name='博客分类')   
35    tags = models.ManyToManyField('Tag',verbose_name='标签')                
36    created_time = models.DateTimeField('创建时间',auto_now_add=True)
37    modifyed_time = models.DateTimeField('修改时间',auto_now=True)
38
39    def __str__(self):
40        return self.title
41
42    def increase_visiting(self):
43        self.visitnum += 1                                                           
44        self.save(update_fields=['visitnum'])                                        
45
46    class Meta:
47        ordering = ['-created_time']
48        verbose_name = '博客正文' 
49        verbose_name_plural = verbose_name


1.1  重点代码详解

1)第27行  class Blogcontent(models.Model) 定义表名。

2)第28行  title = models.CharField('文章标题',max_length=128)  定义该表名的列为title,字符串长度为128,中文显示“文章标题”。

3)第30行  img = models.ImageField(upload_to='blog_image'  图片类型,上传的图片文件夹在项目根目录的blog_image目录。

4)第32行  abstract = models.TextField为文本框。

5)第33行  visitnum = models.PositiveIntegerField  该列为自增长列。

6)第34行  category = models.ManyToManyField('Category...  该列引用Category表,并且是多选。

6)第36行  created_time = models.DateTimeField('创建时间',auto_now_add=True)

时间类型,以当前时间为准。

7)第47行  ordering = ['-created_time']  该表显示顺序,以创建时间倒序排列。

8)第48行  Blogcontent表在管理页面显示表名"博客正文"。


2.  查看管理页面

管理页面原来显示的是英文表名,现在显示为中文表名


总结

Django架站数据篇,首先数据库的模型要先规划好,其次model模块跟着表结构走,一般就不会有什么问题。

——————我是安老师下期预告的分割线——————

其实,Django架站数据篇并不算很难,难的是网址的对应和委派,想要玩的更溜一点,前端页面也搞起来。那下节分享就为大家介绍如何将数据在前端显示出来,老铁们敬请期待。最后,非常感谢大家的阅读,谢谢!是你们的不断地关注,给与我莫大的动力,非常感谢!



关注公众号 : python自动化运维


继续滑动看下一个

Python自动化运维必看系列:Django搭建[进阶版]博客之数据篇

机智的安老师 Python自动化运维
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存