-- ·|­û / µù¥U -- ¡@
¡@±b¸¹¡G
¡@±K½X¡G
¡@ | µù¥U | §Ñ°O±K½X
3/26 ·s®Ñ¨ì¡I 3/19 ·s®Ñ¨ì¡I 3/14 ·s®Ñ¨ì¡I 12/12 ·s®Ñ¨ì¡I
ÁʮѬyµ{¡EQ & A¡E¯¸°È¯d¨¥ª©¡E«ÈªA«H½c
¢x 3ds Max¢x Maya¢x Rhino¢x After Effects¢x SketchUp¢x ZBrush¢x Painter¢x Unity¢x
¢x PhotoShop¢x AutoCad¢x MasterCam¢x SolidWorks¢x Creo¢x UG¢x Revit¢x Nuke¢x
¢x C#¢x C¢x C++¢x Java¢x ¹CÀ¸µ{¦¡¢x Linux¢x ´O¤J¦¡¢x PLC¢x FPGA¢x Matlab¢x
¢x Àb«È¢x ¸ê®Æ®w¢x ·j¯Á¤ÞÀº¢x ¼v¹³³B²z¢x Fluent¢x VR+AR¢x ANSYS¢x ²`«×¾Ç²ß¢x
¢x ³æ´¹¤ù¢x AVR¢x OpenGL¢x Arduino¢x Raspberry Pi¢x ¹q¸ô³]­p¢x Cadence¢x Protel¢x
¢x Hadoop¢x Python¢x Stm32¢x Cortex¢x Labview¢x ¤â¾÷µ{¦¡¢x Android¢x iPhone¢x
¥i¬d®Ñ¦W,§@ªÌ,ISBN,3dwoo®Ñ¸¹
¸Ô²Ó®ÑÄy¤ÀÃþ

Python·LªA°È¶}µo

( ²Åé ¦r)
§@ªÌ¡G[ªk]¶ð¨½§J¡P»ô¨È¼w¡]Tarek Ziade¡^µÛ Ãþ§O¡G1. -> µ{¦¡³]­p -> Python
ĶªÌ¡G©M°í ±i²W Ķ
¥Xª©ªÀ¡G²MµØ¤j¾Ç¥Xª©ªÀPython·LªA°È¶}µo 3dWoo®Ñ¸¹¡G 50951
¸ß°Ý®ÑÄy½Ð»¡¥X¦¹®Ñ¸¹¡I

¡i¯Ê®Ñ¡j
NT°â»ù¡G 295 ¤¸

¥Xª©¤é¡G4/1/2019
­¶¼Æ¡G260
¥úºÐ¼Æ¡G0
¯¸ªø±ÀÂË¡G
¦L¨ê¡G¶Â¥Õ¦L¨ê»y¨t¡G ( ²Åé ª© )
¥[¤JÁʪ«¨® ¢x¥[¨ì§Úªº³Ì·R
(½Ð¥ýµn¤J·|­û)
ISBN¡G9787302524120
§@ªÌ§Ç¡@|¡@ĶªÌ§Ç¡@|¡@«e¨¥¡@|¡@¤º®e²¤¶¡@|¡@¥Ø¿ý¡@|¡@§Ç
(²Åé®Ñ¤W©Ò­z¤§¤U¸ü³sµ²¯Ó®É¶O¥\, ®¤¤£¾A¥Î¦b¥xÆW, ­YŪªÌ»Ý­n½Ð¦Û¦æ¹Á¸Õ, ®¤¤£«OÃÒ)
§@ªÌ§Ç¡G

ĶªÌ§Ç¡G

«e¨¥¡G

¬°±NWebÀ³¥Î³¡¸p¨ì¤ª¡A¥N½X»Ý­n»P«Ü¦h²Ä¤T¤èªA°È¶i¦æ¥æ¤¬¡C¨Ï¥Î·LªA°È¬[ºc¡A¥iºc«Ø¯àºÞ²z³o¨Ç¥æ¤¬ªº¤j«¬À³¥Î¡C¦ý³o±a¨Ó¤@¨t¦C¬D¾Ô¡A¨C¶µ¬D¾Ô³£¦³¿W¯Sªº´_Âø©Ê¡C³o¥»³q«U©öÀ´ªº«ü«n¦®¦bÀ°§U§A§JªA³o¨Ç¬D¾Ô¡C®Ñ¤¤±N¤¶²Ð¦p¦ó¥H³Ì¦X²zªº¤è¦¡³]­p¡B¶}µo¡B´ú¸Õ©M³¡¸p·LªA°È¡Aºò¶K¹ê¥Îªº¥Ü¨Ò±NÀ°§U Python ¶}µoªÌ¥Î³Ì°ª®Äªº¤è¦¡³Ð«ØPython·LªA°È¡C¾\Ū§¹¡mPython·LªA°È¶}µo¡n¡AŪªÌ±N´x´¤°ò¤_¤p«¬¼Ð·Ç³æ¤¸ºc«Ø¤j«¬À³¥Îªº§Þ¯à¡C¡mPython·LªA°È¶}µo¡n±N¨Ï¥Î¦¨¼ôªº³Ì¨Î¹ê½î¡A¦}¤ÀªR¦p¦ó³WÁ×±`¨£³´¨À¡C¦¹¥~¡A¹ï¤_¥¿±N³æÅé³]­pÂà´«¦¨·s«¬¡§·LªA°È¡¨¶}µo­S¦¡ªºªÀ°Ï¶}µoªÌ¨Ó»¡¡A¡mPython·LªA°È¶}µo¡n¤]»á¨ã»ù­È¡C
¡mPython·LªA°È¶}µo¡n¤º®e
²Ä1³¹¡§²z¸Ñ·LªA°È¡¨©w¸q¤°¤\¬O·LªA°È¡A¥H¤Î·LªA°È¦b²{¥NWebÀ³¥Î¤¤§êºtªº¨¤¦â¡CÁÙ¤¶²ÐPython¡A¦}¸ÑÄÀ¬°¤°¤\¥ÎPythonºc«Ø·LªA°È¬O¤W¨Î¤§¿ï¡C
²Ä2³¹¡§Flask®Ø¬[¡¨¤¶²ÐFlaskªº¥D­n¯S©Ê¡C³q¹L¤@­ÓWebÀ³¥Î¥Ü¨Ò¨Ó®i¥Ü³o­Ó®Ø¬[¡AFlask¬Oºc«Ø·LªA°Èªº°ò¦¡C
²Ä3³¹¡§¨}©Ê´`Àô¡G½sµ{¡B´ú¸Õ©M¼g¤åÀÉ¡¨¡A¤¶²Ð´ú¸ÕÅX°Ê¶}µo¤èªk©M«ùÄò¶°¦¨¤èªk¡A¥H¤Î¦bºc«Ø©M¥´¥]FlaskÀ³¥Îªº¹ê½î¤¤¦p¦ó¨Ï¥Î³o¨Ç¤èªk¡C
²Ä4³¹¡§³]­pRunnerly¡¨°ò¤_À³¥Î¯S©Ê©M¥Î¤á®×¨Ò¡A­º¥ýºc«Ø¤@­Ó³æÅéÀ³¥Î¡AµM¦ZÁ¿­z¦p¦ó±N¨ä©î¸Ñ¦¨·LªA°È¡A¦}¹ê²{·LªA°È¤§¶¡ªº¼Æ¾Ú¥æ¤¬¡CÁÙ±N¤¶²Ð¥Î¨Ó´y­zHTTP APIªºOpen API 2.0(ex-Swagger)³W­S¡C
²Ä5³¹¡§»P¨ä¥LªA°È¥æ¤¬¡¨¤¶²Ð¤@­ÓªA°È¦p¦ó»P¦Z»OªA°È¶i¦æ¥æ¤¬¡A¦p¦ó³B²zºôµ¸©î¤À°ÝÃD¡A¥H¤Î¨ä¥L¥æ¤¬°ÝÃD¡A¥t¥~¤¶²Ð¦p¦ó¿W¥ß¦a´ú¸Õ¤@­ÓªA°È¡C
²Ä6³¹¡§ºÊ±±ªA°È¡¨¤¶²Ð¦p¦ó¦b¥N½X¤¤²K¥[¤é§Ó©M«ü¼Ð¡A²M´·¦a´x±±¥þ§½¡A½T©wµo¥Í¤F¤°¤\¡A¦}¯à°l¬d°ÝÃD©M¤F¸ÑªA°È§Q¥Î²v¡C
²Ä7³¹¡§«OÅ@ªA°È¡¨¤¶²Ð¦p¦ó«OÅ@·LªA°È¡A¦p¦ó³B²z¥Î¤á¨­¥÷ÅçÃÒ¡BªA°È¶¡¨­¥÷ÅçÃÒ¥H¤Î¥Î¤áºÞ²z¡CÁÙ¤¶²Ð°w¹ïªA°Èªº´Û¶B©MÀݥΡA¥H¤Î¦p¦ó½w¸Ñ³o¨Ç°ÝÃD¡C
²Ä8³¹¡§ºî¦X¹B¥Î¡¨´y­z¦b²×ºÝ¥Î¤á¬É­±¤¤¡A¦p¦ó³]­p©Mºc«Ø¤@­Ó¨Ï¥Î·LªA°ÈªºJavaScriptÀ³¥Î¡C
²Ä9³¹¡§¥´¥]©M¹B¦æRunnerly¡¨´y­z¦p¦ó¥´¥]¡Bºc«Ø©M¹B¦æ¾ã­ÓÀ³¥Î¡C¶}µoªÌ¥²¶·¯à°÷±NÀ³¥Î¥´¥]¨ì¤@­Ó¶}µoÀô¹Ò¤¤¡A½T«O©Ò¦³³¡¤À³£¥i¥H¹B¦æ¡C
²Ä10³¹¡§®e¾¹¤ÆªA°È¡¨¸ÑÄÀ¤°¤\¬OµêÀÀ¤Æ¡A¦p¦ó¨Ï¥ÎDocker¡A¦p¦ó±NªA°È°µ¦¨DockerÃè¹³¡C
²Ä11³¹¡§¦bAWS¤W³¡¸p¡¨­º¥ý¤¶²Ð·í«eªº¤ªªA°È¼t°Ó©MAWS¥@¬É¡CµM¦Zºt¥Ü¦p¦ó¨Ï¥ÎAWS¨Ó¹ê¨Ò¤Æ¤@­Ó°ò¤_·LªA°È¬[ºcªºÀ³¥Î¡C¥t¥~¤¶²ÐCoreOS¡A³o¬O¤@­Ó±Mªù¥Î¤_¦b¤ª¤Wµo¥¬Docker®e¾¹ªºLinux¤À¤ä¡C
²Ä12³¹¡§±µ¤U¨Ó°µ¤°¤\¡H¡¨Á`µ²¥þ®Ñ¡A¦b¦p¦óºc«Ø¿W¥ß¤_¤ª¼t°Ó©MµêÀÀ¤Æ§Þ³Nªº·LªA°È°ÝÃD¤W¡Aµ¹¥X¤@¨Ç´£¥Ü¨ÓÁקK±NÂû³J©ñ¤J¦P¤@­ÓÄx¤l¨½¡CÁÙ±NÀ°§U§A¾d©T²Ä9³¹¤¤¾Ç¨ìªºª¾ÃÑ¡C
¾\Ū¡mPython·LªA°È¶}µo¡n»Ý­n·Ç³Æ¤°¤\
­n°õ¦æ¡mPython·LªA°È¶}µo¡nªº©R¥O©MÀ³¥Î¡A¨t²Î»Ý­n¦w¸ËPython 3.x¡Bvirtualenv 1.x©MDocker CE¡C¥¿¤å¤¤¤]·|®Ú¾Ú»Ý­n¸Ô²Ó¦C¥X¦w¸Ë»¡©ú¡C
ŪªÌ¹ï¶H
§@¬°¤@¦W¶}µoªÌ¡A¦pªG§A¤F¸ÑPython°ò¥»·§©À¡B©R¥O¦æ¡A¥H¤Î°ò¤_HTTPªºÀ³¥Î³]­p­ì«h¡A¦}·Q¾Ç²ß¦p¦óºc«Ø¡B´ú¸Õ¡BÂX®i©MºÞ²zPython 3·LªA°È¡A¨º¤\¡mPython·LªA°È¶}µo¡n¾A¦X§A¡C¾\Ū¡mPython·LªA°È¶}µo¡n¡A§A¤£¥²¨ã¦³¥ÎPython½s¼g·LªA°Èªº¥ô¦ó¸gÅç¡C
¡mPython·LªA°È¶}µo¡n¬ù©w
¥N½X¶ô«ö¥H¤U¼Ë¦¡Åã¥Ü¡G
import time

