Heim > Backend-Entwicklung > Python-Tutorial > 关于python Django与Flask学习的一些疑惑?

关于python Django与Flask学习的一些疑惑?

WBOY
Freigeben: 2016-06-06 16:22:05
Original
1956 Leute haben es durchsucht

提问1:对着vamei先生博客中django代码挨个敲了一遍,但是其实其中有些概念还不是很懂,是需要继续复习吗?
Python - 标签
提问2:django进阶需要学习什么呢?
提问3:需要做到什么条件能找到一份实习生工作,比如说开发出一个网站或者其他?

谢谢各位的关注和解答。

回复内容:

谢邀。需要复习,vamei的博客我没有看,当时入门是看的django的官方例子,就是那个polls教程。你首先要明白django的MTV和MVC的对应关系,并且理解MVC,才能对django有个较好的理解。

Django进阶学习,建议参看Two Scoops of Django: Best Practices for Django 1.8 以及 Django Design Patterns and Best Practices 这两本书,里面有很多经验之谈,网上能下载到。另外图灵出版社引进了一本书图灵社区 : 图书 : Python Web开发:测试驱动方法 这本书也是讲django的,如果不喜欢读原版,读这本也很好,顺便把TDD也一起学了。

想要找份django的工作的话,我建议还是用django做个完整的网站,放到SAE(网站连接 - 新浪云计算)上(SAE免费就够用了),然后到拉钩上投投简历试试看。

多多努力,祝你好运!
---------------update-------------------
下面这个摘自5天学会一种 web 开发框架,里面对web框架常用功能进行了一个梳理,不管是不是django,这些都是通用的,你可以对照这个来进行学习。
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关系,概念很复杂,其实只是多写/少写一个查询字段的关系,学习成本太高,初学者完全不需要理会,直接跳过
不请自来,冒昧说几句

敢问题主是在校学生准备找工作么?
如果是的话,大多数情况,其实你会不会开发网站与能否找到实习工作关系不大。实习的时候,给你安排工作的人会根据你的个人情况进行一个简单的评估。如果你是一个毕业生,那么,公司会更看重你的潜力(比如个人的学习能力,表达能力,沟通能力等),至于你会什么,其实不是特别重要。毕竟大部分人自学的东西,相比公司项目中磨练出来的项目经验和技术还是有差距的。

下面回归正题针对问题逐一解答下:

回答1:大部分博客、教程里面的内容的受众都是初学者,目的是希望没有经验的人能快速入门上手。题主觉得很多概念不懂太正常了,要是看看教程就能把django或者任意一个框架就弄明白,那确实是天资聪颖,骨骼清奇,实在是百年难得一遇的练武奇才,不,编程奇才!之于是不是需要继续复习,我个人觉得,如果你没有什么极为强烈的目的或者要应用于某个项目的话,那就别复习了。为什么这么说呢,如果不是有极强目的性的学习,大部分时候过一段时间就忘了。而且,仅仅停留于学习层面而不运用于实践的话,是很难谈得上会的。

问题2:有关django进阶学习的问题,我猜测题主可能不怎么懂web技术的对么?进阶django我觉得可以有两个方向:
方向一:从django源码入手,你可以仔细看看url是怎么映射的,模板的渲染是怎么实现的,django的认证系统是怎么实现的等等;
方向二:从web服务的各个环节入手,比如,django的模板渲染可以使用jinja2替代,如果觉得django的认证不和要求,怎么自己去定制?比如如何支持email、mobile、用户名、id四类方式同时登录认证?django如何与uwsgi结合使用?django的底层orm如何使用其他的orm框架等等。这些替换或者研究会让你从web开发的各个环节更深入的了解django的优势和不足。

问题3:实习生找工作,最重要的是自信,你需让面试官感受到你是有潜力的,你是有可塑性的,你是值得留下的!而这,和你会不会开发出一个网站,没有太大关系,你的技术只能说明你的过去,辉煌的过去抵不过一个充满希望的未来。而且,自学的那一丁点东西,在入职培训后或者参加实际工作中看起来是微不足道的。(不是说自学的东西没价值,只是工作中很多东西比较与针对性,深度和实用性比自学来的更恰到更适合,工作中相对某一点的研究也更深刻)

