BLOG
Enjoy when you can, and endure when you must.
APR 16, 2016/Django
用 Django 构建简易博客(五):添枝加叶

在我建立这个网站之初,我就发了一个系列的博客《Django 博客系统开发》,当时的想法是将自己所学和所实践的一些东西整理一下、记录下来。时至今日,三年的时光已在眨眼间过去,我发现这几篇文章在我网站的访问量排行中依然居高不下。说明这几年大家对 Python 和 Django 的关注度确实比较高并且有很多新的开发者加入其中,这当然要数是一个非常好的趋势。但技术是不断发展的,特别 Python 和 Django 都一直处于快速发展期,当年的文章中提到的方法很多已不再适用。因此萌发了做一个更新的想法,让更多的朋友关注最新的技术,而不是面对一个旧版冥思苦想。

用 Django 来快速搭建一个简易的博客,我一直认为是一个自我实践的好方法。就像我自己的网站一样,我在多个版本迭代中出现了一个从简到繁、又从繁到简的过程,这是我不断的在尝试和优化。只要愿意关注细节、乐意去思考,即使是一个很小的东西,也能从中收获不少。

当然,这里我用到了一个名词:实践。是的,要想做出一样东西,即使再简单,也需要基础来支撑。因此在开始实践前,务必要首先学习 Python 语言本身并对 Django 开发框架有一定的了解。
这也明确了本文所面向的读者:具备 Python 基础,对 Django 开发框架有一定了解,想要利用他来做一些基础实践的开发者。如果你还处于零基础阶段,建议阅读一下 Mark Lutz 的《Learning Python》以及 《The Django Book》两本书籍,他们能够引领你进入这个奇妙的世界。

另外,文章中会包含一些我个人的编码风格、见解与主张。因此并不一定要遵循。如果对其有一些独到的看法和改进意见,我们都可以随时沟通、共同改进。

 

第五篇:添枝加叶

 

经过前面的努力,一个博客的雏形已经摆在了我们面前。也就意味着到这里为止,本文的内容就接近尾声了。你是否还犹意未尽呢?那接下来如何“添枝加叶”就要靠你自己啦。其实我相信,现在的你心中有无数多个问号。是的,要真真正正去实现一个完整的网站,无论规模大小,其中要考虑的东西都是很多的。我们之前实现的所谓博客只能说是一个非常简陋、无法拿得出手的半成品。还需要对其进行功能强化、界面美化、交互再加工,才能真正成为一个成熟的博客发布到网上,让大家来共同欣赏、使用你的作品。我想在接下来的进一步实践中,以下的东西一定会遇到:

 

更为复杂的逻辑

 

理想总是无比美好的,要想达到,则一定会遇到重重障碍。你一定已经对自己的博客有了一个更为美妙的构思,而当要实现它的时候,却发现里面包含的业务逻辑越来越复杂,那代码实现也会越来越麻烦。这就需要在基础层面去积累更多,然后尝试去实践。只有这样,才能做到对“如何实现”这个问题心中有数。俗话讲,读万卷书,行万里路。因此 Python 语言本身及 Django 框架是必须要去深入学习的。

 

是人都爱美

 

将自己的网站发布到网上,好比是要在亿万观众面前演讲。不事先把自己的形象打理好,这能有面子么?而要想把自己的网站做的更漂亮,拥有漂亮的设计是一个前提条件。利用 HTML + CSS + JavaScript 这样的前端技术将其实现出来更是重中之重。因此你可能还需要在这方面下一些功夫。

 

公之于众

 

我们的最终目的肯定都是要将这个历经千辛万苦(可能有点言重了)做出来的博客放到互联网上。
啊!这要怎么做?这里提供几个名词可作为之后研究的方向: VPS + Nginx + UWSGI + Django。另外,也许还会接触到 virtualenv 这个有趣的东西。

 

有很多朋友向我提出希望提供原文的源码,可点击这里下载:https://cloud.dannysite.com/index.php/s/rIZRnuSIkpBOznf

最后,非常感谢各位的支持!有任何疑问,都可以通过网站下方的联系方式与我取得联系。我们可以一同交流分享。

