在我建立这个网站之初,我就发了一个系列的博客《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。
最后,非常感谢各位的支持!有任何疑问,都可以通过网站下方的联系方式与我取得联系。我们可以一同交流分享。
感觉还不错,对楼上说,这就是django开发的系统
讲的真好
ry
谢谢你!
简直是极好的教程。麻雀虽小五脏俱全,大神!
非常感谢博主的文章
非常感谢
cool
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!
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!!
thx Danny!
Tks Danny, this is a great start for leaning Django process, will try to deep learn python&django.
@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.
Very good introductory tutorial of Django blog system, I am ready to get deep in the Django. why using cleaned_data for post form
解惑不少!多谢!
@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。不过我的定制中目前存在几点可能的性能问题,但考虑就个人博客目前对性能要求不算高的情况,因此并未在源码中进行优化。如果你考虑到了,可以对其进行改进。或者对此有什么好的意见和建议,我们可以一起交流。
博主好,参照您的教程在学习,请问您是怎么实现获取当前页之后两页的页数的?因为看您的paginator部分有跳转到当前页之后两页的链接,但是django 本身只提供了has_next和has_previous两种方法,请问不改paginator的源代码能实现吗?
nice blog.
好的,多谢你啦!
@george: 非常感谢你的高度评价,也非常高兴帮助到你。
我的网站目前后端基于 Django Web Framework 实现,前端固然就是 HTML + CSS + JS,当然还有 jQuery 的辅助。
有兴趣可以查看我的 Github(https://github.com/manyunkai),我开放了第三版和部分第四版的源码。
非常感谢你的文章。很有帮助。同问, 你的博客做的这么漂亮, 用了几种语言和工具?
NoReverseMatch at /
Reverse for 'blog_get_detail' with arguments '(1,)' and keyword arguments '{}'
@郭璞: 该问题之前是我的一个疏忽,目前已解决。需要在 urls.py 中 detail 那一条上定义该命名空间。
最近刚好再看Django,也只是参照着帮助文档看了看基础知识点,至于运用博主的这几篇文章真的是太好了。照着做了一下,原来的很多困惑double解除了。但是对于url ‘blog_get_detail'
求一份源码,如果博主有空的话。发一份源码给我,不胜感激。
@zz 是的哦~
请问你的博客是用django开发的吗