def application(environ, start_response):
headers = [(Content-type, application/json)]
start_response(200 OK, headers)
return bytes(json.dumps({time: time.time()}), utf8)

·|¥Î²ÊÅé¨ÓÅã¥Ü»Ý­n­«ÂIÃöª`ªº¥N½X¡G
from greenlet import greenlet
def test1(x, y):
z = gr2.switch(x+y)
print(z)
¥ô¦ó©R¥O¦æªº¿é¤J©Î¿é¥X³£«ö¥H¤U¼Ë¦¡Åã¥Ü¡G
docker-compose up
ĵ§i©Î­«­nª`ÄÀ·|³o¼ËÅã¥Ü¡C
´£¥Ü©M§Þ¥©·|³o¼ËÅã¥Ü¡C
ŪªÌ¤ÏõX
ÅwªïŪªÌ´£¥X¤ÏõX·N¨£¡A³o¼Ë§Ú­Ì¯à¤F¸Ñ§A¹ï¡mPython·LªA°È¶}µo¡nªº¬Ýªk¡A³ßÅw¤°¤\©Î¤£³ßÅw¤°¤\¡C¤ÏõX·N¨£«Ü­«­n¡A¯àÀ°§U§Ú­Ì¶}µoŪªÌ¯u¥¿·Q¤F¸Ñªº¥DÃD¡C¥u»Ý­nµo¶l¥óµ¹¡A¦}¦b¶l¥ó¼ÐÃD¤¤´£¤Î¡mPython·LªA°È¶}µo¡n¡A§Y¥i±N¤ÏõX·N¨£µoµ¹§Ú­Ì¡C
¦pªG§A¬O¬Y­Ó¥DÃDªº±M®a¡A¦³¿³½ì¼g®Ñ¡A©Îº@·N¬°¼g®Ñ°µ°^Äm¡A½Ð¨ì­¶­±¬d¾\§@ªÌ«ü«n¡C
¤U¸ü¥Ü¨Ò¥N½X
¡mPython·LªA°È¶}µo¡n¬ÛÃöªº¥N½X©ñ¦bGitHub¤W¡CÁÙ¦³¨ä¥L¥N½X¥]©MµøÀW¡AÅwªï³q¹L­¶­±¤U¸ü¡C
¥t¥~¡AŪªÌ¥i±½´y¡mPython·LªA°È¶}µo¡n«Ê©³ªº¤Gºû½Xª½±µ¤U¸ü¥N½X¡C
¤U¸ü¤å¥ó¦Z¡A¥Î¥H¤U¤u¨ãªº³Ì·sª©¥»¨Ó¸ÑÀ£ÁY¡G
¡´ ¦bWindows¨t²Î¤¤¨Ï¥ÎWinRAR /7-Zip¡C
¡´ ¦bMac¨t²Î¤¤¨Ï¥ÎZipeg /iZip /UnRarX¡C
¡´ ¦bLinux¨t²Î¤¤¨Ï¥Î7-Zip /PeaZip¡C
°É»~
ºÉºÞ§Ú­Ì¤w¸g«D±`¤p¤ß¦a½T«O¤º®eªº·Ç½T©Ê¡A¦ýÁÙ¬O·|µo¥Í¥¢»~¡C¦pªG§A¦b®Ñ¤¤µo²{¤F¿ù»~¡A¥i¯à¬O¤å¥»¿ù»~©Î¥N½X¿ù»~¡A§A¯à¦V§Ú­Ì³ø§i¦¹¨Æ¡A§Ú­Ì±N¤£³Ó·P¿E¡C³q¹L³o¼Ë°µ¡A¥i´î¤Ö¨ä¥LŪªÌªº¾\Ūµh­W¡A¦}À°§U§Ú­Ì§ï¶i¡mPython·LªA°È¶}µo¡nªº¦ZÄòª©¥»¡C¦pªG§Aµo²{¥ô¦ó°É»~¡A½Ð³X°Ý ­¶­±¨Ó³ø§i¥¦­Ì¡A¿ï¾Ü§AÁʶRªº®Ñ¡A³æÀ»Errata Submission FormÃì±µ¡A¿é¤J°É»~ªº¸Ô²Ó«H®§¡C¤@¥¹¶ñ¼gªº°É»~³Q½T»{¡A§Aªº´£¥æ±N³Q±µ¨ü¡AµM¦Z°É»~±N³Q¤W¶Ç¨ì§Ú­Ìªººô¯¸¤W¡A©Î²K¥[¨ì¥ô¦ó²{¦³ªº°É»~¦Cªí¤¤¡C²{¦³ªº°É»~¦Cªí¦ì¤_Errata¼ÐÃDªº¤U­±¡C
­n¬d¬Ý¤§«e´£¥æªº°É»~¡A¥i³X°Ý¡AµM¦Z¦b¬d§ä¿é¤J®Ø¤º¿é¤J®Ñ¦W¡C­n¬d§äªº«H®§·|Åã¥Ü¦bErrata¤U­±¡C
µsª©¦æ¬°
¤¬Ápºô¤Wªºµsª©¦æ¬°¬O©Ò¦³´CÅé¤@ª½ÀY¯kªº°ÝÃD¡C¦bPackt¡A§Ú­Ì±NºÉ¤O³B²zµsª©°ÝÃD¡C§Ú­Ì·|«D±`»{¯u¦a¹ï«Ýª©Åv©M³\¥iÃÒªº«OÅ@¡C¦pªG§A¦b¤¬Ápºô¤W¹J¨ì¥ô¦ó§Ú­Ì§@«~ªº«Dªk«þ¨©¡A½Ð¥ß§Y¦V§Ú­Ì´£¨Ñºô§}©Îºô¯¸¦WºÙ¡A¥H«K§Ú­Ì¯àªö¨ú¸É±Ï±¹¬I¡C
½Ð³q¹L Áp¨t§Ú­Ì¡A¦}ªþ±a¤W¦³«IÅv¶ûºÃªº§÷®Æ¡C
«D±`·P¿E§A¯àÀ°§U«OÅ@§Ú­Ìªº§@ªÌ¥H¤Î§Ú­Ìªº¤u§@¡C³o¼Ë§Ú­Ì¥i«ùÄò¬°§A±a¨Ó¦³»ù­Èªº¤º®e¡C
°ÝÃD
Ãö¤_¡mPython·LªA°È¶}µo¡nªº¥ô¦ó°ÝÃD¡AÅwªï³q¹LÁp¨t¡C
¤º®e²¤¶¡G

¥þ®Ñ¦@12³¹¡A¤º®e¥]¬A¡G²z¸Ñ·LªA°È¡B¨Ï¥Îflask¡B´ú¸ÕÅX°Ê¶}µo»P¤åÀɤơB³]­pForrest¡B»P¨ä¥LªA°È¥æ¤¬¡B«OÅ@ªA°È¦w¥þ¡B¨Ï¥Î·LªA°È¡B¥´¥]Forrest¡B±NªA°ÈDocker¤Æ¡B¦bAWS¤W³¡¸p¡B¶W«e«äºûµ¥¡C
¥Ø¿ý¡G

²Ä1³¹²z¸Ñ·LªA°È1
1.1SOAªº°_·½2
1.2³æÅé¬[ºc2
1.3·LªA°È¬[ºc5
1.4·LªA°Èªº¯q³B7
1.4.1¤ÀÂ÷¹Î¶¤ªºÃöª`ÂI7
1.4.2§ó¤pªº¶µ¥Ø8
1.4.3ÂX®i©M³¡¸p8
1.5·LªA°Èªº¯Ê³´9
1.5.1¤£¦X²zªº©î¤À9
1.5.2§ó¦hªººôµ¸¥æ¤¬9
1.5.3¼Æ¾Úªº¦sÀx©M¤À¨É10
1.5.4­Ý®e©Ê°ÝÃD10
1.5.5´ú¸Õ10
1.6¨Ï¥ÎPython¹ê²{·LªA°È11
1.6.1WSGI¼Ð·Ç12
1.6.2greenlet©Mgevent¼Ò¶ô13
1.6.3Twisted©MTornado¼Ò¶ô15
1.6.4asyncio¼Ò¶ô16
1.6.5»y¨¥©Ê¯à18
1.7¥»³¹¤pµ²20
²Ä2³¹Flask®Ø¬[21
2.1¿ï¾ÜPythonª©¥»22
2.2Flask¦p¦ó³B²z½Ð¨D23
2.2.1¸ô¥Ñ¤Ç°t26
2.2.2½Ð¨D30
2.2.3ÅTÀ³32
2.3Flaskªº¤º¸m¯S©Ê33
2.3.1Session¹ï¶H34
2.3.2¥þ§½­È34
2.3.3«H¸¹35
2.3.4ÂX®i©M¤¤¶¡¥ó37
2.3.5¼ÒªO38
2.3.6°t¸m40
2.3.7Blueprint42
2.3.8¿ù»~³B²z©M½Õ¸Õ43
2.4·LªA°ÈÀ³¥Îªº°©¬[47
2.5¥»³¹¤pµ²49
²Ä3³¹¨}©Ê´`Àô¡G½s½X¡B´ú¸Õ©M¼g¤åÀÉ51
3.1¦UºØ´ú¸ÕÃþ«¬ªº®t²§52
3.1.1³æ¤¸´ú¸Õ53
3.1.2¥\¯à´ú¸Õ56
3.1.3¶°¦¨´ú¸Õ58
3.1.4­t¸ü´ú¸Õ59
3.1.5ºÝ¨ìºÝ´ú¸Õ61
3.2¨Ï¥ÎWebTest62
3.3¨Ï¥Îpytest©MTox64
3.4¶}µoªÌ¤åÀÉ67
3.5«ùÄò¶°¦¨71
3.5.1Travis-CI72
3.5.2ReadTheDocs73
3.5.3Coveralls73
3.6¥»³¹¤pµ²75
²Ä4³¹³]­pRunnerly77
4.1RunnerlyÀ³¥Î77
4.2³æÅé³]­p79
4.2.1¼Ò«¬80
4.2.2µø¹Ï»P¼ÒªO80
4.2.3¦Z»O¥ô°È84
4.2.4¨­¥÷ÅçÃÒ©M±ÂÅv88
4.2.5³æÅé³]­p¶×Á`92
4.3©î¤À³æÅé93
4.4¼Æ¾ÚªA°È94
4.5¨Ï¥ÎOpenAPI2.095
4.6¶i¤@¨B©î¤À97
4.7¥»³¹¤pµ²98
²Ä5³¹»P¨ä¥LªA°È¥æ¤¬101
5.1¦P¨B½Õ¥Î102
5.1.1¦bFlaskÀ³¥Î¤¤¨Ï¥ÎSession103
5.1.2³s±µ¦À107
5.1.3HTTP½w¦sÀY108
5.1.4§ï¶i¼Æ¾Ú¶Ç¿é111
5.1.5¦P¨BÁ`µ²115
5.2²§¨B½Õ¥Î116
5.2.1¥ô°È¶¤¦C116
5.2.2¥DÃD¶¤¦C117
5.2.3µo¥¬/­q¾\¼Ò¦¡122
5.2.4AMQP¤WªºRPC122
5.2.5²§¨BÁ`µ²122
5.3´ú¸ÕªA°È¶¡¥æ¤¬123
5.3.1¼ÒÀÀ¦P¨B½Õ¥Î123
5.3.2¼ÒÀÀ²§¨B½Õ¥Î124
5.4¥»³¹¤pµ²127
²Ä6³¹ºÊ±±ªA°È129
6.1¶°¤¤¤Æ¤é§Ó129
6.1.1³]¸mGraylog131
6.1.2¦VGraylogµo°e¤é§Ó134
6.1.3²K¥[ÂX®i¦r¬q136
6.2©Ê¯à«ü¼Ð137
6.2.1¨t²Î«ü¼Ð138
6.2.2¥N½X«ü¼Ð140
6.2.3WebªA°È¾¹«ü¼Ð142
6.3¥»³¹¤pµ²143
²Ä7³¹«OÅ@ªA°È145
7.1OAuth2¨óij146
7.2°ò¤_¥OµPªº¨­¥÷ÅçÃÒ147
7.2.1JWT¼Ð·Ç148
7.2.2PyJWT150
7.2.3°ò¤_ÃҮѪºX.509¨­¥÷ÅçÃÒ151
7.2.4TokenDealer·LªA°È154
7.2.5¨Ï¥ÎTokenDealer157
7.3WebÀ³¥Î¨¾¤õùÙ160
7.4«OÅ@¥N½X166
7.4.1Â_¨¥¶Ç¤Jªº¼Æ¾Ú166
7.4.2­­¨îÀ³¥Îªº­S³ò170
7.4.3¨Ï¥ÎBanditlinter171
7.5¥»³¹¤pµ²174
²Ä8³¹ºî¦X¹B¥Î175
8.1ºc«ØReactJS»öªí½L176
8.1.1JSX»yªk176
8.1.2React²Õ¥ó177
8.2ReactJS»PFlask181
8.2.1¨Ï¥Îbower¡Bnpm©Mbabel182
8.2.2¸ó°ì¸ê·½¦@¨É185
8.3¨­¥÷ÅçÃÒ»P±ÂÅv188
8.3.1»P¼Æ¾ÚªA°È¥æ¤¬188
8.3.2Àò¨úStrava¥OµP189
8.3.3JavaScript¨­¥÷ÅçÃÒ191
8.4¥»³¹¤pµ²192
²Ä9³¹¥´¥]©M¹B¦æRunnerly195
9.1¥´¥]¤u¨ãÃì196
9.1.1¤@¨Ç©w¸q196
9.1.2¥´¥]197
9.1.3ª©¥»±±¨î204
9.1.4µo¥¬206
9.1.5¤Àµo208
9.2¹B¦æ©Ò¦³·LªA°È210
9.3¶iµ{ºÞ²z213
9.4¥»³¹¤pµ²216
²Ä10³¹®e¾¹¤ÆªA°È217
10.1¦ó¬°Docker¡H218
10.2Docker²¤¶219
10.3¦bDocker¤¤¹B¦æFlask221
10.4§¹¾ãªº´Ì¡X¡XOpenResty¡BCircus©MFlask223
10.4.1OpenResty224
10.4.2Circus226
10.5°ò¤_Dockerªº³¡¸p228
10.5.1DockerCompose230
10.5.2¶°¸s©Mªì©l¤Æ²¤¶231
10.6¥»³¹¤pµ²233
²Ä11³¹¦bAWS¤W³¡¸p235
11.1AWSÁ`Äý236
11.2¸ô¥Ñ¡GRoute53¡BELB©MAutoScaling237
11.3°õ¦æ¡GEC2©MLambda237
11.4¦sÀx¡GEBS¡BS3¡BRDS¡BElasticCache©MCloudFront238
11.4.1®ø®§¡GSES¡BSQS©MSNS240
11.4.2ªì©l¤Æ¸ê·½©M³¡¸p¡GCloudFormation©MECS241
11.5¦bAWS¤W³¡¸p²¤¶242
11.5.1³Ð«ØAWS½ã¸¹242
11.5.2¨Ï¥ÎCoreOS¦bEC2¤W³¡¸p244
11.6¨Ï¥ÎECS³¡¸p247
11.7Route53251
11.8¥»³¹¤pµ²253
²Ä12³¹±µ¤U¨Ó°µ¤°¤\¡H255
12.1­¡¥N¾¹©M¥Í¦¨¾¹256
12.2¨ó¦Pµ{§Ç259
12.3asyncio®w260
12.4aiohttp®Ø¬[262
12.5Sanic262
12.6²§¨B©M¦P¨B264
12.7¥»³¹¤pµ²265
§Ç¡G