使用Django开发个人博客系统,博客系统包括用户(博主)注册和登录、博主资料信息、图片墙功能、留言板功能、文章列表、文章正文内容和Admin后台系统。
1. 项目架构设计
下一步将上述设置写入Django的配置文件settings.py,当Django运行的时候能自动加载相应的功能应用。
将项目应用account、album、article和interflow写入配置属性INSTALLED_APPS,并在配置属性MIDDLEWARE中添加中间件LocaleMiddleware,使Admin后台系统支持中文语言,配置代码如下:
# 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数据库:
具体连接参考其他博客。
pip install mssql-django==1.2 pip install pyodbc django-pyodbc-azure
配置:
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', }, } }
pip install Pillow
# 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
继续配置:
# 配置自定义用户模型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:
# 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组成一对多的数据关系。
# 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,定义过程如下:
# 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 = '博客留言'
还没有评论,来说两句吧...