没有web开发经验和相关背景。
有c语言基础和python语法基础。
在进行django学习之前,还有哪些基础要求?
django的学习顺序是什么?
时间较紧张,做一次自己一向鄙视的伸手党。抱歉抱歉。。
回复内容:
贴一个很早之前挖的坑,可惜这坑一直没填上。中间列了些知识点,是当时整理的框架,可以按照这个顺序来逐步加深对Django的认识。
========================分割线========================
Learn Django from scratch
Python Web Development Guide
序
为什么写这篇教程
- 国内学习Django的新人越来越多,由于没有好的教程,许多人学习不得要领,对Django产生了错误的理解
- 使用Django已经多年,想做些事情回馈社区
- 目前没有看到特别好的中文教程,如果有,也就不需要再多写一篇了
- 现有的文档和教程不是为初学者设计的
- 如果照着那些一上来就教你怎么做一个博客的教程来学,就像是学习围棋只知道定式,或者像看论文只看结论,而不看证明过程。初学者需要了解的是how it works而不是how to use it
适合哪些人
- 有一定编程基础,希望学习Django掌握网站开发技能的新手
- 已经使用Django一段时间,希望更加深入的了解Django的原理以及实战技巧的Django用户
如何学习
- 本文主要是引导初学者一步一步的理解Django的设计思路,对于Django各个部分的介绍已经有很好的文档了,将会大量引用
- 阅读引用的文档
- 阅读引用的源码
- 当你不明白为什么的时候,读源代码
由于大部分内容是个人经验的总结,如有错误和不准确的地方,还请各位高人指正
1. 网站开发基础
虽然是一篇Django的教程,考虑到大部分学习Django的朋友对于网站开发并没有深入理解,这里先讲一些基础知识
许多朋友学习Django不得要领也是因为缺少基础知识的支撑,
网站开发历史
HTML & HTTP
HTTP Server
basehttpserver
静态网页
Simplehttpserver
apache
CGI
CGIHTTPServer
WSGI
wsgiref
2. 史上最烂Web框架
urldispatcher and function
3. 如果用Django来实现会是什么样子的
urls.py and views.py
4. 配置文件
settings
5. 按照app来组织代码
MVT模型
6. 跟数据库通讯
models.py
7. 表单处理
forms.py
8. 更好的生成页面
templates templatetags
9. middleware
10. contrib apps
auth
admin
staticfiles
11. 用正确的方法来组织网站源代码
python package
12. 第三方package
djangorestframework
south
13. 测试
14. 部署
nginx
gunicorn
postgres
fabric
15. advanced topics
long polling
websocket
tornado
mongrel2
========================分割线========================
补一句,其实最好的学习方式还是读源代码。读Django的源代码,读好的第三方package的源代码。然后模仿和借鉴。当看的多了,就能够分辨好坏了。
这两天在自学django,发现核心不在于语法,而在于稍微熟悉一下库和理解网站的逻辑。以下前提是你有python基础语法知识,要知道有装饰器等东西(只需以后看到你能记起来这个东西好像哪里出现过?然后能找回来,知道这个东西叫装饰器就够了,这只是为了能够google),而真正需要你去理解的,恐怕一点class的基础就可以开始学django了。学习=学+练。边学边练才叫学习,只学不练到头来写不出来也很容易把学的东西忘记了,到时你要写项目时就得重新学——这是吃力不讨好,多急躁也勿把注意力放在一天学多少页教程,XX天读完它这种目标上。
(1)理解网站逻辑,MTV,就是指model处理业务逻辑,view是视图函数,T指模板。客户端首先登录一个网址(请参考《http权威指南》最前面10%不到的内容,书很厚但只需先看这部分,读同时也是最基础最易懂的那部分,希望不要因此感到压力),然后进行DNS解释(就是把网址解释回ip地址),然后服务端接受到请求后从数据库提取数据经过model,然后是views,然后是根据templates进行渲染,图片/css/js等前端文件保存在static,然后将信息发给用户(看不懂这段话没关系:先学html和css,还有http中最基础那部分内容,再回头看框架解释就马上能懂)。
(2)flask,django一起学。最好还把wamp(php的)一起学了。因为你会发现他们目录都差不多,需要view,template等,逻辑是一致的。看起来需要花多一倍时间,实际是节省不少时间。因为代码量其实很少,关键是在于理解——理解得快,花的时间就少,而对比学习稍微增加学习其他语言最基础的部分的成本是值得的,因为能加快理解。必要时亲自去写代码去测试你是否真的掌握(比如flask中有个蓝图的功能——是个难点,但自己根据书中内容,通过4个文件,14行代码写完后就马上理解了。)
(3)配置好数据库,啥数据库都可以,django有orm去控制数据库,不用写数据库本身的语句,所以刚学都没区别。只需分得清SQL和NoSQL的区别就可以。
(4)配置完数据库,如果你用mysql而且看旧的教程,恭喜,你已经顺利地从google中学会去解决mysql不支持python3.4的问题(其实是支持,只是做法不一样了,我还没发现网上有最新版本的准确教程)。不懂的知识点能找则找,不能找就问,真的不能问就跳过。问问题的地方很多人建议stackoverflow,但英语一般可以去segmentfault问。英语在开始学习关系并不大。当你自己意识到英语重要时再学其实也不迟,而还没意识到之前就“据说非常重要”同时对自己水平不高感到担心是没有必要的。
(5)看一个实例,就能理解需要最简单的情况下三个步骤去往网站里加内容,一是在数据库model,二是建立URL映射即view,三是渲染的页面放在template。到这里用到的python知识最高级高级就是class而已。在flask可能有个装饰器来建立url到视图函数的映射关系,也会因为框架“轻”所以要import一大堆,这种diy建议还是熟了不再为web烦恼时,有心思去完善网站时再去接触,一开始就学django。
(6)html,css需要学一下。这两者值得花数天去熟悉一下,按一天2小时算,假如花上一周,就可以网上下载美工切好的模板,自己用html和css呈现出来。做完之后就用这几个静态页面借助django来搭后端,全部完成后就是你的第一个作品。javascript可以先搁着。
(7)把它完善后,比如动态url,还有前端的加载,兼容等问题后,扔上github。这个过程中,你可能会发现win下开发有些难以理解的怪问题阻挡了你,那就下个vitualbox弄个ubuntu12.04,学学常用的命令,直接在linux下开发(入门linux需要成本,新手容易觉得学python还要学linux是添加额外的麻烦,但学习到了相当程序后,linux能够避免很多win下才出现的问题,比如有些教程,中文或英文的,只有linux下面的版本——这样其实也是为你节省时间)。同时在这个过程中,不要嫌麻烦多用github,github不仅是多人合作时有用,它会自动记录历史修改版本对于自己整理越来越庞大的程序也是很有作用的。学github基础所花时间可能是几个小时,然后网上搜一下“最佳实践”,并加以运用。
(8)查问题和配置花的时间要比代码多得多,理解的时间也很多,写代码的时间是很少的。保证不熟的代码自己打一遍,这样的好处是学习编程这种逻辑化的东西,一环扣一环更容易理解。注重学习质量其实就是注重学习速度。正如一开头而言,学习=学+练。
(9)教程最好中英结合。中文接受速度更快,而中文缺失的重要资料则通过英文补充。两者配合效率更高。
(10)上面的内容很泛泛,尤其是它是基于框架之上的。但框架也是基于其他库的,有人提出必须看源码。这是对的,但切入点就很可能错了。看源代码是一件颇为耗费精力的事情,所以切入点应该在于去画个网站原型出来,不断参考各大网站,去建一个自己的blog。以blog为例,除了书中很多最简单的快速入门,还有如验证码,站内搜索用到的数据库知识,Rest ful,网站注册用户的档案编辑如何做得人性化所利用到的各种技术, 通过Javascript的ajax方式来与数据库交换数据等方式进行等等。请注意原本还有jinja2等模板的支持,某特别好用的库无法适用时,必须面临的就是更加深入的基础知识,HTTP,WSGI,爬虫不再是一种入门的玩物,而是开始发现与web有着很大的交集的时候,那时候才算刚刚上了轨道学习,阅读英语资料也是必不可少的。然而只要按照高要求去设计你的第一个web app,不要小林丸号,当你完成之后其实会进步很大,实践和项如同“无形的手”一样会以很好的时机引你进去编程的过去一直避而不谈的区域。
P.S. 自学编程知识是一个方面,但心理上的负担和没有人指导的情况下,有的甚至是工作的压力等都是影响进度和效率的关键因素,也非常合理——“急躁也是可以理解的”,所以去理解“保证质量其实就是保证速度”就显得很重要了,而具体起来就是“linux可能不是一个大麻烦,刚开始学习编程接触多门语言也不是一个负担,而是一个加速器”。但归纳到底,技术需要日积月累,任何经验和借鉴只能让整个过程更加容易。希望以上经验能够有所帮助。
赞同楼上说的,我就不重复了,直接甩你一个伸手党喜闻乐见地址:
Django官方Tutorrial中文版:新手入门 — Django 1.5 documentation
Django是MVC(Django内称MTV)模式的Web框架。如果没有Web经验,学任何框架都不会很快,Django可能会是先对比较容易上手的。
建议了解一下MVC模式(网络上有很多教程应该),再看一些HTML / CSS / JS的基础知识,w3shool的教程就OK。
学习Django的话,可以看官方文档,官方文档有一个类似introduction的东西,如果觉得理解起来困难,可以先搜中文版本的django book。
等到有了一个对Web Framework / Django 初步的认识了解,可以深入看一些Django的特性。
愚见,仅供参考。
从09年开始用django至今,不过最近1年没怎么用django,因为工作原因主要在用tornado。
我学django是挑挑拣拣的用,今天要用什么就去看什么,把官方那个文档翻来覆去的看,每当我觉得看完了的时候,又会在文档里找到点新东西,很有意思。
django值得学习的地方(个人喜欢的地方)
- ORM (省事,方便,优雅。 虽然很多人对它的实现和性能有诟病,不过我觉得一个程序员不要还没开始干就扯性能,抛开业务需求谈性能纯粹属于耍流氓,当然你要是产品上线到产品下线都不重构一次代码都话,那我也没什么话好说的)
- 自带的User Auth(扩展性和安全性不需要我们一把屎一把尿的去搭建了,安全省心,你能想到的人家早已经想到了)
- Url mapping (省事)
- Forms(这玩意我用得少,因为第一个系统的表单复杂度不太适合用它,不过如果是做一些大众,通用性的东西,用它很省事)
不喜欢的地方:
- 模版 不说跟别的模版系统比,连tornado的模版都甩它几条街,想实现个复杂都东西就得用tags,极其蛋疼。
- 兼容性差,麻痹的曾经有一段时间我好不容易从1.4迁移到1.5,没几天1.6又出来了,我赶紧把自己到几个应用迁移上去,还有一个没迁移完1.7又尼玛出来了,而且都没办法平滑都迁移 ,据说现在有1.8了,不过我暂时没兴趣用。
总结下来就是,如果想一上手就开始专注写业务的话,用django是你的不二选择,其他的框架轻量级是轻量了,但是难免重复造轮子,我们现在的项目用tornado,光写适合的底层框架就又搞了接近2个月才能开开心心的写业务。
至于怎么学就不提了,去搞就好了,遇到问题就翻官方文档。
学完 python 想学 django,正好我最近组织了一个
django 新人学习小组,并开始一边学习一边做项目实践。正好目前进行到第一周,小组正在做一个 Blog 程序,虽然简单,但是足以带你进入 django 开发的大门,欢迎 follow 我们,并期待您的建议和意见。
简单介绍一下小组的运作模式:我们在每个周末会开一个小组讨论会,讨论下一周的开发内容,每个人根据其分配的任务去学习相应的文档。但是不仅仅是做完自己的工作就完事了,每个人在学习的过程中还要把自己学的东西讲给全小组的人听(主要是写成一份和自己工作相关的文档),让其他的组员都明白你做了什么,这样你不仅学到了自己该学的,也学到了其他组员学到的东西。
目前我们正在进行第一周的项目,第一周的学习文档已经出来了,发布在简书上:Django学习小组出品:一起来做一个简单的Blog第一周文档(教程)。我把摘要部分贴出来,感兴趣的朋友可以去简书上阅读原文。
此外欢迎关注我们的 github 组织首页,所有项目的相关源代码都会上传到 github 上。每周更新,但是代码量不大,确保在新人的接受范围内,这样可以让新手完全跟上我们的学习和开发进度。
第一周文档的摘要:这一周我们小组完成了 Blog 首页的搭建。本节是 django blog 项目的开篇,是 django 学习小组的集体学习成果。django学习小组是由我发起的一个促进 django 新手互相学习、互相帮助的组织。小组在一边学习 django 的同时将一起完成三个项目:
- 一个简单django blog,用于发布小组每周的学习和开发文档
- django中国社区,为国内的 django 开发者们提供一个长期维护的 django 社区,聚集全国的 django 开发者到这个社区上来
- django 问答社区, 类似于segmentfault 和 stackoverflow但更加专注(只专注于 django 开发的问题)的问答社区
目前小组正在完成第一个项目,本文即是该项目第一周的相关文档。
更多的信息请关注我们的 github 组织首页,本教程项目的相关源代码也已上传到 github 上。
同时,你也可以加入我们的邮件列表 django_study@groups.163.com ,随时关注我们的动态,我们会将每周的详细开发文档和代码通过邮件列表发出。
如有任何建议,欢迎提 Issue,欢迎fork,pull request,当然也别忘了 Starred 哦!
每周更新,敬请关注
——by Django 学习小组,期待您的建议和意见
http://djangobook.py3k.cn/2.0/这个中文译本不错 。
这本书适用 1.0几的版本 ,比较容易学 。现在的1.6.1 的版本 会复杂一点 。
基础知识 呢,以我这小白的感觉认为 要:
- 会点命令行
- 基本HTML 语法(多然越多越好,虽然我现在还是只知道标签要用两个尖括号而已~)
- 数据库的知识 ,比如创建数据库,表 。(create ,select 之类。)
- 适量Python ,因为语法很像 。
- 了解一下CGI ,虽然实际用途不大,但是 可以帮助我们理解 映射的关系 :
个人理解就是:CGI的就是老板(HTML)叫员工(py)去做事 。现在Django呢, 就高端一些 。老板有了秘书(url.py) ,通过urls.py ,来让员工(views.py)去做事。 6 ,正则表达式嘛,至少要知道 一点吧 。(程度只要能把一些网址用正则表达式写出来,这样呢,交代给秘书(urls.py) 。ps: 因为我只看到第八章 ,所以就知道这么些 需要 ,学习的话循序渐进 ,不懂的就去google ,stackoverflow
共勉!
趁早换。。。
文档已经很清晰简单了,学就是了。
基础肯定是共通的,如果简单来说,就是html/css/js还有数据库的sql等,还有最关键的Python本身要有一定的了解。
感觉编码是个大问题,其他倒是很方便的