################################################################################
原本还想要写点我自己在工作中学习django的经历,不过午饭时间到了,饿饿饿……
如果题主有兴趣,我可以在介绍我的学习django、flask或者Python的经历
end 2015-10-23 中午
################################################################################

其实我是早上犯困的时候偷偷刷知乎才写的之前的回答,嘘……


感谢大家的支持,我大致讲讲我的django/Python学习经历,可能会有些废话,大家多见谅哈。

估计一些人是才毕业或者刚进入IT行业吧,新人或者才进入IT行业总有些类似的想法:我会什么技术好找工作?学什么语言好赚钱?这样的问题我也想过很多。我工作也才3年多而已,我没法回答学什么有前途/钱途,也没法回答学什么技术好找工作,更没法回答什么语言未来有希望。我能讲的只有我作为一个有那么一丁点工作经验的软件开发的切身经历而已。


我是12年夏天毕业的,本科数学。考过研,没考上,被计算机组成原理和计算机网路虐惨了。为什么从事计算机行业?两个原因:其一,计算机是数学的分支;其二,大学一开始就有那么个不是很清晰萌芽一样的模糊混沌也不知道为啥的想法——要写代码做研发。


大学毕业时候自己拥有IT相关的本钱:学过数据结构,考过二级C语言,学过数据库基础(只会写SELECT * FROM xxx, 到了WHERE基本就不会写了,ALTER、UPDATE、DELETE一写一个错那种),用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个问题其他朋友已经回答了很多。
既然知道要学django框架,那肯定是有些编程经验的,初学者应该学的是语言本身。所以所有内容都默认已经学会python,有一些编程经验。

我来说一说大概怎么学django吧。我开始学django是2015年12月26日,就是半个月前。
我首先是花了5天看完django1.9的文档。这5天就纯看文档了,半句代码都没敲。
Django documentation 有一点点英文基础配上字典就能看懂
Django 文档 如果英文实在不愿意看,就看这个,1.8.2的中文版本(不全)
文档本身就是介绍django的一些规定和用法。所以看文档的时候除了大略有个映像,知道哪个功能要怎么用以外,看完每一章还需要具体思考一下:
django的这种做法有什么优势?有没有可以更进的地方。
通过问题来回顾整章内容。

看完代码以后,需要一个小项目或者叫小练习来验证文档所学,我选择的是一个 多人博客。2015年12月30日正式开始。
文档中有个poll的应用,基本阐述清楚了django是一个怎样的架构。django中主要就views,model,url,template等内容。弄清楚这四块以后,想写东西就简单了。

首先要编写的肯定是model类,model通过ORM对应到数据库,这个类的编写也可以算是在设计数据库了。一对一,多对多,一对多等映射关系可能需要一些额外的数据库基础才能更好的理解。如果是初学,没学过数据库,那就先放弃这几种外键关系。

model编写完以后,我选择的是把界面写好,也就是template,但我前端太花时间,我不大愿意写,于是前端几乎完全照抄Vmaig开源在github上的博客。template的编写只需要注意到模板之间的集成就可以,其他没有难点。这个阶段要做的是,把页面写出来,不用管后台映射到模板的字段。

url路由是相对简单的一块,写模板的过程中,因为要看模板效果,就顺带把url.py写了,定好了地址映射到的网页。

最后一块写的是views部分,这部分是整个应用的逻辑部分,也是django比较复杂的一块。不过文档讲的很清楚,所以我上手就直接用了通用视图来写。这一块编写完成,再返回template把映射字段改好,基本就完工。

然后我嫌弃django后台实在太丑,我又查资料又问人,试了两天,发现不能把django的admin模块改成我想要的样子,于是遂放弃。决定重写后台,放弃admin模块。写到这的时候,我发现django不是很适合我,自由度不是很高,他功能很全,但有些地方要修改,不是那么容易。

