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()
阔以从图上看出,阅读量的增加
相关推荐
夜斗不是神 2020-11-17
huavhuahua 2020-11-20
Yasin 2020-11-16
xiaoseyihe 2020-11-16
千锋 2020-11-15
diyanpython 2020-11-12
chunjiekid 2020-11-10
wordmhg 2020-11-06
世事一场大梦 2020-11-17
xiaoseyihe 2020-11-16
Morelia 2020-11-03
CloudXli 2020-11-03
文山羊 2020-10-31
comtop0 2020-10-31
pythonxuexi 2020-10-30
三石 2020-10-29
chaochao 2020-10-27
PythonMaker 2020-10-27