【Django】开发个人博客系统【1】

使用Django开发个人博客系统,博客系统包括用户(博主)注册和登录、博主资料信息、图片墙功能、留言板功能、文章列表、文章正文内容和Admin后台系统。

1. 项目架构设计

下一步将上述设置写入Django的配置文件settings.py,当Django运行的时候能自动加载相应的功能应用。

将项目应用account、album、article和interflow写入配置属性INSTALLED_APPS,并在配置属性MIDDLEWARE中添加中间件LocaleMiddleware,使Admin后台系统支持中文语言,配置代码如下:

python 复制代码
# myblog的settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'article',
    'album',
    'account',
    'interflow',
]
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    # 添加中间件LocaleMiddleware
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

然后连接sql server数据库:

具体连接参考其他博客。

python 复制代码
pip install mssql-django==1.2
pip install pyodbc django-pyodbc-azure

配置:

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'blogdb',  # 数据库名称
        'HOST': '127.0.0.1',  # 数据库地址,本机 ip 地址 127.0.0.1
        'PORT': 1433,  # 端口
        'USER': 'bloger',  # 数据库用户名
        'PASSWORD': '123456',  # 数据库密码
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}
python 复制代码
pip install Pillow
python 复制代码
# account的models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
    name=models.CharField('姓名',max_length=50,default='匿名用户')
    introduce = models.TextField('简介', default='暂无介绍')
    company=models.CharField('公司',max_length=100,default='暂无信息')
    profession=models.CharField('职业',max_length=100,default='暂无信息')
    address=models.CharField('住址',max_length=100,default='暂无信息')
    telephone=models.CharField('电话',max_length=11,default='暂无信息')
    wx = models.CharField('微信', max_length=50, default='暂无信息')
    qq = models.CharField('QQ', max_length=50, default='暂无信息')
    wb = models.CharField('微博', max_length=100, default='暂无信息')
    photo=models.ImageField('头像',blank=True,upload_to='images/user/')
    # 设置返回值
    def __str__(self):
        return self.name

继续配置:

python 复制代码
# 配置自定义用户模型MyUser
AUTH_USER_MODEL = 'account.MyUser'
STATICFILES_DIRS = [BASE_DIR / 'publicStatic']
# 设置媒体资源的保存路径
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'

项目应用album使用模型AlbumInfo存储图片墙的图片信息,它设有外键字段关联模型MyUser,与模型MyUser组成一对多的数据关系,使每个用户(博主)的图片墙只能显示自己上传的图片信息。我们在项目应用album的models.py中定义模型AlbumInfo:

python 复制代码
# album 的models.py
from django.db import models
from account.models import MyUser

class AlbumInfo(models.Model):
    id = models.AutoField(primary_key=True)
    user = models.ForeignKey(MyUser, on_delete=models.CASCADE,verbose_name='用户')
    title = models.CharField('标题',max_length=50,blank=True)
    introduce = models.CharField('描述',max_length=200,blank=True)
    photo = models.ImageField('图片',blank=True,upload_to='images/album/')

	def __str__(self):
	    return str(self.id)
	
	class Meta:
	    verbose_name = '图片墙管理'
	    verbose_name_plural ='图片墙管理'

项目应用article实现用户(博主)的文章管理,每篇文章设有分类标签、正文内容和评论信息,三者分别对应模型ArticleTag、ArticleInfo和Comment,每个模型之间的数据关系说明如下:

(1)模型ArticleTag设有外键字段关联模型MyUser,与模型MyUser组成一对多的数据关系。

(2)模型ArticleInfo不仅与模型MyUser组成一对多的数据关系,并且与模型ArticleTag组成多对多的数据关系。

(3)模型Comment只对模型ArticleInfo组成一对多的数据关系。

python 复制代码
# article 的models.py

from django.db import models
from django.utils import timezone
from account.models import MyUser

