上一篇文章分析了该博客项目的项目需求,后续将开始对各个功能逐一进行实现。本篇文章先看一下博客发帖功能。
继续回到博客首页的展示图:
根据展示图,首先分析发帖功能可能涉及到模型数据的:
1.帖子分类的模型(一对多关系,一个分类下可能有多个帖子);
2.帖子标签的模型(多对多关系,一个帖子可能对应多个标签,一个标签也可能对应多个帖子) ;
3.帖子模型(包含帖子的基本要素)。
上述分析完成与帖子相关的模型类,对应数据库相应的表结构,接下来继续分析主体帖子模型的一些基本信息要素:
•帖子的标题
•帖子的描述
•帖子的内容
•帖子的创建时间
•帖子的分类
•帖子的标签
针对帖子分类的模型和帖子的标签模型只需要关注名称主要信息即可。
按照上述的结构,在 post 模块下 model.py 中创建相关的 Model 数据:
# Create your models here.
# 帖子分类模型
class Category(models.Model):
cname = models.CharField(max_length=50, unique=True)
class Meta:
db_table = 't_category'
def __str__(self):
return u'Category:%s' % self.cname
# 帖子标签模型
class Tag(models.Model):
tname = models.CharField(max_length=50, unique=True)
class Meta:
db_table = 't_tag'
def __str__(self):
return u'Tag:%s' % self.tname
# 帖子模型
class Post(models.Model):
title = models.CharField(max_length=100, unique=True)
desc = models.CharField(max_length=100)
content = models.TextField()
create_time = models.DateTimeField(auto_now_add=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
tag = models.ManyToManyField(Tag)
class Meta:
db_table = 't_post'
def __str__(self):
return u'Post:%s' % self.title
以上 models.py 中创建好了模型数据,setting.py 中配置好数据库信息 (mysql 中需要先创建完成名为 blog 的数据库);
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'blog',
'USER': 'demo',
'PASSWORD': 'demo',
'HOST': '127.0.0.1',
'PORT': '3306'
}
}
接下来对 post 模块下的 models.py 中的数据信息进行迁移:
F:\python1110\blog>python manage.py makemigrations post
Migrations for 'post':
post\migrations\0001_initial.py
- Create model Category
- Create model Post
- Create model Tag
- Add field tag to post
F:\python1110\blog>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, post, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying post.0001_initial... OK
Applying sessions.0001_initial... OK
F:\python1110\blog>
数据迁移成功后,可在对应 mysql 数据库中查看相应的数据表:
创建完成对应的数据库表结构,接下来使用 Django 自带的后台系统来对相关数据表增加数据。
在 post 模块 admin.py 中增加模块配置信息:
from django.contrib import admin
from .models import *
# Register your models here.
admin.site.register(Category)
admin.site.register(Tag)
admin.site.register(Post)
此时我们运行项目,并访问本地 127.0.0.1:8000/admin 地址:
进入到了后台的登录系统,这里需要给 django 后台配置账号和密码。
F:\python1110\blog>python manage.py createsuperuser
Username (leave blank to use 'demo'): admin
Email address: demo@163.com
Password:
Password (again):
The password is too similar to the email address.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
配置完成之后,用刚刚配置的账号密码进行登录。
进入到 django 后台,需要在进行一些配置,让我们的后台界面看起来更加方便阅读。
1.setting.py 中配置语言和市区:
LANGUAGE_CODE = 'zh-Hans'TIME_ZONE = 'Asia/Shanghai'
2.对应 models.py 表名别称修改:
......
class Meta:
db_table = 't_category'
verbose_name_plural = u'类别'
......
class Meta:
db_table = 't_tag'
verbose_name_plural = u'标签'
......
class Meta:
db_table = 't_post'
verbose_name_plural = u'帖子'
3.post 模块下 init.py 修改后台模块展示名称:
# coding:utf-8
from django.apps import AppConfig
import os
default_app_config = 'post.PrimaryBlogConfig'
VERBOSE_APP_NAME = u"博客管理"
def get_current_app_name(_file):
return os.path.split(os.path.dirname(_file))[-1]
class PrimaryBlogConfig(AppConfig):
name = get_current_app_name(__file__)
verbose_name = VERBOSE_APP_NAME
4.修改对应字段名称:
# 帖子分类模型
class Category(models.Model):
cname = models.CharField(max_length=50, unique=True,verbose_name=u'类别名称')
class Meta:
db_table = 't_category'
verbose_name_plural = u'类别'
def __str__(self):
return u'Category:s%' % self.cname
......
对应字段名称参照上述修改即可。修改完成之后然后查看刷新后台页面对应查看:
这样方便在后台添加相关数据,接下来进行添加一些数据即可。
最后可以对后台帖子管理页面展示进行相关优化,同样修改 post 模块下的 admin.py 文件:
from django.contrib import admin
from .models import *
# Register your models here.
class PostModelAdmin(admin.ModelAdmin):
list_display = ('title', 'create_time')
admin.site.register(Category)
admin.site.register(Tag)
admin.site.register(Post, PostModelAdmin)
刷新后台管理页面即可
欢迎关注公众号,在聊天对话框回复「博客」获取源码地址以及其他 python 相关知识。