COMMENTS
28/05From Mr8god

感觉还不错,对楼上说,这就是django开发的系统

06/04From liyi

讲的真好

08/01From ry

ry

22/02From 美腻的五花肉

谢谢你!

27/11From skyzheng

简直是极好的教程。麻雀虽小五脏俱全,大神!

26/07From LL

非常感谢博主的文章

19/03From du

非常感谢

03/02From 本来

cool

02/02From Kevin

Thank you very much for what you have done ,the code you wrote helps me so much that I can't give you more praise.Thanks again!

10/01From ice

You said nothing ,can i understand in this way?talking too many,but what everyone needs to know is how to write code ,how to build a website ,not like the nouseful word "you should study harder in this",very funny!!

04/01From AlexWang

thx Danny!

10/09From Austin

Tks Danny, this is a great start for leaning Django process, will try to deep learn python&django.

10/08From Danny

@charles: Form.cleaned_data includes a key and value with proper format for all fields when the Form is valid. You can get some detail from https://docs.djangoproject.com/en/1.10/ref/forms/api/#accessing-clean-data.

10/08From charles

Very good introductory tutorial of Django blog system, I am ready to get deep in the Django. why using cleaned_data for post form

30/07From haiji

解惑不少!多谢!

26/07From Danny

@June: 我对 Paginator 是做了一些定制的以满足自己的需求。当然,针对“怎么实现获取当前页之后两页的页数的”这一问题,其实在 Django 原生提供的 Paginator 中也有可以直接利用的方法,就是 Paginator.page_range(),如果合理利用,就可以做出前面提到的功能。不知这么说是否有一些启发?另外要注意的是,在 Django 1.9 版本之前的 Paginator.page_range() 方法是返回一个 list 对象,而 1.9 开始应是出于性能考虑返回了 iterator,在处理的时候要注意他们的不同之处。

参考建议:
1. Django 官方文档中关于 Paginator 的说明:https://docs.djangoproject.com/en/1.9/topics/pagination/;
2. 我的博客在此部分的实现,源码是 src.core.mixins 下的 _Page 类 和 PaginationMixin 类。详见:https://github.com/manyunkai/dannysite4/blob/master/src/core/mixins.py。不过我的定制中目前存在几点可能的性能问题,但考虑就个人博客目前对性能要求不算高的情况,因此并未在源码中进行优化。如果你考虑到了,可以对其进行改进。或者对此有什么好的意见和建议,我们可以一起交流。

25/07From June

博主好,参照您的教程在学习,请问您是怎么实现获取当前页之后两页的页数的?因为看您的paginator部分有跳转到当前页之后两页的链接,但是django 本身只提供了has_next和has_previous两种方法,请问不改paginator的源代码能实现吗?

19/07From george

nice blog.

16/07From george

好的,多谢你啦!

15/07From Danny

@george: 非常感谢你的高度评价,也非常高兴帮助到你。
我的网站目前后端基于 Django Web Framework 实现,前端固然就是 HTML + CSS + JS,当然还有 jQuery 的辅助。
有兴趣可以查看我的 Github(https://github.com/manyunkai),我开放了第三版和部分第四版的源码。

14/07From george

非常感谢你的文章。很有帮助。同问, 你的博客做的这么漂亮, 用了几种语言和工具?

26/06From craymc

NoReverseMatch at /
Reverse for 'blog_get_detail' with arguments '(1,)' and keyword arguments '{}'

08/06From Danny

@郭璞: 该问题之前是我的一个疏忽,目前已解决。需要在 urls.py 中 detail 那一条上定义该命名空间。

05/06From 郭璞

最近刚好再看Django,也只是参照着帮助文档看了看基础知识点,至于运用博主的这几篇文章真的是太好了。照着做了一下,原来的很多困惑double解除了。但是对于url ‘blog_get_detail'

03/06From 求一份源码

求一份源码,如果博主有空的话。发一份源码给我,不胜感激。

25/05From Danny

@zz 是的哦~

25/05From zz

请问你的博客是用django开发的吗

LEAVE COMMNT