一、项目概述
项目运行环境
Python3.6+
Django 1.11
MySQL 5.7
其他插件(图片处理、分页、验证码....)
项目详细功能介绍
前台功能
项目首页展示
轮播图
博客推荐
最新发布
博客分类
最新评论文章
widgets小插件
搜索功能
博客分类功能
博客标签查询
友情链接
博客分页功能
博客详细
最新评论文章
发表评论
评论展示
评论数
阅读数
登录功能
注册功能
邮箱验证功能
注销功能
页面模板
标签云功能
读者墙功能
后台功能
用户维护
权限管理
博客分类维护
标签维护
友情链接
轮播图维护
项目演示
项目演示
# 二、开发环境搭建
> 使用virtualenv 和 virtualenwrapper
**1\. MySQL 5.7**
sudo apt install mysql-server mysql-client
**2\. 安装mysql驱动**
pip install pymysql
**3\. 安装Django**
pip install django==1.11
# 三、创建项目
## 创建项目和应用
* 创建项目
django-admin startproject django-blog
* 创建应用
python manage.py startapp userapp
python manage.py startapp blogapp
## 配置数据库
* 在settings中配置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_blog_db',
'USER': 'root',
'PASSWORD': 'wwy123',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
## 创建数据库(执行迁移文件)
python manage.py migrate
## 创建超级管理员
python manage.py createsuperuser
# 四、创建数据模型
## USERAPP
### USER(用户模型)
from django.contrib.auth.models import AbstractUser
class BlogUser(AbstractUser):`
nikename = models.CharField('昵称', max_length=20, default='')
> 提示:需要在settings配置文件中设置:AUTH_USER_MODEL = 'users.BlogUser'
### EMAIL(邮箱验证数据模型)
class EmailVerifyRecord(models.Model):`
code = models.CharField(verbose_name='验证码', max_length=50,default='')
email = models.EmailField(max_length=50, verbose_name="邮箱")
send_type = models.CharField(verbose_name="验证码类型", choices=(("register",u"注册"),("forget","找回密码"), ("update_email","修改邮箱")), max_length=30)
send_time = models.DateTimeField(verbose_name="发送时间", default=datetime.now)
class Meta:
verbose_name = "邮箱验证码"
# 复数
verbose_name_plural = verbose_name
def str(self):
return '{0}({1})'.format(self.code, self.email)
## BLOGAPP
### Banner(轮播图模型)
class Banner(models.Model):`
title = models.CharField('标题', max_length=50)
cover = models.ImageField('轮播图', upload_to='static/images/banner')
link_url = models.URLField('图片链接', max_length=100)
idx = models.IntegerField('索引')
is_active = models.BooleanField('是否是active', default=False)
def str(self):
return self.title
class Meta:
verbose_name = '轮播图'
verbose_name_plural = '轮播图'
### Category(博客分类模型)
class BlogCategory(models.Model):`
name = models.CharField('分类名称', max_length=20, default='')
class Meta:
verbose_name = '博客分类'
verbose_name_plural = '博客分类'
def str(self):
return self.name
### Tags(标签模型)
class Tags(models.Model):`
name = models.CharField('标签名称', max_length=20, default='')
class Meta:
verbose_name = '标签'
verbose_name_plural = '标签'
def str(self):
return self.name
### Blog(博客模型)
class Post(models.Model):`
user = models.ForeignKey(BlogUser, verbose_name='作者')
category = models.ForeignKey(BlogCategory, verbose_name='博客分类', default=None)
tags = models.ManyToManyField(Tags, verbose_name='标签')
title = models.CharField('标题', max_length=50)
content = models.TextField('内容')
pub_date = models.DateTimeField('发布日期', default=datetime.now)
cover = models.ImageField('博客封面', upload_to='static/images/post', default=None)
views = models.IntegerField('浏览数', default=0)
recommend = models.BooleanField('推荐博客', default=False)
def str(self):
return self.title
class Meta:
verbose_name = '博客'
verbose_name_plural = '博客'
### Comment(评论模型)
class Comment(models.Model):`
post = models.ForeignKey(Post, verbose_name='博客')
user = models.ForeignKey(BlogUser, verbose_name='作者')
pub_date = models.DateTimeField('发布时间')
content = models.TextField('内容')
def str(self):
return self.content
class Meta:
verbose_name = '评论'
verbose_name_plural = '评论'
### FriendlyLink(友情链接模型)
class FriendlyLink(models.Model):`
title = models.CharField('标题', max_length=50)
link = models.URLField('链接', max_length=50, default='')
def str(self):
return self.title
class Meta:
verbose_name = '友情链接'
verbose_name_plural = '友情链接'
# 五、实现首页页面模板
## 创建模板文件夹
> 创建模板文件templates,并在settings.py中设置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
## 配置静态文件路径
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
# 六、创建首页路由
* 创建视图函数
def index(request):`
return render(request, 'index.html', {})
* 配置url
url(r'^$', index, name='index' )
* 修改模板CSS JS等静态文件的路径
# 七、实现幻灯片功能(Banner)
* 注册模型
from blogs.models import Banner
admin.site.register(Banner)
* 编写views
from .models import Banner
def index(request):
banner_list = Banner.objects.all()
ctx = {
'banner_list': banner_list,
}
return render(request, 'index.html', ctx)
* 模板
``
# 八、实现博客推荐
* 注册模型
from blogs.models import Banner,Post,BlogCategory,Tags
...
admin.site.register(BlogCategory)
admin.site.register(Tags)
admin.site.register(Post)
* 编写views
`# 视图函数 HTTPRequest`
def index(request):
banner_list = Banner.objects.all()
recommend_list = Post.objects.filter(recommend=1)
ctx = {
'banner_list': banner_list,
'recommend_list': recommend_list,
}
return render(request, 'index.html', ctx)
* 模板
{% for post in recommend_list %}
【推荐】{{post.title}}
{{post.content}}
{{comment.user.username}}({{comment.pub_date|date:'Y-m-d'}})
{{comment.content}}