class ArticleTag(models.Model):
    id = models.AutoField(primary_key=True)
    tag = models.CharField('标签',max_length=500)
    user = models.ForeignKey(MyUser,on_delete=models.CASCADE,verbose_name='用户')

    def __str__(self):
        return self.tag
    class Meta:
        verbose_name = '博文分类'
        verbose_name_plural ='博文分类'

class ArticleInfo(models.Model):
    author = models.ForeignKey(MyUser,on_delete=models.CASCADE,verbose_name='用户')
    title = models.CharField('标题',max_length=200)
    content = models.TextField('内容')
    articlephoto = models.ImageField('文章图片',blank=True,upload_to='images/article/')
    reading =models.IntegerField('阅读量',default=0)
    liking = models.IntegerField('点赞量',default=0)
    created = models.DateTimeField('创建时间',default=timezone.now)
    updated = models.DateTimeField('更新时间',auto_now=True)
    article_tag = models.ManyToManyField(ArticleTag,blank=True,verbose_name='文章标签')

    def __str__(self):
        return self.title
    class Meta:
        verbose_name = '博文管理'
        verbose_name_plural = '博文管理'


class Comment(models.Model):
    article = models.ForeignKey(ArticleInfo,on_delete=models.CASCADE,verbose_name='所属文章')
    commentor = models.CharField('评论用户',max_length=90)
    content = models.TextField('评论内容')
    created = models.DateTimeField('创建时间',auto_now_add=True)

    def __str__(self):
        return self.article.title
    class Meta:
        verbose_name = '评论管理'
        verbose_name_plural = '评论管理'

项目应用interflow使用模型Board存储留言板信息,它与模型MyUser组成一对多的数据关系,从而区分每个用户(博主)的留言板信息。在项目应用interflow的models.py中定义模型Board,定义过程如下:

python 复制代码
# interflow的 models.py

from django.db import models
from django.utils import timezone
from account.models import MyUser

class Board(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField('留言用户',max_length=50)
    email = models.CharField('邮箱地址',max_length=50)
    content = models.CharField('留言内容',max_length=500)
    created = models.DateTimeField('创建时间',default=timezone.now)
    user = models.ForeignKey(MyUser,on_delete=models.CASCADE,verbose_name='用户')

    def __str__(self):
        return self.email
    class Meta:
        verbose_name = '博客留言'
        verbose_name_plural = '博客留言'
        
相关推荐
B站计算机毕业设计超人39 分钟前
计算机毕业设计hadoop+spark+hive民宿推荐系统 酒店推荐系统 民宿价格预测 酒店价格 预测 机器学习 深度学习 Python爬虫 HDFS集群
大数据·python·机器学习·spark·课程设计·数据可视化·推荐算法
计算机徐师兄1 小时前
Python基于Django的web漏洞挖掘扫描技术的实现与研究(附源码,文档说明)
python·django·漏洞扫描·web漏洞挖掘扫描·python django·python漏洞挖掘扫描技术
m0_748246611 小时前
【论文投稿】Python 网络爬虫:探秘网页数据抓取的奇妙世界
开发语言·爬虫·python
minstbe1 小时前
AI开发 - 算法基础 递归 的概念和入门(二)汉诺塔问题 递归的应用和使用注意 - Python
开发语言·python·算法
web147862107231 小时前
Python毕业设计选题:基于django+vue的疫情数据可视化分析系统
python·信息可视化·课程设计
岁月如歌,青春不败1 小时前
HMSC联合物种分布模型
开发语言·人工智能·python·深度学习·r语言
susu10830189111 小时前
python中Windows系统使用 pywin32 来复制图像到剪贴板,并使用 Selenium 模拟 Ctrl+V 操作
python·selenium
Pocker_Spades_A1 小时前
阿里云-通义灵码:在 PyCharm 中的强大助力(下)
ide·python·阿里云·pycharm
chengxuyuan1213_2 小时前
Python有哪些常用的库
开发语言·python
小白—人工智能2 小时前
有一个4*5的矩阵如下,要求编写程序计算总和与平均值,并找出其中值最大的那个元素输出,以及其所在的行号和列号。
数据结构·python·算法·矩阵