python实战----博客系统

如何使用Django框架编写自己的blog系统

创建项目

step_1

首先创建一个新项目FirstBlog(以下简称FB),实现基础功能,如创建数据库,创建超级用户,可以实现后台管理员登陆
过程可参考[链接描述][1]

注册应用

step_2

在FB中注册应用blog,编写数据库文件blog/models.py,告诉主程序FirstBlog/settings.py你注册了应用,并修改数据库
后台运行前,需要在blog/admin.py中注册站点



博客属性:id,博客标题,博客作者,博客摘要,博客正文,博客创建时间,博客所属专栏(类别),博客标签,阅读数
标签属性:id,标签名称
专栏(类别)属性:id,专栏名称
博客和专栏: 多对一
博客和标签: 多对多

与flask的数据库表结构不同,django框架里,数据库表之间的关联只需要在对应关系里多的一侧写外键ForeignKey,不需要在另一个表写反向引用。如果是多对多的关系,可在任意一端写ManyToManyField。

# blog/models.py
from django.contrib.auth.models import User
from django.db import models


# Create your models here.
# 博客属性:id,博客标题,博客作者,博客摘要,博客正文,博客创建时间,博客所属专栏(类别),博客标签,阅读数,评论数
# 标签属性:id,标签名称
# 专栏(类别)属性:id,专栏名称
# 博客和专栏: 多对一
# 博客和标签: 多对多
class Category(models.Model):
    name = models.CharField(max_length=64, verbose_name='专栏名称')

    class Meta:
        verbose_name = '专栏'
        verbose_name_plural = '专栏'
    def __str__(self):
        return '%s' %(self.name)

class Tag(models.Model):
    name = models.CharField(max_length=64, verbose_name='标签名称')
    class Meta:
        verbose_name = '标签'
        verbose_name_plural = '标签'
    def __str__(self):
        return '%s' %(self.name)

class Post(models.Model):
    title = models.CharField(max_length=100, unique=True, verbose_name='标题')
    create_time = models.DateTimeField(verbose_name='创建时间')
    summary = models.CharField(max_length=255, verbose_name='摘要')
    body = models.TextField(verbose_name='正文')
    # 作者可以从管理员数据库表User中查找
    author = models.ForeignKey(User, verbose_name='作者')
    category = models.ForeignKey(Category, verbose_name='专栏')
    tags = models.ManyToManyField(Tag, verbose_name='标签')
    views = models.IntegerField(default=0,verbose_name='阅读数')
    class Meta:
        verbose_name = '博客'
        verbose_name_plural = '博客'
    def __str__(self):
        return '%s' %(self.title)

创建数据

step_3

后台创建多个标签、栏目,多篇博客,确保前端显示是有数据的。

构造路由

step_4

构建路由和视图函数,并告诉主路由函数FirstBlog/settings.py如何查找

前端显示

step_5

创建静态模板目录static/,修改模板文件,settings.py文件的static配置。如果没有修改settings.py文件,可在模板文件加上{% load static%}。并修改样式(css...)的位置
根据使用的网页模板,显示自己的页面

显示结果:
图片描述

如何快速准确跳转页面

from django.urls import reverse    #返回正确而完整的路由
为了在html文件内,继续阅读可以直接跳转{{ post.get_url }}
注意在重写视图函数名称时,需要申明命名空间

修改blog/models.py的Post表,添加属性get_url()

#blog/models.py
    def get_url(self):
        return reverse('blog:detail',kwargs={'id':self.pk})
#blog/urls.py

from django.conf.urls import url
from django.contrib import admin

from blog import views
app_name = 'blog'
urlpatterns = [
    url(r'^$',views.index ,name='index'),
    url(r'book/(?P<id>\d+)/$',views.detail,name='detail' ),
]

阔以看见html文件的‘继续阅读’会自动链接到博客详情页

{#templates/blog/index.html 部分代码#}
 <div class="read-more cl-effect-14">
                                <a href="{{ post.get_url }}" class="more-link">继续阅读 <span
                                        class="meta-nav">→</span></a>
                            </div>

图片描述

正文显示使用markdown语法

现在的博客都是使用mrkdown语法来显示的,并且配备高亮显示

需要下载安装模块Markdown,pygments
在视图函数里将博客正文转成html时,加上高亮的ectensions
修改base.html,添加对应高亮的css样式
#blog/views.py文件
 post.body = markdown(
        post.body,
        extensions=['markdown.extensions.extra',
                    'markdown.extensions.codehilite',
                    'markdown.extensions.toc', ],
        output_format='html'
    )
{#templates/blog/detail.html 部分代码#}

  <div class="entry-content clearfix">
     {{ post.body | safe}}
   </div>
{#templates/base.html 部分代码#}

    {#    代码高亮显示的样式#}
    <link rel="stylesheet" href="/static/css/highlights/github.css">

图片描述

增加阅读量

修改数据库表结构,添加增加阅读量的方法

#blog/models.py
# 增加阅读量
def add_views(self):
    self.views +=1
    self.save(update_fields=['views'])    #只重新保存更新字段views

修改视图函数,当你访问某一篇博客时,阅读量加1

post = Post.objects.get(id=id)
post.add_views()

阔以从图上看出,阅读量的增加
图片描述

猜你喜欢

转载自www.cnblogs.com/baimeishaoxia/p/12742332.html