python 博客系统_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...)的位置

根据使用的网页模板,显示自己的页面

显示结果:

bVbjyPQ?w=1918&h=1004

如何快速准确跳转页面

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\d+)/$',views.detail,name='detail' ),

]

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

{#templates/blog/index.html 部分代码#}

bVbjEgU?w=1918&h=1009

正文显示使用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 部分代码#}

{{ post.body | safe}}

{#templates/base.html 部分代码#}

{# 代码高亮显示的样式#}

bVbjEg1?w=1920&h=973

增加阅读量

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

#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()

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

bVbjEjI?w=1918&h=623

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值