网站性能检测评分
注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。
python怎么做后端
7天入门python全栈工程师05——玩溜后端 公司视频课程
为什么是博客后台呢?而不是其他什么大型网站?原因很简单,每个人都有自己的需求,很多深度的定制都是因人而异,而所有大型网站都是通过不同小功能模块组合而成的,这里开发个人博客后台简单又实用。说白了就是围绕着数据库增删改查四个操作,按照不同的需求实现不同的输出。
1、创建项目
项目结构2、编写数据模型
后台管理数据模型主要是用户权限和用户信息记录,保存可以登录后台信息。
数据模型3、博客数据模型主要记录日志类型,日志内容,留言信息。
前端数据模型4、创建后台管理视图
图略,具体代码参考https://gitlab/lanmaokafei/fullstack_blog
5、重点分析,除了围数据库绕增删改查,还要保存用户上传的图片。
处理上传文件方法6、模板设计,flask模板使用了jinja2的处理引擎,可以自行定义,这里选择了jinja2的引擎。定义一个基页,然后其他页面引用这个基页就能很好的控制前端模板样式。原理如下
基页模板原理7、处理提交后有Gitlab-runner自动测试集成
自动集成docker镜像8、运行镜像结果
最终效果未完待续...
更详细内容请关注由电子工业出版社2017年10月出版的《python全栈开发实战》全书400幅图,包含各种坑解决方法。
十年编程大牛的Python笔记,如何系统的来学习Python 推广视频课程
在我刚学Python的时候,每天除去白天上班,为了保证学习质量,我会每天花三四个小时来学习,天天如此。所有的文档资料,问答我都尽量去看英文版,这可以省下大量时间。在我做的网站上线后,3天大约有9000多人访问了这个网站,我在后台看着日志的时候,内心不免有些激动,我想将自己的经验写下,希望帮助鼓励到那些想学习Python但无从下手的朋友。
我的自学编程之路
1、基础
刚开始我对搭建网站一脸懵逼。为了给自己快速建立一个框架,我在电脑面前呆了整整一天,了解了HTML,CSS,JavaScript,Ajax,jQuery,React,SQL,服务器脚本等等知识,不奢望说要全学会精通,只是了解每一项都是用来干嘛的,然后建立起了一个学习路线图,这样就知道做一个Web App大概需要哪些技能知识,安排好学习的规划顺序。小编在这里推荐两个资源:
Python基础知识:笨方法学Python
Web App基础知识:张秋怡的答案写的通俗易懂
有了这个学习路线图,我了解了前端三大必备技能HTML、CSS、JavaScript,大概花了10天的样子把W3Schools上的相关内容都看了一遍,然后写了几个网页,感觉自己写的很抠脚。于是我根据知乎豆瓣上的推荐,购买了《JaveScript DOM》、《Head First HTML与CSS》两本书,边看边把案例过了遍。
W3Schools: w3schools
JavaScript:JavaScript DOM编程艺术
HTML、 CSS: Head First HTML与CSS
前端需要我去慢慢学习,看完那些资料后,虽然我能写出还不错的页面,但我知道很多都不符合标准,更别说代码风格啥的。这些只有在自己不断地积累和增加代码量中来提高。我明白服务器端需要耗费太多时间,所以发现我能够按构思勉勉强强来实现网页后,我就专心学服务器端去了。但是每天还是会抽时间写一写网页,免得手生了嘛。
2、服务器端
首先要了解什么是HTTP协议,就是服务器和浏览器之间是如何通信的。比如当你在浏览器里输入网址按回车一直到网页在你浏览器显示的这个过程期间,浏览器和浏览器之间发生了什么事情。这是非常有意思的内容,了解这些内容之后,你就会知道像有时候为什么会有404页面?在搜索引擎搜索框里输入的关键词是怎么提交到百度服务器的?为何很多网站重新登录就不用输入密码?等等相关的问题了。
在了解过HTTP协议后,我就开始入迷了。很多看似晦涩难懂的现象其实原理很简单,然后你会被吸引。之后就开始到我花时间最多的部分——后端开发。还记得当时在了解 Web开发的 MVC(Model-View-Controller)模式后,有一种灰常激动的感觉,感觉太有意思了(大家别喷哈,年轻人没见过世面)。
我们每个人的主页都是差不多的布局风格,比如菜单搜索栏、左边显示动态、颜色分割等,右边是个人信息等,具体的内容却因人而异——每个人的名字、头像、动态都是不一样的。那么问题来了,知乎是怎样保证我们每个人所看到的都是自己的主页呢?
你可以把这个相同的布局想象成一个模板,里面有一个个空格子,在你登陆页面的时候,想象一下你电脑里有无数个小人根据你输入的账号从知乎后台数据库里取出你的填写过的所有信息,然后对应模板规定好的位置,把相应内容填进去。这些小人动作很快,以至于让你感觉这是瞬间完成的。
之前说的模板是 MVC 中的 V(View),它负责显示。这样做好处在于如果知乎有一天突然想改变个人主页风格,那就只要改这一个模板,然后所有的注册用户其主页就相应变化了,模板是公用的,省了很多事情?(早期的Web开发还需要一个个用户去改,超级麻烦)
这些小人除去摆放内容,它们主要负责业务逻辑,一般叫做 Controller,也就 V(View);比如在你登陆时,这些小人需要检查你的用户名是否准确,准确的话它们要去数据库中取出你的请求信息,错误的话它们要拦截你的登陆。它们的职责太多无法一一去列举。而在实际中,这些小人做的事情就是Python做的事情。
MVC 中的 Model 就是传给 View 的数据,包括用户名、头像、动态等数据。这些数据在服务器上以数据库表格的形式存在,我们可以把它们想象成许多不同的excel表格,每个表格储存着不同的信息,如用户个人信息,回答,评论等等,而这些表格之间却又彼此联系,当你在跳转知乎中不同网页的时候,那些小人就会根据你的需求,组合对应表格取出对应数据,把他们放到模板对应空格中,发送给浏览器。浏览器再根据你写的CSS,用不同的大小、颜色等等,将数据非常漂亮的显示出来。
这样做有什么好处呢?虽然最终在浏览器看到的是一个完整页面,但在后端逻辑上它们是区分开的——视图(V)、模型(M)和控制器(C)他们的区分就保证了非常高的可维护性——我随时可以修改主页显示看到效果,我还可以随时加入一些业务逻辑。
当你的学习坚持到这里了,那么我要恭喜你。可能你知道一些成熟常用的Django,Flask等Python Web框架了,可能你看到一些小白教程直接教你使用,可能大部分人会觉得没有必要重复造轮子。
原本为了省事,我准备直接用框架。但是我在设计数据库时,那时候在看SQLAlchemy文档,觉得自己的项目SQLAlchemy太复杂了,所以我决定写自己的ORM,当时对我来说是一件非常有难度的事。于是乎我投入了大量精力每天看关于SQL和Python的教程资料,《Python核心编程》给予我很多启发。在完成了ORM后,又去写URL处理函数,没有去用现成的Web框架。
如今回头去看,我觉得这段时间的造轮子是我提升编程能力最快的时期。像为了写ORM,就得去花大量时间学习SQL,了解Python里面的metaclass,要是我用一个现成的框架,很有可能就偷懒不去关注很多小细节。不出问题的话还好,出问题就GG。造轮子让我在一开始就必须去构思整个框架,我必须要考虑到所有情况,就只能不断的强迫自己去完善知识体系,跟别人的代码对比来精进自己的,尽管这个过程中充满了挫败感,但是所获得的成就和快乐却是无可比拟的。
在这过程中还牵涉到部署,我的网站是在Linux上跑的。部署的话可以在网上搜一下教程。这里我就不多说了。这些是我大概的学习路线,过程中充满磕磕绊绊,网站虽然上线了,运行还算比较顺利,但以一个程序员的标准要求自己的话,自己还是非常菜鸟的。但我不像以前那样惧怕技术了,就比如你明白魔术的原理之后,就会更多去的思考这个原理本身。
自学编程需要注意的问题
现在很多人都推荐将Python作为第一门入门语言,因为其语法简单。不过这话只说了一半,Python虽然容易上手,对初学者没什么门槛。但是对于小白最大的门槛在于系统知识,这个就跟你用什么语言没有任何关系了。就像很多人看完Python语法,感觉好简单,但转头在用Python标准库时,才发现自己看文档都看不懂。标准库提供了Python和其它系统功能的接口,最终实现了Python和系统之间的互动。读标准库需要很多系统知识,如:操作系统、数据库、socket编程、进程和线程、网络协议等等,而这些东西对编程小白构成了比较高的门槛,但只有学会这些东西,你才能真正释放出Python的真正的威力。
这是我觉得自己的经历对编程小白有价值的原因之一。设计一个动态的网页是非常不错的的练手Project。建立网页(Web App)会让你自己了解从在浏览器输入地址回车到网页显示在浏览器的过程中,浏览器,服务器,网络都做了些什么。具体到技术层面,迫使你不得不去学前端的HTML,CSS和JavaScript,后端的操作系统,脚本,数据库等等。在这个过程中可以促使自己主动学习上面那些系统知识,等再做下一个项目,就不会像现在这样不知道怎么下手,有能力来进行一些技术性的探讨,所以说我觉得这是一个非常好的练手项目。
1、一定要多补充理论知识
大多数人会强调边做项目边学习,这也是我使用的学习方式。在这种方式中,我们不断犯错,然后去改正……学习效率确实高。但很多人却走了极端,不注意理论知识的学习。最后发现自己去百度的能力超级厉害,然而真正的编程能力没有一点提升。出现这种情况,你就需要反思一下了。
原因大概就两点:
①、太依赖各种成熟的框架,结果编程变成了用「胶水」去粘合不同的框架来完成你自己的需求。比如你的Web App用了SQLAlchemy,自己虽然不太懂SQL,但网站跑的还行。但是这时候数据库出现问题,你怎么办呢?GG吧
②、你可能沉浸在做项目的快感中无法自拔,却忽略了学习理论知识。做项目过程中虽然很困难,但是强烈的成就感让你很爽,沉浸其中。我觉得这是非常愚蠢的。半路出家的程序员没有系统的学习过,没有形成一个自己的知识体系,假如你不懂算法复杂度,数据结构,操作系统这些理论,那注定你所能达到的高度非常有限。所以我们在每天做项目的同时,一定一定要保证抽出时间,来恶补一下理论知识。这些书在知乎豆瓣都太多总结,可以去搜搜看。
2、别去纠结那些毫无意义的问题,像哪个框架好,某某语言比某某语言好呢这种没营养的问题。前期确定好练手项目后,就专心去积累代码量基础知识。那些你现在还看不懂感觉超级吊的技术慢慢的就能明白原理做法了,没有基础,再炫酷吊的不要不要的框架对你而言都是天书,从小就学的万丈高楼平地起都被抛之脑后了。
3、学会去问。好问题建立于你已经实践过或者思考过之后再问出来的,这不仅是对自己的一种负责,也是对他人的一种尊重。别有问题就百度或者直接甩给别人:「这个问题是怎么回事啊?」,「我不明白你能不能帮我看看……」。
4、最后有条件尽量学好英语,这样看一些官方文档,国外网站都很方便,也可以及时学到国外一些新技术。
好了 小编我就啰嗦到这里,先吃饭去了。
python前端和后端数据交互,tornado框架入门,初学小试牛刀! 公司视频课程
Python前端和后端是如何交互的,怎么用tornado框架快速搭建前端和后端数据交互?
前端与后端的数据交互,最常用的就是GET、POST,比较常用的用法是:提交表单数据到后端,后端返回json
前端的数据发送与接收1)提交表单数据2)提交JSON数据后端的数据接收与响应1)接收GET请求数据2)接收POST请求数据3)响应请求下面是python前端和后端数据交互的例子,利用ttornado框架快速搭建前端和后端数据交互,代:码实现如下:
import tornado.httpserverimport tornado.ioloopimport tornado.optionsimport tornado.webfrom tornado.options import define,optionsdefine('port',default=8000,help='run port', type=int)class AbcIndexHandler(tornado.web.RequestHandler):def get(self):self.write('Hello tornado')if __name__ =='__main__':tornado.options.parse_command_line()app = tornado.web.Application(handlers=[(r'/abc',AbcIndexHandler),])http_server =tornado.httpserver.HTTPServer(app)http_server.listen(options.port)tornado.ioloop.IOLoop.instance().start()在IE里输入地址加配置好的端口号,效果如下:
1、要搞懂区别,我们首先要知道他们是什么。
Web前端: 顾名思义是来做Web的前端的。我们这里所说的前端泛指Web前端,也就是在Web应用中用户可以看得见碰得着的东西。包括Web页面的结构、Web的外观视觉表现以及Web层面的交互实现。
Web后端:后端更多的是与数据库进行交互以处理相应的业务逻辑。需要考虑的是如何实现功能、数据的存取、平台的稳定性与性能等。
2、web前端分为网页设计师、网页美工、web前端开发工程师。首先网页设计师是对网页的架构、色彩以及网站的整体页面代码负责网页美工只针对UI这块的东西,比如网站是否做的漂亮,web前端开发工程师是负责交互设计的,需要和程序员进行交互设计的配合。
3、 web前端需要掌握的有脚本技术javascript p+CSS现下最流行的页面搭建技术,ajax和jquery以及简单的后端程序等。 后端的话可供开发的语言有 asp、php、jsp、.NET 这些后端开发语言的话搭建环境都不一样
4、实际的开发过程中,前端、后端开发人员的定位如下:
1)前端开发人员:精通JS,能熟练应用JQuery,懂CSS,能熟练运用这些知识,进行交互效果的开发。
2)后端开发人员:会写Java代码,会写SQL语句,能做简单的数据库设计,会Spring和iBatis,懂一些设计模式等。
python的tornado框架开发项目快速,性能比较好,今天初学框架分享的比较简单,大佬不要笑话了,欢迎留言跟小编一起学习Python和交流,祝大家早日成为Python大牛!
Python、Java、PHP……后端选型用什么语言?怎么选Web框架? 企业视频课程
在进行后端选型的时候,要选择的实际上是一个框架。后端领域所使用的技术和框架已经趋于稳定,我们只需要框架。当有多个框架适合时,再选择适合的语言。本文选自《全栈应用开发:精益实践》
不得不指出的是,当我们喜欢一种语言的时候,我们可能会偏爱于在这门语言里寻找可用的方案。这自然是有好有坏,好的一点是:我们可以成为这门语言的专家;不好的一点是:选择的可能不是最合适的方案。
下面先探索一下可用的语言,以及它们对应的Web 框架(以下内容均为个人观点)。
JavaScript
按照当前的流行趋势来看,JavaScript 是一门性价比非常高的语言。因为只要是Web,就会有前端,只要有前端,就需要有JavaScript。与此同时,Node.js 在后台中的地位已经愈发重要了。对一般的项目而言,可以使用它来完成前端和后台,除此之外,还有移动应用。
在那些可以使用浏览器来运行的设备上,我们都可以使用 JavaScript 来开发使用,例如:
使用Node.js 作为后台语言,Express、Koa 等作为后台MVC 框架,再选择一个前端框架来实现前台。使用基于浏览器内核的桌面应用Electron,加上Node.js 生态系统里的模块来实现桌面应用。使用混合应用移动框架Cordova,混合应用框架Ionic 来实现跨平台的移动应用。使用Tessel 和Ruff 等硬件来开发移动应用。
人们使用 WebView 和JavaScript 来开发应用的很大一部分原因是成本比较低。除了可以高效地开发UI,还支持跨平台运行,即只需要编写一次代码就可以在不同的操作系统上运行,并且当应用对性能要求不高时,只要适当地优化,它就可以表现得相当不错。
在这门语言里,有两个后台 MVC 框架比较流行。
Express:是在Node.js 上最早的MVC 框架,它由Ruby 上的轻量级框架Sinatra启发而来的。其框架本身封装了大量实用的功能,核心特性是使用中间件来处理HTTP 请求。Koa:是由Express 的核心开发者基于 ES6 新特性打造的新框架。与Express相比,去除了一些框架自带的功能,更加轻量级,可以让开发者有更多的选择。
当然,这也意味着需要用户自己去搭建这些环境。
简单对比一下两者,Express 发展得比较早,其生态系统比较丰富,很容易找到所需要的插件。Koa 则基于ES6 语言带来一些新的特性,实时解决旧语言的一些问题,如回调等。
Python
Python 诞生得比较早,其语言特性是做事情只有一种方法,这个特点也决定了这门语言很简单。与JavaScript 相比,它仍是一门性价比非常高的语言,只是它不能在前端运行。
Python 是一门简洁的语言,有大量的数学、科学工具、人工智能的库,这意味着在不远的将来它会发挥更大的作用。同时在Web 开发领域也有广泛的应用,除了正常的Web开发,它还在网络爬虫中广受欢迎。
同样,在Python 语言里也有两个不错的框架可以选择,其中的Django 是重量级框架,Flask 则是轻量级框架。
Django:最早是被应用于内容管理系统而开发的,其框架里自带了相当多的组件:ORM、表单序列化及验证系统、后台系统、缓存框架、中间件支持等。在其官网上宣称是:The Web framework for perfectionists with deadlines,它既可以满足完美主义者,又可以在截止期限前交付软件。Flask:是一个轻量级的框架,它只有简单的核心部分。换句话说,你可以按自己的需要添加ORM、用户认证、文件上传等功能。在今天来看,它的生态系统也相当丰富,可以完成绝大部分功能。
选择Flask 而不是选择Django 的原因是:Django 本身规定好了一系列的规范和习惯。
因而在编程时,我们只需要按步骤一步步往下走即可。
本书采用 Django 作为Web 开发框架的主要原因是,它适合作为CMS 框架,并且提供了丰富的组件功能,如用户权限管理、自带后台管理系统、ORM 等。
Java
在今天看来,Java 仍然受企业欢迎,除了在企业级Web 系统开发上,它还在Android应用的开发上绽放光彩。
在校期间,笔者一点儿也不喜欢 Java。后来才发现,我从 Java 中学到的东西比从其他语言中学的东西还多。如果 Oracle 不毁坏 Java,那么它会继续存活很久。我可以用JavaScript 造出各种我想要的东西,但是通常我无法保证它们是优雅地实现。过去人们在Java 上花费了很多时间,或在架构上,或在语言上,或在模式上。由于这些投入,都给了人们很多启发。这些都可以用于新的语言和新的设计,毕竟没有什么技术是独立于旧的技术产生的。
由于在 Java 语言里,笔者主要接触的是 Spring 框架,因此下面讨论一下 Spring。
Spring MVC:是由Spring 框架提供的构建 Web 应用程序的全功能 MVC 模块。由于框架本身高度可配置,即可以直接使用编写 XML 而不是 Java 来实现功能。它是一个典型的 MVC 框架,并且也是一个纯正的servlet 系统。Spring Boot:其作用在于创建和启动新的基于 Spring 框架的项目。系统本身做好了对不同框架的配置与集成,我们只需要对其配置,并编写少量的代码即可。
如果你正在考虑使用 Spring 框架,建议使用 Spring Boot。
PHP
PHP 是一门很容易上手的语言,由于其容易上手,并且发展得比较成熟。因此,有相多当的个人网站使用它作为开发语言,如 Facebook 这样大流量的网站也在使用它。另外,不得不提及的是 WordPress 已经占领了 CMS 市场超过一半的份额,并且它也占领了全球网站的四分之一。WordPress 原生是为博客系统而创建的开源框架,由于博客系统和内容管理系统在功能上很多是相似的,因此它成了最具知名度的内容管理系统(contentmanagement systemCMS)。
在这里并不基于 WordPress 来开发内容管理系统,因为它已经是一个相当成熟的框架了。如果你需要一个博客系统或者内容管理系统,首选 WordPress,然后才是自己编写。
PHP 在框架方面有比较多的选择,遗憾的是,笔者只对Laravel 比较了解。它是在PHP 5.3 之后开发的新框架,其类似于Ruby on Rails—为PHP 程序员提供快速开发的机制—提供快速开发的工具集,如生成代码、数据迁移、ORM 等。
Ruby
Ruby 是一门优美而巧妙的语言,它可以使编写出来的代码看上去更自然、简洁,更具有表达力,因此深受程序员欢迎。早期 Ruby 语言的应用场景特别少,直至Ruby OnRails 的出现。它是严格按照MVC 结构开发的Web 开源框架,其致力于提升程序员的快乐感和生产效率—快速创建页面、模板和查询功能等。不过如今由于可维性和性能的问题,它正在逐渐被替换。只是对初创公司来说,它的开发效率仍使得它是一个不错的选择,随后在业务稳定后使用其他框架来替换。
同样,由于Ruby On Rails 是一个重量级的选择,Ruby 程序员也推出了自己的轻量级框架 Sinatra。它是一个基于Ruby 语言的DSL(领域专属语言),由于其代码行数少,且简单、简洁,可以很容易深入理解框架并对其做出定制。
其他
除了上面提到的语言,还有一些语言也很不错,如Go、Scala 等。限于作者能力有限,以及篇幅的原因,在此就不展开详细讨论。
选择框架和语言后,还需要在选型的时候考虑数据存储的问题。
《全栈应用开发:精益实践》
构建全栈Web开发知识体系,含前端后端技术选型、构建系统、上线部署、数据分析等内容。
十年编程大牛的Python笔记,如何系统的来学习Python 行业视频课程
在我刚学Python的时候,每天除去白天上班,为了保证学习质量,我会每天花三四个小时来学习,天天如此。所有的文档资料,问答我都尽量去看英文版,这可以省下大量时间。在我做的网站上线后,3天大约有9000多人访问了这个网站,我在后台看着日志的时候,内心不免有些激动,我想将自己的经验写下,希望帮助鼓励到那些想学习Python但无从下手的朋友。
我的自学编程之路
1、基础
刚开始我对搭建网站一脸懵逼。为了给自己快速建立一个框架,我在电脑面前呆了整整一天,了解了HTML,CSS,JavaScript,Ajax,jQuery,React,SQL,服务器脚本等等知识,不奢望说要全学会精通,只是了解每一项都是用来干嘛的,然后建立起了一个学习路线图,这样就知道做一个Web App大概需要哪些技能知识,安排好学习的规划顺序。小编在这里推荐两个资源:
Python基础知识:笨方法学Python
Web App基础知识:张秋怡的答案写的通俗易懂
有了这个学习路线图,我了解了前端三大必备技能HTML、CSS、JavaScript,大概花了10天的样子把W3Schools上的相关内容都看了一遍,然后写了几个网页,感觉自己写的很抠脚。于是我根据知乎豆瓣上的推荐,购买了《JaveScript DOM》、《Head First HTML与CSS》两本书,边看边把案例过了遍。
W3Schools: w3schools
JavaScript:JavaScript DOM编程艺术
HTML、 CSS: Head First HTML与CSS
前端需要我去慢慢学习,看完那些资料后,虽然我能写出还不错的页面,但我知道很多都不符合标准,更别说代码风格啥的。这些只有在自己不断地积累和增加代码量中来提高。我明白服务器端需要耗费太多时间,所以发现我能够按构思勉勉强强来实现网页后,我就专心学服务器端去了。但是每天还是会抽时间写一写网页,免得手生了嘛。
2、服务器端
首先要了解什么是HTTP协议,就是服务器和浏览器之间是如何通信的。比如当你在浏览器里输入网址按回车一直到网页在你浏览器显示的这个过程期间,浏览器和浏览器之间发生了什么事情。这是非常有意思的内容,了解这些内容之后,你就会知道像有时候为什么会有404页面?在搜索引擎搜索框里输入的关键词是怎么提交到百度服务器的?为何很多网站重新登录就不用输入密码?等等相关的问题了。
在了解过HTTP协议后,我就开始入迷了。很多看似晦涩难懂的现象其实原理很简单,然后你会被吸引。之后就开始到我花时间最多的部分——后端开发。还记得当时在了解 Web开发的 MVC(Model-View-Controller)模式后,有一种灰常激动的感觉,感觉太有意思了(大家别喷哈,年轻人没见过世面)。
我们每个人的主页都是差不多的布局风格,比如菜单搜索栏、左边显示动态、颜色分割等,右边是个人信息等,具体的内容却因人而异——每个人的名字、头像、动态都是不一样的。那么问题来了,知乎是怎样保证我们每个人所看到的都是自己的主页呢?
你可以把这个相同的布局想象成一个模板,里面有一个个空格子,在你登陆页面的时候,想象一下你电脑里有无数个小人根据你输入的账号从知乎后台数据库里取出你的填写过的所有信息,然后对应模板规定好的位置,把相应内容填进去。这些小人动作很快,以至于让你感觉这是瞬间完成的。
之前说的模板是 MVC 中的 V(View),它负责显示。这样做好处在于如果知乎有一天突然想改变个人主页风格,那就只要改这一个模板,然后所有的注册用户其主页就相应变化了,模板是公用的,省了很多事情?(早期的Web开发还需要一个个用户去改,超级麻烦)
这些小人除去摆放内容,它们主要负责业务逻辑,一般叫做 Controller,也就 V(View);比如在你登陆时,这些小人需要检查你的用户名是否准确,准确的话它们要去数据库中取出你的请求信息,错误的话它们要拦截你的登陆。它们的职责太多无法一一去列举。而在实际中,这些小人做的事情就是Python做的事情。
MVC 中的 Model 就是传给 View 的数据,包括用户名、头像、动态等数据。这些数据在服务器上以数据库表格的形式存在,我们可以把它们想象成许多不同的excel表格,每个表格储存着不同的信息,如用户个人信息,回答,评论等等,而这些表格之间却又彼此联系,当你在跳转知乎中不同网页的时候,那些小人就会根据你的需求,组合对应表格取出对应数据,把他们放到模板对应空格中,发送给浏览器。浏览器再根据你写的CSS,用不同的大小、颜色等等,将数据非常漂亮的显示出来。
这样做有什么好处呢?虽然最终在浏览器看到的是一个完整页面,但在后端逻辑上它们是区分开的——视图(V)、模型(M)和控制器(C)他们的区分就保证了非常高的可维护性——我随时可以修改主页显示看到效果,我还可以随时加入一些业务逻辑。
当你的学习坚持到这里了,那么我要恭喜你。可能你知道一些成熟常用的Django,Flask等Python Web框架了,可能你看到一些小白教程直接教你使用,可能大部分人会觉得没有必要重复造轮子。
原本为了省事,我准备直接用框架。但是我在设计数据库时,那时候在看SQLAlchemy文档,觉得自己的项目SQLAlchemy太复杂了,所以我决定写自己的ORM,当时对我来说是一件非常有难度的事。于是乎我投入了大量精力每天看关于SQL和Python的教程资料,《Python核心编程》给予我很多启发。在完成了ORM后,又去写URL处理函数,没有去用现成的Web框架。
如今回头去看,我觉得这段时间的造轮子是我提升编程能力最快的时期。像为了写ORM,就得去花大量时间学习SQL,了解Python里面的metaclass,要是我用一个现成的框架,很有可能就偷懒不去关注很多小细节。不出问题的话还好,出问题就GG。造轮子让我在一开始就必须去构思整个框架,我必须要考虑到所有情况,就只能不断的强迫自己去完善知识体系,跟别人的代码对比来精进自己的,尽管这个过程中充满了挫败感,但是所获得的成就和快乐却是无可比拟的。
在这过程中还牵涉到部署,我的网站是在Linux上跑的。部署的话可以在网上搜一下教程。这里我就不多说了。这些是我大概的学习路线,过程中充满磕磕绊绊,网站虽然上线了,运行还算比较顺利,但以一个程序员的标准要求自己的话,自己还是非常菜鸟的。但我不像以前那样惧怕技术了,就比如你明白魔术的原理之后,就会更多去的思考这个原理本身。
自学编程需要注意的问题
现在很多人都推荐将Python作为第一门入门语言,因为其语法简单。不过这话只说了一半,Python虽然容易上手,对初学者没什么门槛。但是对于小白最大的门槛在于系统知识,这个就跟你用什么语言没有任何关系了。就像很多人看完Python语法,感觉好简单,但转头在用Python标准库时,才发现自己看文档都看不懂。标准库提供了Python和其它系统功能的接口,最终实现了Python和系统之间的互动。读标准库需要很多系统知识,如:操作系统、数据库、socket编程、进程和线程、网络协议等等,而这些东西对编程小白构成了比较高的门槛,但只有学会这些东西,你才能真正释放出Python的真正的威力。
这是我觉得自己的经历对编程小白有价值的原因之一。设计一个动态的网页是非常不错的的练手Project。建立网页(Web App)会让你自己了解从在浏览器输入地址回车到网页显示在浏览器的过程中,浏览器,服务器,网络都做了些什么。具体到技术层面,迫使你不得不去学前端的HTML,CSS和JavaScript,后端的操作系统,脚本,数据库等等。在这个过程中可以促使自己主动学习上面那些系统知识,等再做下一个项目,就不会像现在这样不知道怎么下手,有能力来进行一些技术性的探讨,所以说我觉得这是一个非常好的练手项目。
1、一定要多补充理论知识
大多数人会强调边做项目边学习,这也是我使用的学习方式。在这种方式中,我们不断犯错,然后去改正……学习效率确实高。但很多人却走了极端,不注意理论知识的学习。最后发现自己去百度的能力超级厉害,然而真正的编程能力没有一点提升。出现这种情况,你就需要反思一下了。
原因大概就两点:
①、太依赖各种成熟的框架,结果编程变成了用「胶水」去粘合不同的框架来完成你自己的需求。比如你的Web App用了SQLAlchemy,自己虽然不太懂SQL,但网站跑的还行。但是这时候数据库出现问题,你怎么办呢?GG吧
②、你可能沉浸在做项目的快感中无法自拔,却忽略了学习理论知识。做项目过程中虽然很困难,但是强烈的成就感让你很爽,沉浸其中。我觉得这是非常愚蠢的。半路出家的程序员没有系统的学习过,没有形成一个自己的知识体系,假如你不懂算法复杂度,数据结构,操作系统这些理论,那注定你所能达到的高度非常有限。所以我们在每天做项目的同时,一定一定要保证抽出时间,来恶补一下理论知识。这些书在知乎豆瓣都太多总结,可以去搜搜看。
2、别去纠结那些毫无意义的问题,像哪个框架好,某某语言比某某语言好呢这种没营养的问题。前期确定好练手项目后,就专心去积累代码量基础知识。那些你现在还看不懂感觉超级吊的技术慢慢的就能明白原理做法了,没有基础,再炫酷吊的不要不要的框架对你而言都是天书,从小就学的万丈高楼平地起都被抛之脑后了。
3、学会去问。好问题建立于你已经实践过或者思考过之后再问出来的,这不仅是对自己的一种负责,也是对他人的一种尊重。别有问题就百度或者直接甩给别人:「这个问题是怎么回事啊?」,「我不明白你能不能帮我看看……」。
4、最后有条件尽量学好英语,这样看一些官方文档,国外网站都很方便,也可以及时学到国外一些新技术。
好了 小编我就啰嗦到这里,先吃饭去了。