时间:2021-07-01 10:21:17 帮助过:18人阅读
5天学会一种 web 开发框架不请自来,冒昧说几句web framework层出不穷,特别是ruby/python,各有10+个,php/java也是一大堆 根据我自己的经验写了一个to do list,按照这个清单,一条一条的学习,事半功倍,很快就能掌握 一共25条,即便很磨蹭,2小时也能搞定一条,25*2=50。只需要50小时就能掌握任意一种web框架
各类web框架大同小异:现代web开发框架的6大元素,把握主线,就不会迷路
建议把本文打印到一张A4纸,搞定一条打个勾
web框架学习列表可选的学习项目
- 如何定义 url route
如何组织 request handler 函数
- 写一个最简单的request handler 函数
- 如何从get/post请求中取出参数
- 如何定义全局url 拦截函数
- 如何获取/修改/存储 cookie,session数据
- 如何修改/输出 http header 数据
如何部部署app 程序
- 服务器部署可以参考读python web 程序的9种部署方式
- 如何配置开发环境
- 如何配置静态文件访问
如何访问数据库
是否支持ORM
支持orm
- 如何维护表结构的变更
- 如何定义/组织/初始化 数据表
- 如何对接orm系统和现有的表结构
- 掌握最基本的add/delete/按字段查询/count/slice/order by
- 如何直接使用sql 访问数据库
不支持orm (这样的web框架,不用也罢)
如何使用模板系统
- 如何组织/访问 模板文件的目录结构
- 如何在模板中嵌入代码
- 模板是否支持继承结构
- 模板之间如何include
- 如何自定义模板函数
如何通过http get/post 获取远程数据
- 如何parse json
- 如何parse xml
- 如何输出为 json
- 如何处理状态码:404和50x
- 如何处理文件上传
误区
- 发送email
- log
- 图片处理
- 表单验证辅助函数,很多框架的表单验证部分实现的特别复杂,初学者完全不需要,手写代码处理就够用
- ORM中的hasone,manytomany,onetomany关系,概念很复杂,其实只是多写/少写一个查询字段的关系,学习成本太高,初学者完全不需要理会,直接跳过
其实我是早上犯困的时候偷偷刷知乎才写的之前的回答,嘘……
感谢大家的支持,我大致讲讲我的django/Python学习经历,可能会有些废话,大家多见谅哈。
估计一些人是才毕业或者刚进入IT行业吧,新人或者才进入IT行业总有些类似的想法:我会什么技术好找工作?学什么语言好赚钱?这样的问题我也想过很多。我工作也才3年多而已,我没法回答学什么有前途/钱途,也没法回答学什么技术好找工作,更没法回答什么语言未来有希望。我能讲的只有我作为一个有那么一丁点工作经验的软件开发的切身经历而已。
我是12年夏天毕业的,本科数学。考过研,没考上,被计算机组成原理和计算机网路虐惨了。为什么从事计算机行业?两个原因:其一,计算机是数学的分支;其二,大学一开始就有那么个不是很清晰萌芽一样的模糊混沌也不知道为啥的想法——要写代码做研发。
大学毕业时候自己拥有IT相关的本钱:学过数据结构,考过二级C语言,学过数据库基础(只会写SELECT * FROM xxx, 到了WHERE基本就不会写了,ALTER、UPDATE、DELETE一写一个错那种),用http://ASP.NET开发过极为简单的数据查询页面(一个白色的输入框写填日期,一把查出所有的数据库数据,就这么简单),大学Java课程要求的大作业写了个猫捉老鼠的小游戏,参加过数学建模写过MATLAB。
就这么多,说多不多,说少不少,和大多数人一样普通。我那些计算机专业的同学会的比这多好多。
12年7月 入职,那时候项目要求用C# & WPF写一些PC上的带界面的工具,一直写到13年12月份,那时候没有用数据库。工作中顺带学习了点杂七杂八的东西,也没个啥重点。
到了13年2月,工作调整,被指派用django做一个HTTP服务,对外提供数据查询接口,底层使用完全没有接触过的非关系型数据库MongoDB。对我来讲几乎完全是新的事物,Python、Django、MongoDB、HTTP、Nginx、Linux基本操作、服务发布和部署等等。那时候我用的Django是1.4的版本,一开始就完全是瞎子摸象,对于框架的概念都不怎么清晰,但是项目明确要求:半个月出基本API接口,1个月出全部接口,2个月稳定上线。擦嘞个擦擦,要么干要么认输,那就干呗!
开始的时候先找了个有经验的开发,帮我搭建了个框架,然后迅速写了个最简单的数据查询GET接口,浏览器直接访问一个URL,只返回一个简单的json数据,返回的数据都是代码里写死的。当时完全不知道request是啥,session是啥,为啥浏览器里输入下就能调用到我的代码里面,全是混沌的。当时我也有不止一次去尝试通读一边djangobook,但是有人依赖我的接口,必须尽快开发啊,根本没时间认真学习。当时一位同事告诉我了一句话:It works, it works well, how it work?
简单讲就是先出东西,在把出的东西优化,最后再去考虑这货是怎么个原理。这句话简直颠覆了我从学校带来的那种先学习在实践的认知。
当时开发的时候用的工具时PyCharm和IPython。PyCharm绝对是新手编程的好东西,尤其是在写代码的时候仔细看看边栏的语法优化提示,是很有助于新手规范编码和避免一些低级的错误的。IPython是一个增强版的python命令行,支持Tab补全,一些简单的语法测试,或者是小的语法片段我都直接在里面写写试试,没问题直接就粘贴到正式代码里。
再有就是有了什么问题就网上搜,搜索词要准确,同事们称之为“放狗要准”,放出去就要捕到猎物。及时找同事讨论,找有经验的同时咨询学习。平时多思考,使劲思考,反正脑子用不坏。我提高最大的时候,也是我最专注最刻苦的时候。一开始不知道HTTP是啥,总觉得和HTML好像有啥关系(都是H开头哈哈)。再后来为了设计REST风格的API,查找了豆瓣、Google、Facebook、淘宝、百度、腾讯、新浪等十多个网站的API设计,当时收藏夹收集了几十个网站的开发者页面。读开发者文档、分析URL含义、猜测传参含义、截取HTTP请求,最终觉得豆瓣的URL设计比较符合我们项目的需求。还有MongoDB怎么去增删改查?怎么和我们的服务结合起来?Django的ORM框架挺好,支持主流的关系型数据库,但是MongoDB这种非关系型的只能自己手写了。那时候有一个用关系型数据库的方法去操作MongoDB的库,具体啥名字记不起来了,但那个有局限性,我们存在MongoDB中的数据又是比较灵活的,所以只能自造一些方法去读写MongoDB了。由于需要进行一些分组统计查询,又不得不写一些Map-Reduce,或者写一段JavaScript直接放在Mongo中执行。JS之前我是完全不会的,就硬着头皮上吧。还有就是Nginx,配置路径的时候^~*一堆稀奇古怪的符号,位置还不能错。为了提高django性能,于是研究怎么把django+uwsgi+nginx结合在一起也花了些功夫。
当然,这些学习都是下班后和周末学习的,工作的时候没有那么多时间给我学习。组长告诉我:“工作的时候看书说明你闲,没人花钱雇你来看书,工作的时候就要工作,产生价值,看书学习是你自己的事,不能占用工作时间。”现在想来,诚然如此。
具体关于django学习的东西,我翻阅的最多的就是官方文档,以及中文版的django book,翻译略有瑕疵,但网友的修正注释都挺不错。当时我没有读完django book,因为没有时间那么做。由于工作只需要使用django提供REST风格的API接口,所以我反复研究的是视图与URL。我到现在都记不住urls.py要引入哪个模块。我不是不会,而是我觉得不需要记,我知道从哪能找到就行,知道什么原理就行,具体引用哪个模块,迅速找到代码,粘贴下就好了。把更多的时间用在逻辑的思考上,能不记忆的都不记。
最终2个月结束的时候我按时完成了任务。
这两个月也确实是我成长最快的时候,有明确的目的,并且我自己确实很喜欢Python,然后一瞬间也就这么过来了。
========
审慎一些,需要说明的是,之前部门内部人员匮乏,DBA和运维人员都很少,所以才会导致大量任务只由几个开发人员负责的临时情况。2个月完成了任务后,虽然上线了,但是确实有不少问题存在,而且上线后只在局部地区进行了使用,经过了大致3轮的迭代修复完善才逐步保证了服务的稳定。
========
13年5月份的时候工作不怎么忙,于是自己可以慢慢理解下MTV和MVC是什么,但是由于我们的项目一直没有前端页面开发的需求,也没有使用关系型数据库,所以那个时候也就仅仅是知道什么是MTV,具体为什么这么设计?怎么去用?还是很生疏的。
13年7月后,项目需要我被安排去做Java相关的开发,期间主要使用了Spring、Mybatis、MySQL等技术,同时使用Python写不少客户端或者小工具。说实话,我遇到Python后就感觉像是遇到了生命中的另一半的感觉(哇咔咔,是不是浓浓的屌丝程序猿的感觉啊,哈哈),写Java的时候就是感觉不爽,虽然我开发java的时间是我Python的两倍多,但是我还是很喜欢用python,自认为是一个忠实的pythoner。
在使用SpringMVC的时候,我对于web框架的认识更深了一步,对比django,逐渐理解认识了web框架一些公共的东西,比如URL的转发、序列化与反序列化、HTTP请求的格式和使用、数据库关系型和非关系型的联系与区别等。不得不说,我在看到SpringMVC使用@注解方式来设置URL路径的时候确实感觉眼前一亮。相比django的urls.py的方式,各有利弊,那是我就在想,python自己也有@装饰器,那么python能不能也使用@的方式去写url呢?后来没有仔细深入思考过这个想法。
一直写Java写到了15年2月份,我才再次用django写了个网站。这个时候,我已经熟悉了Mongo和MySQL数据库,同时也有了一定的web开发的经验,会写了JS,简单会用bootstrap,URL设计,缓存的设计也都差的不多清楚了。于是三下五除二,一周时间就完成了一个个人任务管理的网站,当然是内部使用而已。之前一是没有时间去了解django的auth模块,这个时候刚好需要登录和用户创建相关的开发,于是就研究了下auth,感觉和之前见过的一些框架的认证有类似的地方。由于有了很多积累,经验也差不多了,所以就看看文档,找找demo就开发完了。
15年3月某个早上,很偶然的看到了flask,由于flask网站界面和jinja2很像,所以就看了看官方的快速入门……
卧槽!卧槽!卧槽!这东西真的太棒了!
模块简洁,命名方式简单,而且这货竟然真的实现了我之前使用@设置URL的想法。刚好那个时候需要开发一个数据查询并且渲染成图表展示的小网站,于是我就用flask试了下,全新的框架,包括数据库设计,从前到后,到最终内部上线,也就2周时间。Flask确实够简洁,开发小型的网站还是很顺手的。我记得以前看过有人讲过(具体是谁记不得了),框架对于新手是有用的,逐渐有经验后,框架能带来的好处越来越少。诚然如此。
如果是新手想系统地学习下web开发的话,django还是很适合的,而有经验的人会觉得不够快,略显臃肿;而flask轻巧,对于新手来讲显得单薄,很多功能需要自己配置或者重新开发。
洋洋洒洒讲了这么多,我技术自认为凑合而已,讲的中间参杂了不少自己的经历,可能并没有过多的讲述django或者flask学习的具体细节,简单总结下吧:
1. 项目驱动是很重要的,多数人在明确的任务或者强烈的爱好的驱使下,学习才会有成效,才谈得上掌握和使用;
2. 学习django、flask这类web框架的时候,不要局限于框架本身,要从web开发的各个环节入手,积攒相关的知识。多了解几个框架没有坏处,相互之间触类旁通,不断的对比分析,自己多总结;
3. 多思考,用自己的想法去揣测分析django的设计原理,思考自己的薄弱环节,思考怎么去合理的分配时间,思考自己的近期目标,思考及自己的中长期目标,思考自己要在什么时候掌握什么等等。
工欲善其事,必先利其器,最后推荐几个我常用的和Python、django、flask开发相关的工具或包:
1. PyCharm——Python开发首选IDE
2. IPython——增强的Python命令行工具,很适合开发时小段代码的测试
3. pip——python的包管理工具,建议国内使用的时候配置下源,推荐使用阿里的源,见pypi
4. virtualenv——python虚拟环境搭建工具,可以较好的隔离多个python开发环境
其它的工具我就不一一列举了
我爱Python Y(^o^)Y
最后,祝大家好运!
哇咔咔!
end 2015-10-23 晚
恰好,最近也在学django。题主的3个问题其他朋友已经回答了很多。