加载中...
分类详情
Django博客网站搭建 分类
Django博客网站搭建--38.模板过滤器和标签
现在我们已经很熟悉Django的MTV模式了。模板(template)负责如何去展示数据,而视图(view)负责筛选出正确的数据。因此通常来说逻辑都是放到视图中的,但模板也需要一些和表示相关的逻辑:比如循环展示(如{% for ... %})、或者以某种特定格式输出(如{{ ...|date:'Y-m-d' }})等,这些功能都是靠模板的**过滤器(filters)和标签(tags)**实现的。 Django的模板语言包含了很多内置的过…
2020-08-16
Django博客网站搭建--32.多级评论
现在我们的博客已经具有评论功能了。随着文章的评论者越来越多,有的时候评论者之间也需要交流,甚至部分评论还能合并成一个小的整体。因此最好是有某种方法可以将相关的评论聚集到一起,这时候多级评论就非常的有用了。 多级评论意味着你需要将模型重新组织为树形结构。“树根”是一级评论,而众多“树叶”则是次级评论。本教程会以第三方库django-mptt为基础,开发多级评论功能。 django-mptt模块包含了树形数据结构以及查询、修改树形数据的众多方法。 任何需要树形结构的地方,都可以用 django-mp…
2020-08-14
Django博客网站搭建--17.拓展用户信息
可能你已经发现了,Django自带的User模型非常实用,以至于我们没有写用户管理相关的任何模型。 但是自带的User毕竟可用的字段较少。比方说非常重要的电话号码、头像等都没有。解决的方法有很多,你可以不使用User,自己从零写用户模型;也可以对User模型进行扩展。 博客网站的用户信息并不复杂,因此扩展User就足够了。 扩展User模型扩展User模型又有不同的方法。在大多数情况下,使用模型一对一链接的方法是比较适合的。 编写userprofile/models.py如下: userprof…
2020-08-11
Django博客网站搭建--05.View视图初探
数据库虽然已经有了,但是用户通常只需要这个庞大数据库中的很小一部分进行查看、修改等操作。为此还需要代码来恰当的取出并展示数据,这一部分代码就被称为视图。 Django 中视图的概念是**「一类具有相同功能和模板的网页的集合」**。比如,在一个博客应用中,你可能会创建如下几个视图: 博客首页:展示最近的几项内容。 内容“详情”页:详细展示某项内容。 评论处理器:用于响应为一项内容添加评论的操作。 这些需求都靠**视图(View)**来完成。 Hello World!首先写一个最简单的视图函数,在浏…
2020-08-10
Django博客网站搭建--02.教程的开发环境
教程的开发环境本教程的开发环境为: Win 10(64位) Python 3.7.0 Django 3.0.8 为了避免开发环境不同而导致的错误,建议读者使用相同的版本。 安装Pythonpython的安装为比较简单,首先找到Python官方网站,选择python3.7的windows版本,下载并安装。 **安装时注意勾选添加python到环境变量中。**如果没有或者漏掉这一步,请安装完毕后自行添加。 若实在不知道怎么弄的,看这篇文章: windows上安装python3教程以及环境变量配置 安…
2020-08-10
Django博客网站搭建--01.前言
Django 是一个由 Python 写成的开源Web应用框架,可以用它以更高的效率、更少的代码,搭建一个高性能的个人网站。 如果你以前从未接触过 web 开发,并且想快速上线自己的个性化网站,Django 绝对是你的最佳选择。 本教程为零基础的小白准备,教你快速搭建一个自己的博客网站。 教程特点 零基础、免费、中文、完整项目代码 基于Python 3.6、Django 3.0.8 Bootstrap 4 漂亮的前端界面 适合人群 拥有一台能开机的电脑 有一点基础的 python 编程知识 每天…
2020-08-10
Django博客网站搭建--03.创建app
创建APP**在Django中的一个app代表一个功能模块。**开发者可以将不同功能的模块放在不同的app中, 方便代码的复用。app就是项目的基石,因此开发博客的第一步就是创建新的app,用来实现跟文章相关的功能模块。 打开命令行,进入项目所在的目录:(注意Django的操作必须在虚拟环境下进行) E:\>cd django_project E:\django_project> 进入虚拟环境(忘记进入venv方法的看这里: 在Windows中搭建Django的开发环境): E:\django_…
2020-06-18
Django博客网站搭建--06.View及Template
改写视图函数上一章我们感受了视图的工作流程。 **为了让视图真正发挥作用,**改写article/views.py中的article_list视图函数: article/views.py from django.shortcuts import render # 导入数据模型ArticlePost from .models import ArticlePost def article_list(request): # 取出所有博客文章 articles = ArticlePost.objects…
2020-06-18
Django博客网站搭建--07.使用Bootstrap改写模板
注意:学本章之前请检查 Django 版本,确保安装的是 Django 2 而不是 Django 3,否则后面所有的章节都会遇到 staticfiles 无法载入的错误。 在虚拟环境中输入 pip list 即可查看。 上一章我们的网站页面实在太粗糙,你肯定不会拿来做真正的博客首页。因此这章我们要借助Bootstrap的力量,改写一个大气的博客。 配置Bootstrap 4Bootstrap是用于网站开发的开源前端框架(“前端”指的是展现给最终用户的界面),它提供字体排印、窗体、按钮、导航及其他…
2020-06-18
Django博客网站搭建--08.编写文章详情页面
有了文章列表页面后,当然还需要详情页面,方便用户对某一篇感兴趣的文章深入阅读。 编写视图函数打开article/views.py,增加文章详情页面的视图函数article_detail(): article/views.py ... # 文章详情 def article_detail(request, id): # 取出相应的文章 article = ArticlePost.objects.get(id=id) # 需要传递给模板的对象 context = { 'article': a…
2020-06-18
Django博客网站搭建--09.使用Markdown书写文章
上一章我们实现了文章详情页面。为了让文章正文能够进行标题、加粗、引用、代码块等不同的排版(像在Office中那样!),我们将使用Markdown语法。 安装MarkdownMarkdown是一种轻量级的标记语言,它允许人们“使用易读易写的纯文本格式编写文档,然后转换成有效的或者HTML文档。建议读者一定要花五分钟时间熟悉一下Markdown的语法,熟练后码字效率一定会大幅提高。 关于Markdown语法看这里:Markdown 语法介绍 安装markdown也很简单:进入虚拟环境,输入指令pip…
2020-06-18
Django博客网站搭建--04.编写Model
Django 框架主要关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。 它们各自的职责如下: 层次 职责 模型(Model),即数据存取层 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 模板(Template),即业务逻辑层 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。 视图(View),即表现层 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。 简单来说就是Model存取数据,View决定…
2020-06-18
Django博客网站搭建--10.发布新的文章
前面我们已经学会如何用Markdown语法书写文章了。 但是还有问题呀。之前写文章都是在后台中进行的,万一有别的普通用户也要发表文章怎么办?万一我想拓展些后台中没有的提交验证功能又怎么办? 本章即讲述如何在前台中提交新的文章,以便满足开发者各种各样的特殊需求。 Forms表单类在HTML中,表单是在 <form>...</form> 中的一些元素,它允许访客做类似输入文本、选择选项、操作对象或空间等动作,然后发送这些信息到服务端。一些表单界面元素(文本框或复选框)非常简单并内置在HTML中,而其…
2020-06-18
Django博客网站搭建--12.更新文章
目前为止我们已经完成了文章的新建、删除以及查看,还剩最后一项,即对已经完成的文章进行修改。 实际上修改文章与新建文章有点类似,不同的地方有两点: 修改是在原有文章的基础上,因此需要传递 id 指明具体需要修改的文章 加载页面时需要将旧的内容作为默认值填写到表单中,因此需要将文章对象传递到html中 按照这个思路,接下来先写视图函数。 视图函数在ariticle/views.py中增加修改文章的视图函数article_update(): article/views.py ... # 更新文章 de…
2020-06-18
Django博客网站搭建--14.用户的注册
既然有登录登出,那么用户的注册肯定也是少不了的。 注册表单类用户注册时会用到表单来提交账号、密码等数据,所以需要写注册用的表单/userprofile/forms.py: /userprofile/forms.py ... # 注册用户表单 class UserRegisterForm(forms.ModelForm): # 复写 User 的密码 password = forms.CharField() password2 = forms.CharField() class Meta: mod…
2020-06-18
Django博客网站搭建--15.用户的删除
这一章将实现删除用户数据的功能。实际上删除用户和前面的删除文章是完全类似的,有了之前的铺垫,这一章会非常的轻松。 权限与视图用户数据是很多网站最重要的财产,确保用户数据的安全是非常重要的。 前面学习的用户登录、退出、创建都是相对安全的操作;而删除数据就很危险,弄不好会造成不可逆的损失。因此我们希望对操作者做一些限制,比如只能用户登录且必须是本用户才能进行删除的操作。这就是权限。 因此在视图中进行简单的用户权限的验证工作。编写/userprofile/views.py: /userprofile/…
2020-06-18
Django博客网站搭建--16.重置用户密码
随着技术的发展,验证用户身份的手段越来越多,指纹、面容、声纹应有尽有,但密码依然是最重要的手段。 互联网处处都有密码的身影,甚至变成了现代人的一种负担。像笔者这样的,动辄几十个账号密码,忘记其中几个简直太正常了。 本章讲如何帮助健忘症患者,重置用户密码。 安装第三方库前面我们已经知道如何修改文章标题、正文等内容,但是密码作为验证身份的重要口令,必须以更加稳妥的方式修改。一种比较常用的方式是发送一封修改密码的邮件到用户事先绑定的邮箱里。 业务流程分析如下: 向用户邮箱发送包含重置密码地址的邮件。邮…
2020-06-18
Django博客网站搭建--19.文章分页
随着时间的推移(加上勤奋的写作!),你的博客文章一定会越来越多。如果不进行处理,可能同一个页面会挤上成百上千的文章,不美观不说,还降低了页面的反应速度。 这个时候就需要对文章进行分页的处理。 利用轮子写一个完善的分页功能是有些难度的,好在Django已经帮你准备好一个现成的分页模块了(Django把大部分基础功能都替你准备好了!)。内置模块虽然简单,但是对博客来说完全足够了。 我们要用到的是Paginator类。在Shell中可以充分尝试它的用法: >>> from django.core.pa…
2020-06-18
Django博客网站搭建--18.上传头像
到目前为止我们的博客处理的都是文字。现代互联网早就进入了“读图”时代,图片的维护、展示也就相当重要。 上一章中预留了avatar字段,用来保存用户上传的头像,现在我们来实现这个功能。 必要的设置图片属于一种媒体文件,它与静态文件类似,需要设置一个统一的目录,便于集中存储和访问。 这类需要框架统一设置的参数,当然应该在/my_blog/settings.py中。在底部加上: /my_blog/settings.py ... # 媒体文件地址 MEDIA_URL = '/media/' MEDIA_…
2020-06-18
Django博客网站搭建--20.浏览量
文章浏览量是所有社交类网站所必备的数据,足以显示其重要性了。 博主可以通过浏览量来评估某篇文章的受欢迎程度,读者也能够通过浏览量来筛选质量更高的文章。 然而,准确统计浏览量并不简单: 某些类型的请求不应该统计为浏览量,比如作者自己的浏览或编辑文章之后的重定向请求; 由于用户众多,浏览量的数据时刻都在快速更新,会给数据库带来很大的压力。因此很多大型网站都会使用如Redis这样的读写速度非常快的内存数据库辅助存储。 因为我们的项目是博客网站,粗略统计就可以了,也没有那么大的用户压力,所以设计就简单得…
2020-06-18
Django博客网站搭建--21.最热文章
有了浏览量之后,文章受欢迎的程度就有了评价标准。随之而来的就有根据浏览量对文章进行排序的需求,即显示**“最热文章”**。 现在你已经很熟悉MTV模式,不需要我啰嗦也能完成任务: 文章的模型已经有了,不需要写Model了 写一个视图函数article_list_by_views(),取出按浏览排序后的文章对象 将文章对象传递到模板,并进行渲染 很简单,但也隐藏着问题:最热文章列表和之前的普通文章列表相比,大部分功能其实都是相同的,仅仅是排序不同而已。 万一哪天需要根据文章标题排序呢?万一还需要用…
2020-06-18
Django博客网站搭建--22.搜索文章
不管是最新文章列表也好、最热文章列表也罢,都是把所有的文章数据全部展示给了用户。 但是如果用户只关心某些特定类型的文章,抽取全部数据就显得既不方便、又不效率了。 因此,给用户提供一个搜索功能,提供给用户感兴趣的几篇文章,就大有用处了。 准备工作逻辑尽管细节不同,但是搜索和列表有很多类似的地方:它们都是先检索出一些文章对象,并将其展示给用户。上一章已经说过,代码重复是万恶之源,好的实践必须把功能类似的模块尽量复用起来。基于这个原则,我们打算继续在原有的article_list()上添砖加瓦,让其功…
2020-06-18
Django博客网站搭建--25.课间休息
教程看到这里,你已经学会如下内容: 搭建开发环境 博文管理 用户管理 发表评论 若干其他功能 搭建简单的小博客,以上的功能够用了。**但相信你的志向不止于此,**毕竟程序员面试个个造火箭啊。 接下来学什么教程接下来是进阶部分,包括: 类视图 多级评论 文章栏目和标签 图片处理 第三方登录 测试与维护 部署 其他内容 部署开发好项目的demo后,你应该尽快部署到云服务器上,让世界各地的用户随时浏览你的网页。不要误会,部署只是一个起点,作用是让你获得巨大的成就感;部署后你还是需要持续的优化、添加网站…
2020-06-18
Django博客网站搭建--23.文章目录
对会读书的人来说,读一本书要做的第一件事,就是仔细阅读这本书的目录。阅读目录可以对整体内容有所了解,并清楚地知道感兴趣的部分在哪里,提高阅读质量。 博文也是同样的,好的目录对博主和读者都很有帮助。更进一步的是,还可以在目录中设置锚点,点击标题就立即前往该处,非常的方便。 文中的目录之前我们已经为博文支持了Markdown语法,现在继续增强其功能。 有折腾代码高亮的痛苦经历之后,设置Markdown的目录扩展就显得特别轻松了。 修改文章详情视图: article/views.py ... # 文章…
2020-06-18
Django博客网站搭建--24.评论
在没有互联网的年代,我们用日记来记录每天的心得体会。小的时候我有一个带锁的日记本,生怕被别人看见里面写了啥,钥匙藏得那叫一个绝。 现在时代变了,网络版的日记本:博客,却巴不得越多人看越好。 别人看完你写的深度好文,难免也想高谈阔论一番,这就是“评论”功能。 本章将要编写的评论模块,几乎没有新的知识点,而是将前面章节内容的综合应用。 强烈建议读者自行尝试编写这部分内容,测试自己的知识掌握程度。 准备工作评论是一个相对独立的功能,因此新建一个评论的app: (env) E:\django_proje…
2020-06-18
Django博客网站搭建--26.基于类的视图
说是完结,马上又开始写进阶篇了。 本章不会为博客项目增加新功能,但是也同样重要,因为我们要学习高逼格的基于类的视图。 什么是类视图前面章节中写的所有视图都是基于函数的,即def;而类视图是基于类的,即class。 有编程基础的同学都知道,类是面向对象技术中非常重要的概念。具有复杂数据、功能的类,可以通过继承轻而易举的将自身特性传递给另一个类,从而实现代码的高效复用。 相比以前的函数视图,类视图有以下优势: HTTP方法(GET,POST等)相关的代码,可以通过方法而不是条件分支来组织 可以通过诸…
2020-06-18
Django博客网站搭建--29.文章标题图
现在虽然博客的功能大都实现了,但是界面还是比较朴素,特别是首页的文章列表几乎全是文字,看多了难免疲劳。因此,给每个文章标题配一张标题图,不仅美观,用户也能通过图片快速了解文章内容。实际上大部分社交网站也都是这么干的,毕竟人的天性就是懒,能看图就坚决不看字。 在上传用户头像章节中,我们已经接触过上传、展示图片了。标题图的实现也差不多,不同的是本章会更近一步,对图片进行缩放等处理,使页面整洁美观、并且高效。 准备工作与用户头像类似,标题图是属于每篇博文自己的“资产”,因此需要修改model,新建一个…
2020-06-18
Django博客网站搭建--28.文章标签
“标签”是作者从文章中提取的核心词汇,其他用户可以通过标签快速了解文章的关注点。每一篇文章的标签可能都不一样,并且还可能拥有多个标签,这是与栏目功能不同的。 好在标签功能也有优秀的三方库:Django-taggit,省得自己动手设计了。快速开发就是这样,能“借用”就不要自己重复劳动。 安装及设置首先在虚拟环境中安装Django-taggit: pip install django-taggit 安装成功后,修改项目设置以添加库: my_blog/settings.py ... INSTALLED…
2020-06-18
Django博客网站搭建--30.富文本编辑器
前面我们已经实现了用Markdown语法写文章了。但是文章的评论用Markdown就不太合适了,你不能强求用户也花时间去熟悉语法啊。另外评论中通常还有表情、带颜色的字体等功能,这些也是Markdown不具备的。 因此富文本编辑器Django-ckeditor就派上用场了。 在后台使用Ckeditor在虚拟环境中安装django-ckeditor: (env) > pip install django-ckeditor 安装成功后还是老规矩,在settings.py中注册app: my_blog/…
2020-06-18
Django博客网站搭建--27.文章栏目
博客的文章类型通常不止一种:有时候你会写高深莫测的技术文章,有时候又纯粹只记录一下当天的心情。 因此对文章的分类就显得相当的重要了,既方便博主对文章进行分类归档,也方便用户有针对性的阅读。 而文章分类一个重要的途径就是设置栏目。 栏目的模型实现文章栏目功能的方法有多种。你可以只是简单的在文章的Model中增加CharField()字段,以字符串的形式将栏目名称保存起来(实际上这种实现更像是**“标签”**,以后会讲到)。这样做的优点是比较简单;缺点也很明显,就是时间长了你可能会记混栏目的名字,并…
2020-06-18