摘要:如果是多对多的关系,可在任意一端写。构造路由构建路由和视图函数,并告诉主路由函数如何查找前端显示创建静态模板目录,修改模板文件,文件的配置。
如何使用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/(?Pd+)/$",views.detail,name="detail" ), ]
阔以看见html文件的‘继续阅读’会自动链接到博客详情页
{#templates/blog/index.html 部分代码#}正文显示使用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 部分代码#} {# 代码高亮显示的样式#}增加阅读量
修改数据库表结构,添加增加阅读量的方法
#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()
阔以从图上看出,阅读量的增加
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/45002.html
摘要:采用快速掌握核心知识解决实际问题中补充的方式。让每一行代码都能给自己带来价值,才是每个码农应该有的思维,而不是成为一个职业码农。不过做个人博客有一个重要的价值便是在你做成之后可以部署上线让它成为自己在互联网的基地。 勤学似春起之苗,不见其增,而日有所长 如果你一直想学python,但是不知道从何入手,那么就不要犹豫了。这篇文章就是我的python新实战计划可能适合你。 学习 Pytho...
摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...
阅读 2960·2021-11-23 09:51
阅读 2766·2021-11-11 16:55
阅读 2827·2021-10-14 09:43
阅读 1376·2021-09-23 11:22
阅读 1018·2019-08-30 11:04
阅读 1637·2019-08-29 11:10
阅读 930·2019-08-27 10:56
阅读 3079·2019-08-26 12:01