一 项目概述
项目运行环境 1 python3.6+ 2 Django 1.11 3 mysql 5.7
项目详细功能介绍
前台功能 1 项目首页展示 2 轮播图 3 博客推荐 4 最新发布 5 博客分类 6 最新评论文章 7 搜索功能 8 博客分类功能 9 博客标签查询 10 友情链接 11 博客分页
二 开发环境搭建
三 创建项目
1 进入虚拟环境创建项目
django-admin startproject django_blog
2 进入项目创建应用
python manage.py startapp userapp
python manage.py startapp blogapp
3 在settings中配置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'blog_db',
'USER': 'root',
'PASSWORD': '1',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
4 执行迁移文件
python manage.py migrate
5 创建超级管理员
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'
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/$', index, name='index' )
七、实现幻灯片功能(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)
模板