1.Linux进程管理:深入task_ struct字段
2.Nginx源码分析 - HTTP模块篇 - HTTP模块的源码初始化
3.Nginx源码分析 - Event事件篇 - Nginx的Event事件模块概览
4.python多少个框架(2023年最新分享)
5.wordpressådjangoåªä¸ªå¥½ï¼
Linux进程管理:深入task_ struct字段
深入解析Linux进程管理:task_struct字段探索
高怡香、徐晗博,结构西安邮电大学研一在读,源码操作系统和Linux内核爱好者,结构热衷于探索操作系统底层工作原理和内核编程。源码
通过top命令,结构中值滤波 c源码可以监视即时的源码进程状态,便于观察以特定用户身份运行的结构进程。按u键输入用户名,源码只显示相关进程信息。结构按h键获取帮助。源码
task_struct结构体是结构操作系统用于管理进程的重要组成部分,在/include/linux/sched.h中定义。源码每个进程对应一个task_struct实例。结构
Linux内核源码分析之task_struct结构分析
剖析Linux内核进程管理
Linux内核,源码进程调度器的实现,完全公平调度器 CFS
免费学习地址:Linux C/C++开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)
需要C/C++ Linux服务器架构师学习资料加qun 获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享
通过遍历系统进程链表,访问每个进程的PCB(task_struct),可以打印进程相关属性。
task_struct成员众多,重点了解:进程ID、状态、优先级、时间切片、调度器等。
find_get_pid()与pid_task()接口函数用于快速查找指定PID对应的进程结构体。
打印子进程和兄弟进程,理解parent/children/sibling三者关系,网站拍照神器源码实现代码需考虑进程实际存在。
设置两个内核模块参数,实现打印特定进程的子进程信息或兄弟进程信息。
eBPF技术应用于task_struct字段打印,对libbpf-bootstrap示例文件进行学习与实践。
实验总结,复习链表与模块传参知识,提升编程能力。解决函数版本问题,学习新函数并应用。在进程亲属关系理解上获得指导,成功实现打印。
Nginx源码分析 - HTTP模块篇 - HTTP模块的初始化
本章开始深入分析Nginx的HTTP模块,重点关注初始化过程。
HTTP模块初始化主要在src/http/nginx_http.c文件中的ngx_http_block函数完成。
理解HTTP模块初始化前,先审视nginx.conf中HTTP大模块配置。配置包括四层结构,最外层的http模块是核心模块,类型NGX_CORE_MODULE,属于Nginx的基本组件。
核心模块启动时,会调用http模块配置解析指令函数:ngx_http_block。通过该函数解析配置文件,实现初始化。
在阅读本章前,建议回顾Nginx源码分析 - 主流程篇 - 解析配置文件,以便更好地理解配置文件解析过程。
接下来,将详细解析ngx_http_block函数,重点关注其在初始化过程中的作用。下一章将深入探讨:ngx_http_optimize_servers。
对于希望深入学习Linux C/C++开发、后端、音视频、游戏、嵌入式、高性能网络、存储、基础架构、安全等领域的读者,推荐免费学习资源:Linux C/C++开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)。关注群获取学习资料(资料涵盖C/C++、Linux、golang技术、Nginx、jdk指导源码ZeroMQ、MySQL、Redis、fastdfs、MongoDB、ZK、流媒体、CDN、P2P、K8S、Docker、TCP/IP、协程、DPDK、ffmpeg等),免费分享。
Nginx源码分析 - Event事件篇 - Nginx的Event事件模块概览
深入分析Nginx的Event事件模块,从nginx_event.c文件中开始理解事件分发器ngx_process_events_and_timers的机制。在前一章中,我们已经触及到事件模块的一些基础概念,通过这个函数,我们能见到Nginx事件流程的启动。
本章将全面解析Nginx的event模块,对不熟悉网络IO模型的读者,建议先学习这一领域知识。同时,对于Linux下的epoll模型若感到陌生,请先进行深入学习。一切准备工作完成后,我们便可以开始深入探究。
在event模块中,几个常见且至关重要的数据结构包括:
1. ngx_listening_s:此结构专门用于管理监听连接的socket。
2. ngx_connection_s:存储与连接相关的数据及读写事件。
3. ngx_event_s:封装了事件处理的相关信息。
为了帮助大家更深入地理解Nginx源码,推荐以下视频内容:
视频一:从9个组件开始,教你如何高效阅读nginx源码。
视频二:深入理解epoll的原理与使用,以及它相较于select/poll的优越性。
视频三:探讨红黑树在不同场景中的应用,从Linux内核到Nginx源码的关联。
推荐免费学习资源:Linux C/C++开发(涵盖后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全等领域),获取方法如下:加入群获取C/C++ Linux服务器架构师学习资料(包括C/C++、Linux、golang技术、Nginx、php简单出售源码ZeroMQ、MySQL、Redis、fastdfs、MongoDB、ZK、流媒体、CDN、P2P、K8S、Docker、TCP/IP、协程、DPDK、ffmpeg等资料),免费分享。
python多少个框架(年最新分享)
导读:很多朋友问到关于python多少个框架的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!Python几种主流框架比较从GitHub中整理出的个最受欢迎的Python开源框架。这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等。\x0d\\x0d\Django:PythonWeb应用开发框架\x0d\Django应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。\x0d\\x0d\Diesel:基于Greenlet的事件I/O框架\x0d\Diesel提供一个整洁的API来编写网络客户端和服务器。支持TCP和UDP。\x0d\\x0d\Flask:一个用Python编写的轻量级Web应用框架\x0d\Flask是一个使用Python编写的轻量级Web应用框架。基于WerkzeugWSGI工具箱和Jinja2\x0d\模板引擎。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数\x0d\据库、窗体验证工具。\x0d\\x0d\Cubes:轻量级PythonOLAP框架\x0d\Cubes是一个轻量级Python框架,包含OLAP、网站制作源码视频多维数据分析和浏览聚合数据(aggregateddata)等工具。\x0d\\x0d\Kartograph.py:创造矢量地图的轻量级Python框架\x0d\Kartograph是一个Python库,用来为ESRI生成SVG地图。Kartograph.py目前仍处于beta阶段,你可以在virtualenv环境下来测试。\x0d\\x0d\Pulsar:Python的事件驱动并发框架\x0d\Pulsar是一个事件驱动的并发框架,有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。\x0d\\x0d\Web2py:全栈式Web框架\x0d\Web2py是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容GoogleAppEngine。\x0d\\x0d\Falcon:构建云API和网络应用后端的高性能Python框架\x0d\Falcon是一个构建云API的高性能Python框架,它鼓励使用REST架构风格,尽可能以最少的力气做最多的事情。\x0d\\x0d\Dpark:Python版的Spark\x0d\DPark是Spark的Python克隆,是一个Python实现的分布式计算框架,可以非常方便地实现大规模数据处理和迭代计算。DPark由豆瓣实现,目前豆瓣内部的绝大多数数据分析都使用DPark完成,正日趋完善。\x0d\\x0d\Buildbot:基于Python的持续集成测试框架\x0d\Buildbot是一个开源框架,可以自动化软件构建、测试和发布等过程。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果。\x0d\\x0d\Zerorpc:基于ZeroMQ的高性能分布式RPC框架\x0d\Zerorpc是一个基于ZeroMQ和MessagePack开发的远程过程调用协议(RPC)实现。和Zerorpc一起使用的ServiceAPI被称为zeroservice。Zerorpc可以通过编程或命令行方式调用。\x0d\\x0d\Bottle:微型PythonWeb框架\x0d\Bottle是一个简单高效的遵循WSGI的微型pythonWeb框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。\x0d\\x0d\Tornado:异步非阻塞IO的PythonWeb框架\x0d\Tornado的全称是ToradoWebServer,从名字上看就可知道它可以用作Web服务器,但同时它也是一个PythonWeb的开发框架。最初是在FriendFeed公司的网站上使用,FaceBook收购了之后便开源了出来。\x0d\\x0d\webpy:轻量级的PythonWeb框架\x0d\webpy的设计理念力求精简(Keepitsimpleandpowerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。\x0d\\x0d\Scrapy:Python的爬虫框架\x0d\Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便。
Python中的爬虫框架有哪些呢?实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实现你想要的功能。更重要的,Python也是数据挖掘和分析的好能手。那么,Python爬虫一般用什么框架比较好?
一般来讲,只有在遇到比较大型的需求时,才会使用Python爬虫框架。这样的做的主要目的,是为了方便管理以及扩展。本文我将向大家推荐十个Python爬虫框架。
1、Scrapy:Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。它是很强大的爬虫框架,可以满足简单的页面爬取,比如可以明确获知urlpattern的情况。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。但是对于稍微复杂一点的页面,如weibo的页面信息,这个框架就满足不了需求了。它的特性有:HTML,XML源数据选择及提取的内置支持;提供了一系列在spider之间共享的可复用的过滤器(即ItemLoaders),对智能处理爬取数据提供了内置支持。
2、Crawley:高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为JSON、XML等。
3、Portia:是一个开源可视化爬虫工具,可让使用者在不需要任何编程知识的情况下爬取网站!简单地注释自己感兴趣的页面,Portia将创建一个蜘蛛来从类似的页面提取数据。简单来讲,它是基于scrapy内核;可视化爬取内容,不需要任何开发专业知识;动态匹配相同模板的内容。
4、newspaper:可以用来提取新闻、文章和内容分析。使用多线程,支持多种语言等。作者从requests库的简洁与强大得到灵感,使用Python开发的可用于提取文章内容的程序。支持多种语言并且所有的都是unicode编码。
5、Python-goose:Java写的文章提取工具。Python-goose框架可提取的信息包括:文章主体内容、文章主要、文章中嵌入的任何Youtube/Vimeo视频、元描述、元标签。
6、BeautifulSoup:名气大,整合了一些常用爬虫需求。它是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.BeautifulSoup会帮你节省数小时甚至数天的工作时间。BeautifulSoup的缺点是不能加载JS。
7、mechanize:它的优点是可以加载JS。当然它也有缺点,比如文档严重缺失。不过通过官方的example以及人肉尝试的方法,还是勉强能用的。
8、selenium:这是一个调用浏览器的driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。Selenium是自动化测试工具,它支持各种浏览器,包括Chrome,Safari,Firefox等主流界面式浏览器,如果在这些浏览器里面安装一个Selenium的插件,可以方便地实现Web界面的测试.Selenium支持浏览器驱动。Selenium支持多种语言开发,比如Java,C,Ruby等等,PhantomJS用来渲染解析JS,Selenium用来驱动以及与Python的对接,Python进行后期的处理。
9、cola:是一个分布式的爬虫框架,对于用户来说,只需编写几个特定的函数,而无需关注分布式运行的细节。任务会自动分配到多台机器上,整个过程对用户是透明的。项目整体设计有点糟,模块间耦合度较高。
、PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。Python脚本控制,可以用任何你喜欢的html解析包。
python都有哪些框架?1、Django
谈到Python框架,我们第一个想到的应该就是Django。Django作为一个Python
Web应用开发框架,可以说是一个被广泛使用的全能型框架。Django的目的是为了让开发者能够快速地开发一个网站,因此它提供了很多模块。另外,Django最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。它与其他框架最大的区别就是,鲜明独特的特性,支持orm,将数据库的操作封装成为Python,对于需要适用多种数据库的应用来说是个比较好的特性。
2、Flask
Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。基于他的这个特性使用者可以花很少的成本就能够开发一个简单的网站。因此,从这个角度来讲,Flask框架非常适合初学者学习。Flask框架学会以后,我们还可以考虑学习插件的使用。
3、Scrapy
Scrapy是一个轻量级的使用Python编写的网络爬虫框架,这也是它与其他Python框架最大的区别。因为专门用于爬取网站和获取结构数据且使用起来非常的方便,Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试等等。
4、Diesel
Diesel是基于Greenlet的事件I/O框架,它提供一个整洁的API来编写网络客户端和服务器。它与其他Python框架最大的区别是支持TCP和UDP。
5、Cubes
Cubes作为一个轻量级PythonOLAP框架,包含了OLAP、多维数据分析和浏览聚合数据等工具。
6、Pulsar
Pulsar是Python的事件驱动并发框架。有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。
7、Tornado
Tornado全称是ToradoWebServer,仅仅从它的名字上我们就可以知道它可以用作Web服务器,但同时它也是一个Python
Web的开发框架。Tornado和现在的主流Web服务器框架和大多数Python框架有着明显的区别,它是非阻塞式服务器,而且速度相当快。而其他框架不支持异步处理。
Python有哪些好的Web框架常见的5种Web框架:
第一个:Django
Django是一个开源的Web应用框架,由Python写成,支持许多数据库引擎,可以让Web开发变得迅速和可扩展,并会不断的版本更新以匹配Python最新版本,如果是新手程序员,可以从这个框架入手。
第二个:Flask
Flask是一个轻量级的Web应用框架,使用Python编写。基于WerkzeugWSGI工具箱和JinJa2模板引擎,使用BSD授权。
Flask也被称为microframework,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而Flask保留了扩增的弹性,可以用Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。
第三个:Web2py
Web2py是一个用Python语言编写的免费的开源Web框架,旨在敏捷快速的开发Web应用,具有快速、可扩展、安全以及可移植的数据库驱动的应用,遵循LGPLv3开源协议。
Web2py提供一站式的解决方案,整个开发过程都可以在浏览器上进行,提供了Web版的在线开发,HTML模板编写,静态文件的上传,数据库的编写的功能。其他的还有日志功能,以及一个自动化的admin接口。
第四个:Tornado
Tornado即是一个Webserver,同时又是一个类web.py的micro-framework,作为框架的Tornado的思想主要来源于web.PY,大家在web.PY的网站首页也可以看到Tornado的大佬Bret
Taylor的这么一段话:“[web.pyinspiredthe]WebframeworkweuseatFriendFeed[and]thewebappframeworkthatshipswithAppEngine…”,因为这层关系,后面不再单独讨论Tornado。
第五个:CherryPy
CherryPy是一个用于Python的、简单而非常有用的Web框架,其主要作用是以尽可能少的操作将Web服务器与Python代码连接,其功能包括内置的分析功能、灵活的插件系统以及一次运行多个HTTP服务器的功能,可运行在最新版本的Python、Jython、android上。
结语:以上就是首席CTO笔记为大家介绍的关于python多少个框架的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。
wordpressådjangoåªä¸ªå¥½ï¼
导读ï¼å¾å¤æåé®å°å ³äºwordpressådjangoåªä¸ªå¥½çç¸å ³é®é¢ï¼æ¬æé¦å¸CTOç¬è®°å°±æ¥ä¸ºå¤§å®¶å个详ç»è§£çï¼ä¾å¤§å®¶åèï¼å¸æ对大家ææ帮å©ï¼ä¸èµ·æ¥ççå§ï¼Pythonä¸å¤§webæ¡æ¶åå«æ¯ä»ä¹åªä¸ªæ´å¥½ã导读ãç®åï¼Pythonæ¯è¾ç«çä¸å¤§webæ¡æ¶æDjangoãFlaskåTornadoï¼è¦è®ºè¿ä¸ä¸ªWebæ¡æ¶åªä¸ªæ´å¥½çè¯ï¼å»ºè®®ä¸ç¹ï¼Django帮æ们äºå æ建äºå¥½å¤ï¼ä¸æä¼å¿«ä¸äºï¼å¦ä¹ çè¯å¯ä»¥å ä»Djangoå¦èµ·ï¼ç¶ååå¦ä¹ FlaskåTornadoï¼ä¸é¢æ们就æ¥å ·ä½äºè§£ä¸ä¸Pythonä¸å¤§webæ¡æ¶ç详æ ã
1ãDjango
Djangoæ¯ä¸ä¸ªå¼æ¾æºä»£ç çWebåºç¨æ¡æ¶ï¼ç±Pythonåæãéç¨äºMTVçæ¡æ¶æ¨¡å¼ï¼å³æ¨¡åMï¼æ¨¡æ¿Tåè§å¾Vãå®æåæ¯è¢«å¼åæ¥ç¨äºç®¡çå³ä¼¦æ¯åºçéå¢æä¸çä¸äºä»¥æ°é»å 容为主çç½ç«çï¼å³æ¯CMS(å 容管çç³»ç»)软件ã
2ãFlask
Flaskæ¯ä¸ä¸ªä½¿ç¨Pythonç¼åçè½»é级Webåºç¨æ¡æ¶ãå ¶WSGIå·¥å ·ç®±éç¨Werkzeugï¼æ¨¡æ¿å¼æå使ç¨Jinja2
ãFlask使ç¨BSDææã
Flaskä¹è¢«ç§°ä¸ºâmicroframeworkâï¼å 为å®ä½¿ç¨ç®åçæ ¸å¿ï¼ç¨extension
å¢å å ¶ä»åè½ãFlask没æé»è®¤ä½¿ç¨çæ°æ®åºãçªä½éªè¯å·¥å ·ã
Flaskå¾è½»ï¼è±å¾å°çææ¬å°±è½å¤å¼åä¸ä¸ªç®åçç½ç«ãé常éååå¦è å¦ä¹ ãFlaskæ¡æ¶å¦ä¼ä»¥åï¼å¯ä»¥èèå¦ä¹ æ件ç使ç¨ãä¾å¦ä½¿ç¨WTForm+
Flask-WTFormæ¥éªè¯è¡¨åæ°æ®ï¼ç¨SQLAlchemy+Flask-SQLAlchemyæ¥å¯¹ä½ çæ°æ®åºè¿è¡æ§å¶ã
3ãTornado
Tornadoæ¯ä¸ç§Webæå¡å¨è½¯ä»¶çå¼æºçæ¬ãTornadoåç°å¨ç主æµWebæå¡å¨æ¡æ¶(å æ¬å¤§å¤æ°Python
çæ¡æ¶)æçææ¾çåºå«ï¼å®æ¯éé»å¡å¼æå¡å¨ï¼èä¸é度ç¸å½å¿«ã
å¾å©äºå ¶éé»å¡çæ¹å¼å对epollçè¿ç¨ï¼Tornadoæ¯ç§å¯ä»¥å¤çæ°ä»¥å计çè¿æ¥ï¼å æ¤Tornadoæ¯å®æ¶Webæå¡çä¸ä¸ª
çæ³æ¡æ¶ã
å ³äºPythonä¸å¤§webæ¡æ¶çç®åä»ç»ï¼å°±ç»å¤§å®¶å享å°è¿éäºï¼å½ç¶å¦ä¹ æ¯æ°¸æ æ¢å¢çï¼å¦ä¹ ä¸é¡¹æè½æ´æ¯åçç»èº«ï¼æ以ï¼åªè¦è¯åªåå¦ï¼ä»ä¹æ¶åå¼å§é½ä¸æï¼å¸æ大家æç´§æ¶é´è¿è¡å¦ä¹ å§ã
web.pyä¸djangoï¼é£ä¸ªæ´å¥½ï¼
ä¸ç¥éä½ è¦åä»ä¹ç±»åçåºç¨ãweb.pyæ¯è½»é级没éï¼djangoä¹ä¸è§å¾æå¤ééãä½æ¯ådjangoå¼åï¼åªè¦ä½ ç¨å°æ°æ®åºï¼ä½ ä¼è§å¾ååæ¹ä¾¿ãè³äºè¯´è¦æ¹å¨çå æ ¸å¤ï¼ä¸è¬çç½ç»åºç¨ç¨åºï¼ç»å¯¹ä¸éè¦ä½ å»æ¹ä»ä¹å æ ¸ãè³å°å°ç®å为æ¢ï¼æèªå·±è¿æ²¡æ碰å°è¦æ¹å æ ¸çæ åµãè¯è¯´å¦æä½ çæ°´å¹³é«å°è½æ¹å æ ¸çç¨åº¦äºï¼ä¹å°±ä¸éè¦åçº ç»äºè¿ä¸ªé®é¢äºï¼èªå·±é½å¯ä»¥åä¸ä¸ªæ¡æ¶äºã
个人认为djangoæ¯ç¸å½å¹³è¡¡èå好ç¨çãæ¯å¦è¯´djangoçModelåTemplateï¼ä½ æ¢å¯ä»¥ç¨ï¼ä¹å¯ä»¥ä¸ç¨ï¼æ²¡æ说ä¸å®å¼ºè¿«ä½ ç¨ãæ以说djangoæ¯éé级çï¼ä¼°è®¡ä¹æ¯ä¸ç¥å解ã
åä¸è¬çç½ç»åºç¨ï¼å¼ºç建议使ç¨django.
pythonæ建ç½ç«åcmsæ建ç½ç«åªä¸ªæ´å¿«ï¼åæä½ä¼å¿DjangoCMSæ¯åºäºDjangoçï¼whichisåºäºPythonçã
CMSæ¯ä¸ä¸ªç¸å½å®æ´ãå¯éè¿ç®¡ççé¢è¿è¡é ç½®çç½ç«ç³»ç»ï¼ä¸è¬èè¨é¢åéç¨åºåãé¤äºä»åå°å表æç« ãæµè§è¯è®ºä¹å¤ï¼ç¨æ·å¯ä»¥å¨CMSæä¾çèå´å è¿è¡å®å¶åï¼DjangoCMSï¼WordPressæè Ploneä¹ç±»é½å±äºCMSã
CMSä¹ä¸æ¯æè°ãWebæ¡æ¶ããPythonæDjangoï¼PHPæYiiçãè¿äºæ¡æ¶é¢åçæ¯ç¨åºåï¼æä¾äºæ建ç½ç«ç大éå¿ è¦å·¥å ·ï¼ä½è¿æ¯å¾ç¨åºåæå·¥æ¼è£ èµ·æ¥æè½ä½¿ç¨ãå¦æéè¦è®©è¯¸å¦ç¼è¾çéææ¯äººå使ç¨è¿ä¸ªç³»ç»ï¼ç¨åºåè¿éè¦æä¾ä¸ä¸ªç±»ä¼¼ä¸è¿°CMSé¨ååè½çåå°æ¥å£ã
åå¾ä¸ï¼æè°ãæåãç½é¡µï¼åºæ¬å°±åªæPHPæåå¨äºï¼å ¶å®æ¨¡å¼ç¸ä¼¼çä¸å¤ææ¯ï¼å¦JSPåASPæä¼ ç»PerlCGIçåºæ¬é½å·²ç»æ¶å¤±äºï¼ã
ä¸è¬æ¥è¯´ï¼å¦æä¸ä¸ªCMSçåè½å¤§ä½æ»¡è¶³äºç½ç«çéæ±ï¼åç´æ¥ç¨è¿ä¸ªCMS就好ï¼å°çæ©å±å个æ件å¯ä»¥è§£å³ã
å¦æç½ç«çéæ±ä¸ç°æCMSæä¾çåè½å¹¶ä¸è¿å¤éåï¼æè åç°CMSå®ç°æäºç¹å®çä¿®æ¹é常å°é¾ï¼æ¯å¦æ¬èº«æ¥å£æä¾çå¾å·®ï¼æè 代ç ãæ档质éå¦ç¿ä¸æ ·ï¼æè è¯è¨ééäºï¼æ¯å¦Drupalï¼ï¼ååºäºä¸ä¸ªææ¡£ã代ç è´¨é好ï¼è¯è¨åéï¼æ¯å¦Pythonï¼çæ¡æ¶è¿è¡æ建ï¼å¨åæçç»´æ¤æ¹é¢ä¼å¿ä¼æ´å¤§ä¸äºã
å ¶å®è¯´å°åºææ¯éåè¿æ¯åºäºå¢éï¼ééæ人çæWordPressçï¼ç¨wp就对äºã
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ã表ååºåååéªè¯ç³»ç»ãåå°ç³»ç»ãç¼åæ¡æ¶ãä¸é´ä»¶æ¯æçãå¨å ¶å®ç½ä¸å®£ç§°æ¯ï¼TheWebframeworkforperfectionistswithdeadlinesï¼å®æ¢å¯ä»¥æ»¡è¶³å®ç¾ä¸»ä¹è ï¼åå¯ä»¥å¨æªæ¢æéå交ä»è½¯ä»¶ã
Flaskï¼æ¯ä¸ä¸ªè½»é级çæ¡æ¶ï¼å®åªæç®åçæ ¸å¿é¨åãæ¢å¥è¯è¯´ï¼ä½ å¯ä»¥æèªå·±çéè¦æ·»å ORMãç¨æ·è®¤è¯ãæ件ä¸ä¼ çåè½ãå¨ä»å¤©æ¥çï¼å®ççæç³»ç»ä¹ç¸å½ä¸°å¯ï¼å¯ä»¥å®æç»å¤§é¨ååè½ã
éæ©Flaskèä¸æ¯éæ©Djangoçåå æ¯ï¼Djangoæ¬èº«è§å®å¥½äºä¸ç³»åçè§èåä¹ æ¯ã
å èå¨ç¼ç¨æ¶ï¼æ们åªéè¦ææ¥éª¤ä¸æ¥æ¥å¾ä¸èµ°å³å¯ã
æ¬ä¹¦éç¨Djangoä½ä¸ºWebå¼åæ¡æ¶ç主è¦åå æ¯ï¼å®éåä½ä¸ºCMSæ¡æ¶ï¼å¹¶ä¸æä¾äºä¸°å¯çç»ä»¶åè½ï¼å¦ç¨æ·æé管çãèªå¸¦åå°ç®¡çç³»ç»ãORMçã
Java
å¨ä»å¤©çæ¥ï¼Javaä»ç¶åä¼ä¸æ¬¢è¿ï¼é¤äºå¨ä¼ä¸çº§Webç³»ç»å¼åä¸ï¼å®è¿å¨Androidåºç¨çå¼åä¸ç»½æ¾å 彩ã
å¨æ ¡æé´ï¼ç¬è ä¸ç¹å¿ä¹ä¸å欢Javaãåæ¥æåç°ï¼æä»Javaä¸å¦å°çä¸è¥¿æ¯ä»å ¶ä»è¯è¨ä¸å¦çä¸è¥¿è¿å¤ãå¦æOracleä¸æ¯åJavaï¼é£ä¹å®ä¼ç»§ç»åæ´»å¾ä¹ ãæå¯ä»¥ç¨JavaScripté åºåç§ææ³è¦çä¸è¥¿ï¼ä½æ¯é常ææ æ³ä¿è¯å®ä»¬æ¯ä¼é å°å®ç°ãè¿å»äººä»¬å¨Javaä¸è±è´¹äºå¾å¤æ¶é´ï¼æå¨æ¶æä¸ï¼æå¨è¯è¨ä¸ï¼æå¨æ¨¡å¼ä¸ãç±äºè¿äºæå ¥ï¼é½ç»äºäººä»¬å¾å¤å¯åãè¿äºé½å¯ä»¥ç¨äºæ°çè¯è¨åæ°ç设计ï¼æ¯ç«æ²¡æä»ä¹ææ¯æ¯ç¬ç«äºæ§çææ¯äº§ççã
ç±äºå¨Javaè¯è¨éï¼ç¬è 主è¦æ¥è§¦çæ¯Springæ¡æ¶ï¼å æ¤ä¸é¢è®¨è®ºä¸ä¸Springã
SpringMVCï¼æ¯ç±Springæ¡æ¶æä¾çæ建Webåºç¨ç¨åºçå ¨åè½MVC模åãç±äºæ¡æ¶æ¬èº«é«åº¦å¯é ç½®ï¼å³å¯ä»¥ç´æ¥ä½¿ç¨ç¼åXMLèä¸æ¯Javaæ¥å®ç°åè½ãå®æ¯ä¸ä¸ªå ¸åçMVCæ¡æ¶ï¼å¹¶ä¸ä¹æ¯ä¸ä¸ªçº¯æ£çservletç³»ç»ã
SpringBootï¼å ¶ä½ç¨å¨äºå建åå¯å¨æ°çåºäºSpringæ¡æ¶ç项ç®ãç³»ç»æ¬èº«å好äºå¯¹ä¸åæ¡æ¶çé ç½®ä¸éæï¼æ们åªéè¦å¯¹å ¶é ç½®ï¼å¹¶ç¼åå°éç代ç å³å¯ã
å¦æä½ æ£å¨èè使ç¨Springæ¡æ¶ï¼å»ºè®®ä½¿ç¨SpringBootã
PHP
PHPæ¯ä¸é¨å¾å®¹æä¸æçè¯è¨ï¼ç±äºå ¶å®¹æä¸æï¼å¹¶ä¸åå±å¾æ¯è¾æçãå æ¤ï¼æç¸å¤å½ç个人ç½ç«ä½¿ç¨å®ä½ä¸ºå¼åè¯è¨ï¼å¦Facebookè¿æ ·å¤§æµéçç½ç«ä¹å¨ä½¿ç¨å®ãå¦å¤ï¼ä¸å¾ä¸æåçæ¯WordPresså·²ç»å é¢äºCMSå¸åºè¶ è¿ä¸åç份é¢ï¼å¹¶ä¸å®ä¹å é¢äºå ¨çç½ç«çååä¹ä¸ãWordPressåçæ¯ä¸ºå客系ç»èå建çå¼æºæ¡æ¶ï¼ç±äºå客系ç»åå 容管çç³»ç»å¨åè½ä¸å¾å¤æ¯ç¸ä¼¼çï¼å æ¤å®æäºæå ·ç¥å度çå 容管çç³»ç»ï¼contentmanagementsystemCMSï¼ã
å¨è¿é并ä¸åºäºWordPressæ¥å¼åå 容管çç³»ç»ï¼å 为å®å·²ç»æ¯ä¸ä¸ªç¸å½æççæ¡æ¶äºãå¦æä½ éè¦ä¸ä¸ªå客系ç»æè å 容管çç³»ç»ï¼é¦éWordPressï¼ç¶åææ¯èªå·±ç¼åã
PHPå¨æ¡æ¶æ¹é¢ææ¯è¾å¤çéæ©ï¼éæ¾çæ¯ï¼ç¬è åªå¯¹Laravelæ¯è¾äºè§£ãå®æ¯å¨PHP5.3ä¹åå¼åçæ°æ¡æ¶ï¼å ¶ç±»ä¼¼äºRubyonRailsâ为PHPç¨åºåæä¾å¿«éå¼åçæºå¶âæä¾å¿«éå¼åçå·¥å ·éï¼å¦çæ代ç ãæ°æ®è¿ç§»ãORMçã
Ruby
Rubyæ¯ä¸é¨ä¼ç¾èå·§å¦çè¯è¨ï¼å®å¯ä»¥ä½¿ç¼ååºæ¥ç代ç çä¸å»æ´èªç¶ãç®æ´ï¼æ´å ·æ表达åï¼å æ¤æ·±åç¨åºå欢è¿ãæ©æRubyè¯è¨çåºç¨åºæ¯ç¹å«å°ï¼ç´è³RubyOnRailsçåºç°ãå®æ¯ä¸¥æ ¼æç §MVCç»æå¼åçWebå¼æºæ¡æ¶ï¼å ¶è´åäºæåç¨åºåçå¿«ä¹æåç产æçâå¿«éå建页é¢ã模æ¿åæ¥è¯¢åè½çãä¸è¿å¦ä»ç±äºå¯ç»´æ§åæ§è½çé®é¢ï¼å®æ£å¨éæ¸è¢«æ¿æ¢ãåªæ¯å¯¹ååå ¬å¸æ¥è¯´ï¼å®çå¼åæçä»ä½¿å¾å®æ¯ä¸ä¸ªä¸éçéæ©ï¼éåå¨ä¸å¡ç¨³å®å使ç¨å ¶ä»æ¡æ¶æ¥æ¿æ¢ã
åæ ·ï¼ç±äºRubyOnRailsæ¯ä¸ä¸ªéé级çéæ©ï¼Rubyç¨åºåä¹æ¨åºäºèªå·±çè½»é级æ¡æ¶Sinatraãå®æ¯ä¸ä¸ªåºäºRubyè¯è¨çDSLï¼é¢åä¸å±è¯è¨ï¼ï¼ç±äºå ¶ä»£ç è¡æ°å°ï¼ä¸ç®åãç®æ´ï¼å¯ä»¥å¾å®¹ææ·±å ¥ç解æ¡æ¶å¹¶å¯¹å ¶ååºå®å¶
ç¶åå°±æ¯ç项ç®éè¦ä»¥åå¢éä¼å¿è¿è¡éæ©
PythonæåWordPressè¿æ ·çå¼æºç¨åºä¹pythonçå¼æºç¨åºå¾å¤ï¼é¤äºwordpresså¤è¿æå¦ä¸ï¼
Django:PythonWebåºç¨å¼åæ¡æ¶
Djangoåºè¯¥æ¯æåºåçPythonæ¡æ¶ï¼GAEçè³Erlangé½ææ¡æ¶åå®å½±åãDjangoæ¯èµ°å¤§èå ¨çæ¹åï¼å®æåºåçæ¯å ¶å ¨èªå¨åç管çåå°ï¼åªéè¦ä½¿ç¨èµ·ORMï¼åç®åç对象å®ä¹ï¼å®å°±è½èªå¨çææ°æ®åºç»æã以åå ¨åè½ç管çåå°ã
Dieselï¼åºäºGreenletçäºä»¶I/Oæ¡æ¶
Dieselæä¾ä¸ä¸ªæ´æ´çAPIæ¥ç¼åç½ç»å®¢æ·ç«¯åæå¡å¨ãæ¯æTCPåUDPã
Flaskï¼ä¸ä¸ªç¨Pythonç¼åçè½»é级Webåºç¨æ¡æ¶
Flaskæ¯ä¸ä¸ªä½¿ç¨Pythonç¼åçè½»é级Webåºç¨æ¡æ¶ãåºäºWerkzeugWSGIå·¥å ·ç®±åJinja2模æ¿å¼æãFlaskä¹è¢«ç§°ä¸ºâmicroframeworkâï¼å 为å®ä½¿ç¨ç®åçæ ¸å¿ï¼ç¨extensionå¢å å ¶ä»åè½ãFlask没æé»è®¤ä½¿ç¨çæ°æ®åºãçªä½éªè¯å·¥å ·ã
Cubesï¼è½»é级PythonOLAPæ¡æ¶
Cubesæ¯ä¸ä¸ªè½»é级Pythonæ¡æ¶ï¼å å«OLAPãå¤ç»´æ°æ®åæåæµè§èåæ°æ®ï¼aggregateddataï¼çå·¥å ·ã
Kartograph.pyï¼åé ç¢éå°å¾çè½»é级Pythonæ¡æ¶
Kartographæ¯ä¸ä¸ªPythonåºï¼ç¨æ¥ä¸ºESRIçæSVGå°å¾ãKartograph.pyç®åä»å¤äºbetaé¶æ®µï¼ä½ å¯ä»¥å¨virtualenvç¯å¢ä¸æ¥æµè¯ã
Pulsarï¼Pythonçäºä»¶é©±å¨å¹¶åæ¡æ¶
Pulsaræ¯ä¸ä¸ªäºä»¶é©±å¨ç并åæ¡æ¶ï¼æäºpulsarï¼ä½ å¯ä»¥ååºå¨ä¸åè¿ç¨æ线ç¨ä¸è¿è¡ä¸ä¸ªæå¤ä¸ªæ´»å¨çå¼æ¥æå¡å¨ã
Web2pyï¼å ¨æ å¼Webæ¡æ¶
Web2pyæ¯ä¸ä¸ªä¸ºPythonè¯è¨æä¾çå ¨åè½Webåºç¨æ¡æ¶ï¼æ¨å¨ææ·å¿«éçå¼åWebåºç¨ï¼å ·æå¿«éãå®å ¨ä»¥åå¯ç§»æ¤çæ°æ®åºé©±å¨çåºç¨ï¼å ¼å®¹GoogleAppEngineã
Falconï¼æ建äºAPIåç½ç»åºç¨å端çé«æ§è½Pythonæ¡æ¶
Falconæ¯ä¸ä¸ªæ建äºAPIçé«æ§è½Pythonæ¡æ¶ï¼å®é¼å±ä½¿ç¨RESTæ¶æé£æ ¼ï¼å°½å¯è½ä»¥æå°çåæ°åæå¤çäºæ ã
Dparkï¼PythonççSpark
DParkæ¯SparkçPythonå éï¼æ¯ä¸ä¸ªPythonå®ç°çåå¸å¼è®¡ç®æ¡æ¶ï¼å¯ä»¥é常æ¹ä¾¿å°å®ç°å¤§è§æ¨¡æ°æ®å¤çåè¿ä»£è®¡ç®ãDParkç±è±ç£å®ç°ï¼ç®åè±ç£å é¨çç»å¤§å¤æ°æ°æ®åæé½ä½¿ç¨DParkå®æï¼æ£æ¥è¶å®åã
Buildbotï¼åºäºPythonçæç»éææµè¯æ¡æ¶
Buildbotæ¯ä¸ä¸ªå¼æºæ¡æ¶ï¼å¯ä»¥èªå¨å软件æ建ãæµè¯ååå¸çè¿ç¨ãæ¯å½ä»£ç ææ¹åï¼æå¡å¨è¦æ±ä¸åå¹³å°ä¸ç客æ·ç«¯ç«å³è¿è¡ä»£ç æ建åæµè¯ï¼æ¶é并æ¥åä¸åå¹³å°çæ建åæµè¯ç»æã
Zerorpcï¼åºäºZeroMQçé«æ§è½åå¸å¼RPCæ¡æ¶
Zerorpcæ¯ä¸ä¸ªåºäºZeroMQåMessagePackå¼åçè¿ç¨è¿ç¨è°ç¨åè®®ï¼RPCï¼å®ç°ãåZerorpcä¸èµ·ä½¿ç¨çServiceAPI被称为zeroserviceãZerorpcå¯ä»¥éè¿ç¼ç¨æå½ä»¤è¡æ¹å¼è°ç¨ã
Bottle:å¾®åPythonWebæ¡æ¶
Bottleæ¯ä¸ä¸ªç®åé«æçéµå¾ªWSGIçå¾®åpythonWebæ¡æ¶ã说微åï¼æ¯å 为å®åªæä¸ä¸ªæ件ï¼é¤Pythonæ ååºå¤ï¼å®ä¸ä¾èµäºä»»ä½ç¬¬ä¸æ¹æ¨¡åã
Tornadoï¼å¼æ¥éé»å¡IOçPythonWebæ¡æ¶
Tornadoçå ¨ç§°æ¯ToradoWebServerï¼ä»ååä¸çå°±å¯ç¥éå®å¯ä»¥ç¨ä½Webæå¡å¨ï¼ä½åæ¶å®ä¹æ¯ä¸ä¸ªPythonWebçå¼åæ¡æ¶ãæåæ¯å¨FriendFeedå ¬å¸çç½ç«ä¸ä½¿ç¨ï¼FaceBookæ¶è´äºä¹å便å¼æºäºåºæ¥ã
webpy:è½»é级çPythonWebæ¡æ¶
webpyç设计ç念åæ±ç²¾ç®ï¼Keepitsimpleandpowerfulï¼ï¼æºç å¾ç®çï¼åªæä¾ä¸ä¸ªæ¡æ¶æå¿ é¡»çä¸è¥¿ï¼ä¸ä¾èµå¤§éç第ä¸æ¹æ¨¡åï¼å®æ²¡æURLè·¯ç±ã没æ模æ¿ä¹æ²¡ææ°æ®åºç访é®ã
Scrapyï¼Pythonçç¬è«æ¡æ¶
Scrapyæ¯ä¸ä¸ªä½¿ç¨Pythonç¼åçï¼è½»é级çï¼ç®å轻巧ï¼å¹¶ä¸ä½¿ç¨èµ·æ¥é常çæ¹ä¾¿ã
ç»è¯ï¼ä»¥ä¸å°±æ¯é¦å¸CTOç¬è®°ä¸ºå¤§å®¶æ´ççå ³äºwordpressådjangoåªä¸ªå¥½çå ¨é¨å 容äºï¼æè°¢æ¨è±æ¶é´é 读æ¬ç«å 容ï¼å¸æ对æ¨ææ帮å©ï¼æ´å¤å ³äºwordpressådjangoåªä¸ªå¥½çç¸å ³å 容å«å¿äºå¨æ¬ç«è¿è¡æ¥æ¾åã