于是和写前端一样,除了登录模块,其余后台模块、页面全都重写。
网站首页:
关于python Django与Flask学习的一些疑惑?
后台页面:
关于python Django与Flask学习的一些疑惑?后台页面完全参考自metronic模板。

编写过程中,一旦不会(忘了),立刻回头查阅文档。由于之前看完了django的文档,所以遇到问题的时候能快速定位到要查阅的地方。这就是先看完文档的优势,遇到问题的时候能清楚的知道django是否能解决这个问题?如果能,在哪有?

项目地址:zer0Black/zer0Blog: Blog by Django
题主可以参考参考。
自己写一个新的东西,绝对比照着别人的代码抄一遍,理解的透彻。

目前还没有写完,明天开始准备集成/修改django的权限模块。 谢邀。
  1. 一般给你这个答案:当然要复习,这还用问。不过你提了专门的教程,结合你提问3,可见你Python基础有一些,但不够牢。所以恐怕有些问题你复习那个教程无法解决,请先去补充基础知识。
  2. 进阶学习就是仿站(动手做),比如你把知乎你能看到的页面功能做一遍,哪里下不去手了短板就在哪里,然后去学就是。学编程跟练字一样,要临摹,临时临,摹是摹(自己搜索了解下区别咯),你现在还是摹的阶段,进阶就是要临。
  3. 一般新手学习Python Web框架是先从Flask开始,Flask够简单,你连书都买了,难道没发现比起Django,Flask容易学习很多么?书没看?先学Flask咯,觉得Flask小儿科了,再去用Django事半功倍。
  4. 你这是结果,你怎么实现的?原生JS还是jQuery?这差别很大。不过你这点是想问什么问题呢?没看懂。
  5. 不客气。
如果你是学生,建议从flask过渡到django,这样你有足够时间去折腾,而且flask的源码是公认比较pythonic的,可以深入学习下。 你先开发一个网站,就知道做到什么程度可以开发一个网站了。我的博客就是边学边开发的。 一、其实我觉得你缺乏一些关于服务器、http和mvc的背景知识,遇到看不懂的概念应该马上google之。或者看看相关的书。

这样做的好处是,先把一些概念性的东西理清之后,再换任何一种框架会快很多。

二、进阶就是把会用框架变成会写框架。读源码是个不错的选择,可以学到设计模式、网络编程,以及如何解析模板,如何拿反射来实现orm,如何写query parser等等这类奇技淫巧。dj太臃肿你可以看flask。记得看完定期写笔记。 我开始学习 Django 时候看了各种资料,现在想想唯一能记住也是帮助最大的就是官方文档那个投票的例子,原理和概念讲的清晰明了,也能保证学习的是新版,非常适合入门,一定要看英文原版,我当时开着翻译软件、Pycharm、百度谷歌,一边写代码一边看效果思考,没有框架的概念没有编程经验只会点 Python 语法,很多地方想不明白,这消磨了我不少学习锐气,多做多想几遍,后来去网上查想了许久, MTV 的概念也越来越清晰,建议,第一不要怕英文麻烦,翻译的不准会害了你更麻烦,第二界面美观和显示效果是前端的事,不在 Django 学习范围,不要强求。 是时候你自己写一个基于wsgi标准web框架了,有助于你更透彻的了解flask和django,写web框架绝对比你想像的简单的多,难度大抵相当于组装宜家的家具 Python web推荐直接上flask,谁用谁知道。flask并不像楼上说的那样只能用于小网站,因为flask绝大部分功能都有现成拔插件,根本不用自己开发。扩展后做大型网站毫无压力。
django太过于臃肿,被flask替代是大势所趋。django目前最大的优势就是开源项目多。所以新手入门,如果时间充裕,直接flask,时间紧的话先找些小型django开源项目一边改一边试。
最后 ide推荐sublime和vs2013+ptvs,前者小巧,后者调试方便。个人认为比pycharm好用。
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage