grailsdjangoåªä¸ªå¥½ï¼
导读ï¼ä»å¤©é¦å¸CTOç¬è®°æ¥ç»åä½åäº«å ³äºgrailsdjangoåªä¸ªå¥½çç¸å ³å 容ï¼å¦æè½ç¢°å·§è§£å³ä½ ç°å¨é¢ä¸´çé®é¢ï¼å«å¿äºå ³æ³¨æ¬ç«ï¼ç°å¨å¼å§å§ï¼pythonè¯è¨djangoæ¡æ¶ååå°ï¼å端ç¨VueReactlayuiangularï¼åªä¸ä¸ªæ¯ç«å¥½ï¼å项ç®è¦æ±æççè¯ï¼æ¨è2个ç°æçã
æä¾2个ç°æç
drupal
orchardcore
grailsæ¯å¹²ä»ä¹ç?请详ç»è¯´æï¼Grailsæ¯ä¸å¥ç¨äºå¿«éWebåºç¨å¼åçå¼æºæ¡æ¶ï¼å®åºäºGroovyç¼ç¨è¯è¨ï¼å¹¶æ建äºSpringãHibernateåå ¶å®æ åJavaæ¡æ¶ä¹ä¸ï¼ä»è为大家带æ¥ä¸å¥è½å®ç°è¶ é«ç产åçä¸ç«å¼æ¡æ¶ã
RubyonRailså¼åäºå°ä¸é¨å¼ºå¤§çç¼ç¨è¯è¨åä¸ä¸ªåæå·±è§ãæå¡ç¨éæ è¾¾ççé»è®¤è®¾ç½®ä»£æ¿å¤æé ç½®çæ¡æ¶è¿è¡åé æ§ç»åçå æ²³ãç¶èï¼è¿æ许å¤ç»ç»å¹¶æ²¡æå好ä»Javaçå®å ¨ä¿æ¤ä¼ä¸èµ°åºçåå¤ï¼ä¹æ²¡ææç®æ¾å¼ä»ä»¬ç®åå¨Javaä¸çæå ¥ãèGrailsçåºç°ï¼ä½¿å¾å¨ä¸ä¸ªä»¥Java为ä¸å¿çç¯å¢ä¸å®ç°åçç产åçæ³æ³æ为å¯è½ã
Grailsçæ件系ç»
grailsçæ件系ç»ä¹æ¯å ¶äº®ç¹ä¹ä¸ãé¦å ï¼årailsï¼djangoçwebæ¡æ¶ç±»ä¼¼ï¼åºäºå¾®å æ ¸çææ³ï¼æ件ï¼å¯éç¨æ¨¡åï¼æ¯æ¡æ¶çä¸çå ¬æ°ãgrailsé¤äºæ ¸å¿æ¨¡å以å¤çåè½å ä¹é½æ¯éè¿æ件æ¹å¼å®ç°çãå®é ä¸ï¼ä¸ä¸ªgrailsæ件åä¸ä¸ªgrailsåºç¨åºæ¬æ¯å®å ¨ä¸æ ·çï¼åæ ·å¯ä»¥ä½¿ç¨grailsrun-appå½ä»¤æ¥è¿è¡ãåºå«ä» å¨äºä¸ä¸ªæ件çæ ¹ç®å½ä¸éè¦æä¾ä¸ä¸ªfooplugin.groovyæ件ï¼æä¾æ件çä¸äºæè¿°ä¿¡æ¯ã
grailsæ件åºæ¬å¯ä»¥åä»»ä½äºæ ï¼grails社åºå·²ç»æä¾äºåå¼åæ ·çæ件ï¼åå¸å¨grailså®æ¹æ件æºä¸ãæ¥çç°æçå®æ¹æ件ï¼å¯ä»¥æ§è¡ä¸é¢çå½ä»¤ï¼
grailslist-plugins
å®è£ æ件å¯ä»¥æ§è¡ä»¥ä¸å½ä»¤ï¼
grailsinstall-pluginæ件åææ件路å¾
HelloWorld示ä¾
æ¯æ¶ä¸ä¸ªè¢«ç¨çäºèåç»å ¸çä¾åï¼å¨å建åºç¨ç¨åºä¹åï¼å çæä¸ä¸grailså½ä»¤ç使ç¨ï¼ç¡®ä¿grailsç¯å¢å·²é 置好ï¼ã
grailscommandname
ç°å¨æ们为äºå建ä¸ä¸ªGrailsåºç¨ï¼éè¦è¾å ¥çå½ä»¤æ¯create-app
grailscreate-apphelloworld
è¿æ ·å°±å¨å½åç®å½ä¸å建äºä¸ä¸ªå为helloworldï¼å³æ们çåºç¨ç¨åºåï¼çæ件夹ï¼å¨è¿ä¸ªæ件夹ä¸å å«äºæ们è¿ä¸ªé¡¹ç®çæ´ä¸ªæ件ç®å½ï¼å¯ä»¥ä½¿ç¨å¦ä¸å½ä»¤è¿å ¥è¿ä¸ªç®å½ä¸æ¥çï¼
cdhelloworld
为äºå®æè¿ä¸ªç»å ¸çHelloWorld示ä¾ï¼æ们éè¦è¿è¡create-controllerå½ä»¤ï¼æ¨å è¿å ¥CMDå½ä»¤è¡å¹¶æ§è¡ï¼
grailscreate-controllerhello
è¿è¡è¯¥å½ä»¤åä¼å¨grails-app/controllerç®å½ä¸å建ä¸ä¸ªå为HelloController.groovyçæ§å¶å¨æ§å¶å¨ä¸»è¦ç¨æ¥å®æ对Web请æ±çå¤çï¼æ们ç¨å¾®ä¿®æ¹ä¸ä¸æ§å¶å¨çå 容ï¼ä½¿å®è½å¤å¨é¡µé¢ä¸è¾åºHelloWorld!çåæ ·ï¼ä»£ç å¦ä¸:
classHelloController{ defworld={ renderHelloWorld!}}ç°å¨æ§å¶å¨å·²ç»å®æäºï¼æ¥ä¸æ¥è¦ä½¿ç¨run-appæ¥å¯å¨å ç½®çjettyæå¡å¨è¿è¡ååå建çhelloworldç¨åº
grailsrun-appè¿è¡åä¼å¨ç«¯å£ï¼é»è®¤ï¼å¯ä»¥ä½¿ç¨-Dserver.portæ¥æå®ç«¯å£ï¼å¯å¨æå¡å¨ï¼ç¶åå¨æµè§å¨ä¸è¾å ¥æ¥å¯å¨åºç¨ç¨åº.
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æ¡æ¶çç®åä»ç»ï¼å°±ç»å¤§å®¶å享å°è¿éäºï¼å½ç¶å¦ä¹ æ¯æ°¸æ æ¢å¢çï¼å¦ä¹ ä¸é¡¹æè½æ´æ¯åçç»èº«ï¼æ以ï¼åªè¦è¯åªåå¦ï¼ä»ä¹æ¶åå¼å§é½ä¸æï¼å¸æ大家æç´§æ¶é´è¿è¡å¦ä¹ å§ã
Pythonæåªäºå¥½çWebæ¡æ¶
æµ è°äºå¤§PythonWebæ¡æ¶
说å°WebFrameworkï¼Rubyçä¸çRailsä¸ç»æ±æ¹ï¼èPythonåæ¯ä¸ä¸ªç¾è±é½æ¾çä¸çï¼åç§micro-frameworkãframeworkä¸å¯èæ°ã
è½ç¶å¦ä¸å¤§èæ¬è¯è¨PHPä¹æä¸å°æ¡æ¶ï¼ä½è¿æ²¡æPythonè¿ä¹å¤¸å¼ ï¼ä¹æ£æ¯å 为PythonWebFrameworkï¼PythonWebå¼åæ¡æ¶ï¼ä»¥ä¸ç®ç§°Pythonæ¡æ¶ï¼å¤ªå¤ï¼æ以å¨Python社åºæ»æå ³äºPythonæ¡æ¶å°ä¼å°å£çè¯é¢ï¼è®¨è®ºçæ¶é´è·¨åº¦çè³é¿è¾¾3-5å¹´ã
Pythonè¿ä¹å¤æ¡æ¶ï¼è½æ¨ä¸ªç©ä¸ªéç人ä¸å¤ï¼å¦ç½ç说æä¹åªç¨è¿å ¶ä¸çä¸ä¸ªå¼åè¿é¡¹ç®ï¼å¦å¤ä¸äºç¨å¾®æ¥è§¦è¿ï¼æ以è¿éåªè½æµ è°ä¸ä¸ã
Djangoï¼Pythonæ¡æ¶è½ç¶è¯´æ¯ç¾è±é½æ¾ï¼ä½ä»ç¶æé£ä¹ä¸å®¶æ¯æ大çï¼å®å°±æ¯Djangoãè¦è¯´Djangoæ¯Pythonæ¡æ¶éæ好çï¼æ人åæä¹æ人åå³å对ï¼ä½è¯´Djangoçææ¡£æå®åãå¸åºå æçæé«ãæèèä½æå¤ä¼°è®¡å¤§å®¶é½æ²¡ä»ä¹æè§ãDjango为人æ称éçå°æ¹ä¸»è¦æï¼?å®ç¾çææ¡£ï¼Djangoçæåï¼æè§å¾å¾å¤§ä¸é¨ååå è¦å½åäºDjangoè¿ä¹å®ç¾çå®æ¹ææ¡£ï¼å æ¬Djangobookï¼ã
å ¨å¥ç解å³æ¹æ¡ï¼Django象Railsä¸æ ·ï¼æä¾å ¨å¥ç解å³æ¹æ¡ï¼full-stackframework+batteriesincludedï¼ï¼åºæ¬è¦ä»ä¹æä»ä¹ï¼æ¯å¦ï¼cacheãsessionãfeedãormãgeoãauthï¼ï¼èä¸å ¨é¨Djangoèªå·±é ï¼å¼åç½ç«åºæçå·¥å ·Djangoåºæ¬é½ç»ä½ å好äºï¼å æ¤å¼åæçæ¯ä¸ç¨è¯´çï¼åºäºé®é¢ä¹ç®å¥½æ¾ï¼ä¸å¨ä½ ç代ç éå°±å¨Djangoçæºç éã
强大çURLè·¯ç±é ç½®ï¼Djangoè®©ä½ å¯ä»¥è®¾è®¡åºé常ä¼é çURLï¼å¨Djangoéä½ åºæ¬å¯ä»¥è·ä¸éçGETåæ°è¯´ææã?èªå©ç®¡çåå°ï¼admininterfaceæ¯Djangoéæ¯è¾å¸å¼ç¼ççä¸é¡¹contribï¼è®©ä½ å ä¹ä¸ç¨åä¸è¡ä»£ç å°±æ¥æä¸ä¸ªå®æ´çåå°ç®¡ççé¢ã
èDjangoç缺ç¹ä¸»è¦æºèªDjangoåæèªå·±é ææçè½®åï¼æ´ä¸ªç³»ç»ç¸å¯¹å°éï¼Djangoæ为人è¯ç çå°æ¹æï¼?ç³»ç»ç´§è¦åï¼å¦æä½ è§å¾Djangoå ç½®çæ项åè½ä¸æ¯å¾å¥½ï¼æ³ç¨å欢ç第ä¸æ¹åºæ¥ä»£æ¿æ¯å¾é¾çï¼æ¯å¦ä¸é¢å°è¦è¯´çORMãTemplateã
è¦å¨Djangoéç¨SQLAlchemyæMakoå ä¹æ¯ä¸å¯è½ï¼å³ä½¿æäºä¸äºè¡¥ä¸ç¨ä¸äºä¹ä¼è®©ä½ è§å¾é常é常å«æã?Djangoèªå¸¦çORMè¿ä¸å¦SQLAlchemy强大ï¼é¤äºå¨Djangoè¿ä¸äº©ä¸åå°ï¼SQLAlchemyæ¯Pythonä¸çéäºå®ä¸çORMæ åï¼å ¶å®æ¡æ¶é½æ¯æSQLAlchemyäºï¼å¯ç¬Djangoä»ç¶åæèªå·±çé£ä¸å¥ãDjangoçå¼å人å对SQLAlchemyçæ¯æä¹æ¯æè¿è®¨è®ºåå°è¯çï¼ä¸è¿æç»è¿æ¯æ¾å¼äºï¼ä¼°è®¡æ¯ä»£ä»·å¤ªé«ä¸è·Djangoå ¶å®ç模åå¾é¾åå°ä¸åã?Templateåè½æ¯è¾å¼±ï¼ä¸è½æå ¥Python代ç ï¼è¦åå¤æä¸ç¹çé»è¾éè¦å¦å¤ç¨Pythonå®ç°TagæFilterãURLé ç½®è½ç¶å¼ºå¤§ï¼ä½å ¨é¨è¦æåï¼è¿ä¸ç¹è·RailsçConventionoverconfigurationçç念å®å ¨ç¸å·¦ï¼é«æååè¯Djangoç人é åºæ¥çURLä¼æå¾å¤§å·®å¼ã
è®©äººçº ç»çauth模åï¼Djangoçauthè·å ¶å®æ¨¡åç»åç´§å¯ï¼åè½ä¹æºå¼ºçï¼å°±æ¯åçæç¹è¿äºï¼ç¨æ·çæ°æ®åºschemaé½ç»ä½ å®å¥½äºï¼è¿æ ·é®é¢å°±æ¥äºï¼æ¯å¦å¾å¤ç½ç«è¦æ±emailå°åå¯ä¸ï¼å¯schemaéè¿ä¸ªå段çå¼ä¸æ¯å¯ä¸çï¼çº ç»æ¯å¿ é¡»çäºã
Pythonæ件åé ç½®æ件ï¼èä¸æ¯æ´å¸¸è§çiniãxmlæyamlçå½¢å¼ãè¿æ¬èº«ä¸æ¯ä»ä¹é®é¢ï¼å¯æ¯å 为ç论ä¸æ¥è¯´settingsçå¼æ¯è½å¤å¨æçæ¹åçï¼è½ç¶å¤§å®¶ä¸ä¼è¿ä¹å¹²ï¼ï¼ä½è¿ä¸æ¯æä½³å®è·µçä½ç°ã?æ»çæ¥è¯´ï¼Django大å 大æ½ï¼ç¨å®æ¥å¿«éå¼åä¸äºWebè¿ç¨æ¯å¾ä¸éçãå¦æä½ é¡ºçDjangoç设计å²å¦æ¥ï¼ä½ ä¼è§å¾Djangoå¾å¥½ç¨ï¼è¶ç¨è¶é¡ºæï¼ç¸åï¼ä½ å¦æä¸è½èå ¥ææ¥åDjangoç设计å²å¦ï¼ä½ ç¨Djangoä¸å®ä¼å¾çè¦ï¼è¶æ©æ¾å¼ç好ã
æ以说å¨æäºäººç¼éDjangoæ å¼äºä»ä¸¹ï¼ä½å¯¹æä¸äºäººæ¥è¯´å®åæ¯æ¯è¯ä¸å§æ¯ã?PylonsTurboGearsrepoze.bfgé¤äºDjangoå¦ä¸ä¸ªå¤§å¤´å°±æ¯Pylonsäºï¼å 为TurboGears2.xæ¯åºäºPylonsæ¥åçï¼èrepoze.bfgä¹å·²ç»å¹¶å ¥Pylonsprojectéè¿ä¸ªå¤§ç项ç®éï¼åé¢ä¸ååç¬è®¨è®ºTurboGearsårepoze.bfgäºã
PylonsåDjangoç设计ç念å®å ¨ä¸åï¼Pylonsæ¬èº«åªæ两åè¡å·¦å³çPython代ç ï¼ä¸è¿å®è¿é带æä¸äºå ä¹å°±æ¯Pylons御ç¨ç第ä¸æ¹æ¨¡åãPylonsåªæä¾ä¸ä¸ªæ¶ååå¯éæ¹æ¡ï¼ä½ å¯ä»¥æ ¹æ®èªå·±çå好èªç±çéæ©TemplateãORMãformãauthçç»ä»¶ï¼ç³»ç»é«åº¦å¯å®å¶ãæ们常说Pythonæ¯ä¸ä¸ªè¶æ°´è¯è¨(gluelanguage)ï¼é£ä¹æ们å®å ¨å¯ä»¥è¯´Pylonså°±æ¯ä¸ä¸ªç¨è¶æ°´è¯è¨è®¾è®¡çè¶æ°´æ¡æ¶ã?éæ©Pylonså¤æ¯éæ©äºå®çèªç±ï¼éæ©äºèªç±çåæ¶ä¹é¢ç¤ºçä½ éæ©äºå©æ¢¦ï¼?å¦ä¹ å©æ¢¦ï¼Pylonsä¾èµäºè®¸å¤ç¬¬ä¸æ¹åºï¼å®ä»¬å¹¶ä¸æ¯Pylonsé ï¼ä½ å¦Pylonsçåæ¶è¿å¾å¦è¿äºåºæä¹ä½¿ç¨ï¼å ³é®æäºæ¶åä½ é½ä¸ç¥éä½ è¦å¦ä»ä¹ã
Pylonsçå¦ä¹ æ²çº¿ç¸å¯¹æ¯Djangoè¦é«çå¤ï¼èä¹åPylonsçå®æ¹ææ¡£ä¹ä¸ç´æ¯äººæ¹è¯ç对象ï¼å¥½å¨åæ¥åºäºTheDefinitiveGuidetoPylonsè¿æ¬ä¹¦ï¼è¿ä¸å±é¢æææ¹è§ãå 为è¿ä¸ªåå ï¼Pylonsä¸åº¦è¢«èªä¸ºåªéåé«æ使ç¨çPythonæ¡æ¶ã?è°è¯å©æ¢¦ï¼å 为çµæ¶å°ç模åå¤ï¼ä¸æ¦æé误åçå°±æ¯è¾é¾å®ä½é®é¢å¤å¨åªéã
å¯è½æ¯ä½ åçç¨åºçéãä¹å¯è½æ¯Pylonsåºéäºãåææ¯SQLAlchemyåºéäºãæä¸å¥½æ¯formencodeæbugï¼åæ£å¾åä¹±äºãè¿ä¸ªåªæç¨çå¾çäºæè½è§£å³è¿ä¸ªé®é¢ã?å级å©æ¢¦ï¼å®è£ Pylons大大å°å°å ±è¦å®è£ è¿ä¸ªPython模åï¼åæåèªççæ¬å·ï¼è¦å级Pylonsççæ¬ï¼åªä¸ªæ¨¡ååºäºä¸å ¼å®¹çé®é¢é½æå¯è½ï¼å级åºæ¬ä¸å¾é¾å¾é¾ãè³ä»redditçPylonsè¿åçå¨å¤è£ç0.9.6ä¸ï¼SQLAlchemyä¹è¿æ¯0.5.3ççæ¬ï¼åºè¯¥è·è¿æ¡æå ³ç³»ã
æåå ³äºæ¡æ¶éæ©ç误åº?å¨æ¡æ¶çéæ©é®é¢ä¸ï¼è®¸å¤äººå¾å®¹æå°±é·å ¥äºä¸é¢ä¸¤ä¸ªè¯¯åºä¸èä¸èªç¥ï¼
1.åªä¸ªæ¡æ¶æ好ââä¸ä¸æ²¡ææ好çæ¡æ¶ï¼åªææéåä½ èªå·±ãæéåä½ çå¢éçæ¡æ¶ãç¼ç¨è¯è¨éæ©ä¹æ¯ä¸ä¸ªéçï¼ä½ çå¢éPythonæçå°±ç¨Python好äºï¼å¦ææçæçæ¯Rubyé£å°±ç¨Ruby好äºï¼ç¼ç¨è¯è¨ãæ¡æ¶é½åªæ¯å·¥å ·ï¼è½å¤ãå¿«ã好ãççå¹²å®æ´»å°±æ¯å¥½ä¸è¥¿ã2.è¿åå ³æ³¨æ§è½ââå ¶å®å¤§é¨å人æ¯æ²¡å¿ è¦å¤ªå ³å¿æ¡æ¶çæ§è½çï¼å ä¸ºä½ å¼åçç½ç«æ ¹æ¬å°±æ¯ä¸ªå°ç«ï¼è½ä¸1ä¸çIPçç½ç«å·²ç»ä¸å¤äºï¼ä¸ä¸çæ´æ¯å¾å°å¾å°ãå¨æ²¡æä¸å®ç访é®éåè°æ§è½å ¶å®æ¯æ²¡æå¤å¤§æä¹çï¼å ä¸ºä½ çCPUåå åä¸ç´å°±é²çå¢ãèä¸è¯è¨åæ¡æ¶ä¸è¬ä¹ä¸ä¼æ¯æ§è½ç¶é¢ï¼æ§è½é®é¢æ常åºç°å¨æ°æ®åºè®¿é®åæ件读åä¸ãPHPçZendFrameworkæ¯åºäºåçæ ¢ï¼ä½æ¯ZendFrameworkä¸æ ·æ大ç«ï¼å¦ï¼digg.comï¼å¸¸è¢«äººè¯´ææ§è½é®é¢çRubyåRailsï¼ä¸æ¯ç §æ ·å¯ä»¥å¼ååºtwitteråï¼åè ç°å¨ç硬件ã带宽ææ¬å ¶å®æ¯å¾ä½çï¼ç¹å«æäºäºè®¡ç®å¹³å°åï¼äººåææ¬ææ¯æè´µçï¼æ²¡æä¸ä¸çIPæ ¹æ¬å°±ä¸ç¨å¤ªå¨ææ§è½é®é¢ï¼æµéä¸å»äºè±ç¹é±ä¹°ç¹æå¡å¨ç©ºé´å¥½äºï¼ç®åå¿«éç解å³æ§è½é®é¢ã?注ï¼åé¢æç½åè´¨çæâQuoraæ¯ç¨Pylonså¼åçâè¿æ ·ç说æ³ä¸å®¢è§ï¼ç¹è¯´æä¸ä¸ï¼è¿éæ说çæ个ç½ç«Aæ¯ç¨Bå¼åçï¼åªæ¯æA主è¦æé¨åæ¯ç±Bå¼åçï¼å¤§å®¶å°±ä¸è¦åå»çº ç»Aè¿ç¨Cäºã
å ³äºpythonwebï¼å»ºè®®å¤å¦ä¹ ä¸ä¸å¤§ç¥çæ¡ä¾ãä»éé¢æåç²¾é«çä¸è¥¿å 以å¸æ¶ï¼Pythonå¦ä¹ æå请çä¸é¢ç代ç
learning?=?input('Do?you?want?to?learn?Python?now(Yes?or?No):')
a?=?str(learning)
if?a?==?'Yes':
print('QQ')
else:
print('Thanks!!')
DjangoåFlaskæ¯è¾å°åºåªä¸ªæ¯è¾å¥½ç¨Flaskæ¯å°èç²¾çå¾®æ¡æ¶ï¼å®ä¸åDjangoé£æ ·å¤§èå ¨ï¼å¦æ使ç¨Flaskå¼åï¼å¼åè éè¦èªå·±å³å®ä½¿ç¨åªä¸ªæ°æ®åºORMã模åç³»ç»ãç¨æ·è®¤è¯ç³»ç»çï¼éè¦èªå·±ç»æã
ä¸éç¨Djangoå¼å对æ¯ï¼å¼åè å¨é¡¹ç®å¼å§çæ¶åå¯è½éè¦è±è´¹æ´å¤çæ¶é´å»äºè§£ãæéå个ç»ä»¶ï¼å æ¤Flaskå¼åççµæ´»åº¦æ´é«ï¼å¼åè å¯ä»¥æ ¹æ®èªå·±çéè¦å»éæ©åéçæ件ã
å½ç¶Flaskåå²ç¸å¯¹è¾çï¼ç¬¬ä¸æ¹APPèªç¶æ²¡æDjangoé£ä¹å ¨é¢ã
ç»è¯ï¼ä»¥ä¸å°±æ¯é¦å¸CTOç¬è®°ä¸ºå¤§å®¶æ´ççå ³äºgrailsdjangoåªä¸ªå¥½çç¸å ³å 容解çæ±æ»äºï¼å¸æ对æ¨ææ帮å©ï¼å¦æ解å³äºæ¨çé®é¢æ¬¢è¿å享ç»æ´å¤å ³æ³¨æ¤é®é¢çæååï½
最新源支付系统源码 V7版全开源 免授权 附搭建教程
最新源支付系统源码 V7版全开源,无需授权,源码提供详尽搭建教程,框架i框专门为个人站长设计的源码聚合免签系统,性能卓越功能丰富。框架i框采用轻量化界面UI,源码178动漫源码解决知识付费与运营赞助难题。框架i框基于thinkphp 6.1.4、源码layui2.9.3与PearAdmin架构,框架i框具备实时监控与管理功能,源码让用户随时掌握系统运营状态。框架i框
系统运行环境包括:
1. Nignx/Apache/IIS
2. PHP 8.1
3. Mysql 5.6 至 5.7版本
4. Redis
5. Supervisor
后台操作界面截图如下:
XlEP分销系统
XlEP分销系统是源码一个不错的程序源码,通过PHP语言提供底层源码,框架i框然后可以让用户自己搭建各种自定义的源码功能,XlEP分销系统当然实为销售和商铺而准备的框架i框,所以大家可以自己看一看!
相关说明
本程序基于内核(EPD)修改/开发本次开发使程序更轻量简洁 并优化的部分BUG搭建使用PHP版本:5.6南栀对用户中心和后台框架进行了更换和美化我就对源码的进行一个修复,加了监控功能,首页模板功能,首页模板layui可以放心使用!v1.. 更改后台框架为ok-admin2. 更改用户中心为argon 和后台均脱离原Ui
其他内容
产品分销速度快,省去了传统的产品从企业仓库到消费者手中的周期,开源商城分销系统直接在取代成员间建立合作,使得渠道成员分工明确,职责明确,大大提高分销效率;
产品覆盖率高,开源商城分销系统通过提高成员的积极性,依靠渠道力量和企业分销代表的协销制度、严格量化的市场管理考核制度,对产品市场的覆盖渠道双管齐下,进行统一管控。
产品价格稳定,打破传统分销先天不足、渠道乱价的现象,开源商城分销系统利用企业分销代表对市场一级分销商、二级批发客户的价格进行管控及管理,严格高效。
layUI之树状表格异步加载组件treetableAsync.js(基于treetable.js)
在后台框架中,树状表格的使用极为常见,layUI由于自身没有提供该组件,因此第三方的网站收录站源码treetable.js实现了这一功能,但其无法实现双击时的异步加载数据。本文旨在在此基础上,创新性地提供具有异步加载功能的树状表格组件。
该组件基于treetable.js进行开发,最大的特色在于实现了异步加载树状表格,满足了需要异步加载功能的用户需求。若您的项目无需异步加载功能,直接使用treetable.js即可;若需要异步加载功能,则建议选择本组件。
请注意,由于treetable.js的源代码进行了修改,因此请勿直接使用官方版本(如需使用,请私聊作者获取修改后的版本)。组件的使用需首先引入treetable.js。
本组件适用于layUIAdmin环境。在使用过程中,Ajax请求基于layUIAdmin的admin.req()方法进行,若不使用layUIAdmin,需要自行调整源码。
组件中的方法完全支持treetable.js的所有功能,因此在treetable.js中可用的方法,同样可在本组件中调用。对于treetable.js不支持的其他方法,用户可以通过调用layUI原生的数据表格组件的相应方法来实现。
组件源码已提供,欢迎用户在使用过程中提出问题或建议,可通过评论留言方式与作者交流。建议用户仔细阅读treetable.js的帮助文档,以熟悉组件的所有方法属性。
对于未实现异步加载功能的treetable.js,本组件提供了一种简便的实现方式,其核心理念是在layUI数据表格之上进行扩展实现。用户可以下载整个文件夹并将其整合到项目中,然后使用模块加载的方法进行调用。
渲染表格时,可以使用URL传递数据,或者通过data参数传递数据。在数据格式上,应遵循以id、pid的萝卜影视绿色源码形式构建树形结构,这两个字段的名称可以根据需要自定义。
在使用过程中,用户可以利用layui数据表格的所有参数,同时也可以利用treetable新增的参数,如treeColIndex、treeSpid、treeIdName、treePidName、treeDefaultClose、treeLinkage等,以实现更灵活的配置。
值得注意的是,组件提供了全面展开和折叠的功能,可以通过JavaScript方法treetable.foldAll('#table1')实现。对于图标修改,用户可以通过CSS进行调整,包括修改文件夹、文件及箭头的图标。获取图标的unicode字符,可以查看对应的CSS代码。
最后,通过截图展示了树形表格的两种实现方式,供用户参考。通过上述内容,您可以更直观地了解并使用具有异步加载功能的树状表格组件。
node端用的ui框架?
北大青鸟java培训:常用的UI框架有哪些?
1、Bootstrap说到流行的UI框架,那么Bootstrap是一定会出现在榜单上的。它是由twitter推出的Web前端UI框架,它由Twitter的设计师MarkOtto和JacobThornton合作开发。Bootstrap通过它优秀的栅栏系统,很好的实现了响应式布局。
2、ReactJSReact.js(React)是一个JavaScript库,它主要使用MVC的V(视图)React构建UI。React起源于架设Instagram网站,年5月开放源代码化的Facebook内部项目。
3、SpringMVC:出现时间久远,具有较好的听书播放iapp源码开发系统,帮助你查询需要的。最好和最知名的Java框架之一。Struts2:对于Java软件开发工程师是个很好的选择。它使得测试写代码所需的工作量减轻了。不过它也是不够灵活的。
前端现在企业主要用的是哪些框架,自学可以吗?框架:bootstrap、vue、react、angular、sass企业开发应用。给你一些自学的建议:做好心理准备虽说前端学习起来相对简单,但是还是要做好吃苦的准备,坚定自己的信心。
自学肯定也是可以的,最主要还是要看个人的学习能力,意志力,和自己的决心,下面我就说一下,在自学时需要注意的一些误区和如何自学前端知识。
随着互联网技术的不断发展,程序员们用的前端框架也在不断的更新变化,前端框架从以前常用的jQuery、Bootstrap等框架,发展成现在的Vue、React、Angular三足鼎立的局面,这三个框架各有千秋,而且都是比较成熟的框架。
Angular是一个比较完整的前端框架,包含了服务、模板、双向数据绑定、模块化、路由、过滤器、依赖注入等所有功能。自定义指令后可以在项目中多次使用。React:React可以非常容易地创建用户界面。
ExtJS是一种主要用于创建前端用户界面,是用源码求补码一个基本与后台技术无关的前端ajax框架。easyuieasyui帮助你构建你的web应用更加容易。它是一个基于jquery的插件,开发出来的一套轻量级的ui框架,非常小巧而且功能丰富。
浪起科技建站后台管理系统常用的ui框架有哪些?1、bootstrap相对来说是比较成熟的一个框架,现在已经更新到X版本。是一个很成熟的框架,这个大部分人一般都用过。适用范围对比:layui其实更偏向与后端开发人员使用,在服务端页面上有非常好的效果做后台框架。
2、Pure也是一款很出色的CSS框架,Pure是来自雅虎的。尽管从UI界面效果上来说,Pure没有Bootstrap那样精美,但Pure是纯CSS实现的,因此非常小巧,整个框架压缩后只有7k左右。
3、回答:还是要看你平时自己的操作习惯呢。从前端框架的流行度来排序,以下有几种都可以向你推荐~一般来说,有两个选择,使用EXT、EasyUI这些重大的UI库方案,其中EXT具有严重的排它性,它很难与其他前端解决方案并用。
nodejs:用ejs模板和gulp实现前端组件化1、最近在用nodejs将公司商城的底层重写。基于nodejs的强大,我从原本的只写前端变成了写全栈。框架采用express,模板用ejs,前端用amazeui.做完三个页面后,设计突然说要改UI设计,我勒个去,郁闷地一个个页面重新调整。
2、使用CommonJS编写前端JS模块,使用Browserify打包JS,同时可以使用gulp进行其他前段构建工作,比如assets,Sass/Less,minify等。后端:使用Java编写RestfulAPI供前端consume,或者直接渲染前端页面。
3、前端开发高效化主要体现在Web前端正在进行独立部署,前端与后端的沟通主要通过资源接口的方式来进行。前端开发全栈化也是一个比较明显的趋势,比如Nodejs的应用。第三:注重动手实践能力的培养。
4、对输出的变量自动进行特殊字符的encode当然,这些ejs或传统模板也有能实现的,但是用起来感觉都很挫。实际上,Jade在这方面其实做得还不够好(我打算顺着这个思路做个开源的项目),但是比那些传统模板还是要优雅多了。
常见的前端框架reactjs、Angularjs、Vuejs、nodejs、bootstrap、easyui...
1、Angular:Angular是一款优秀的前端JS框架,Angular有着诸多特性,最为核心的是MVW(Model-View-Whatever)、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。
2、现在比较常用的主流框架有Vue、React、Angular。
3、Web前端框架有:Bootstrap框架、React框架、Vue框架、Angular框架、Foundation框架、TypeScript框架。
4、VueVue是行内的大趋势,还可以用来开发小程序。同时他也是双向数据流。有些人认为Vue是Angular和React的结合,既有Angular的模板语法也有React的组件化体系。BootstrapBoostrap绝对是目前使用广泛的一款框架。
5、BlurAdmin是一款使用AngularJs+Bootstrap实现的单页管理端模版,视觉冲击极强的管理后台,各种动画效果。
前端常用的框架有哪些?Foundation框架Foundation框架总体来看要比Bootstrap略显高大上一点,但他们俩的设计理念都是非常清楚的,Bootstrap有引导的意思,它尝试处理你项目中的一切所需。
Foundation框架Foundation框架总体来看要比Bootstrap略显高大上一点,但他们俩的设计理念都是非常清楚的,Bootstrap有引导的意思尝试处理你项目中的一切所需。
现在比较常用的主流框架有Vue、React、Angular。
Angular:Angular是一个优秀的前端JS框架。Angular有很多特性,核心是MVW(Model-View-Whatever)、模块化、自动双向数据绑定、语义标注、依赖注入等。
在DJango中如何使用layui(年最新整理)
导读:今天首席CTO笔记来给各位分享关于在DJango中如何使用layui的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!Layui(二):图标和按钮方法1:使用字符实体
只需要在一个class为layui-icon的容器类标签中加入字符的unicode码即可。
相关样式:layui-icon,代表使用layui的图标处理样式去渲染
方法2:使用样式
在class为layui-icon的容器类标签后追加对应的图标样式,而不需要在写unicode码。
相关图标样式可以去官网的文档查找。
相关样式:
(1)必要样式:layui-btn
(2)主题样式:
layui-btn-primary原始按钮
layui-btn-normal百搭按钮
layui-btn-warm暖色按钮
layui-btn-danger警告按钮
layui-btn-disabled禁用按钮
(3)大小样式:
layui-btn-lg最大按钮
layui-btn-sm小型按钮
layui-btn-xs迷你按钮
(4)图标结合:
把图标的样式也添加到class中即可
(5)圆角按钮:
layui-btn-radius
(6)按钮组:
套上一层class为layui-btn-group
layui按钮的事件监听可以使用jquery来做。
在layui内部使用jquery的方式:
layui的基本使用介绍方法:layui.define([mods],callback)
本地存储是对localStorage和sessionStorage的友好封装,可更方便地管理本地数据。
localStorage持久化存储:layui.data(table,settings),数据会永久存在,除非物理删除。
sessionStorage会话性存储:layui.sessionData(table,settings),页面关闭后即失效。注:layui2.2.5新增
layui.device(key)
方法/属性描述
layui.cache静态属性。获得一些配置及临时的缓存信息
layui.extend(options)拓展一个模块别名,如:layui.extend({ test:'/res/js/test'})
layui.each(obj,fn)对象(Array、Object、DOM对象等)遍历,可用于取代for语句
layui.getStyle(node,name)获得一个原始DOM节点的style属性值,如:layui.getStyle(document.body,'font-size')
layui.img(url,callback,error)预加载
layui.sort(obj,key,desc)将数组中的对象按某个成员重新对该数组排序,如:layui.sort([{ a:3},{ a:1},{ a:5}],'a')
layui.router()获得location.hash路由,目前在Layui中没发挥作用。对做单页应用会派上用场。
layui.hint()向控制台打印一些异常信息,目前只返回了error方法:layui.hint().error('出错啦')
layui.stope(e)阻止事件冒泡
layui.onevent(modName,events,callback)自定义模块事件,属于比较高级的应用。有兴趣的同学可以阅读layui.js源码以及form模块
layui.event(modName,events,params)执行自定义模块事件,搭配onevent使用
layui.factory(modName)用于获取模块对应的define回调函数
模块命名空间
layui的模块接口会绑定在layui对象下,内部由layui.define()方法来完成。每一个模块都会一个特有的名字,并且无法被占用。所以你无需担心模块的空间被污染,除非你主动deletelayui.{ 模块名}。调用模块可通过layui.use方法来实现,然后再通过layui对象获得模块接口。
如何使用内部jQuery
//主动加载jquery模块
layui.use(['jquery','layer'],function(){
var//重点处
,layer=layui.layer;
//后面就跟你平时使用jQuery一样
$('body').append('hellojquery');
});
layui打开页面先加载
一、我们在使用layui.table前必须初始化layui模块,用到的模块一般常用的有两种layer(弹出层)和table(数据表格),然后用function进行模快的初始化,当然在初始化模块之前我们必须声明几个全局变量,
声明两个变量(layer和layuiTable)来接收模块的数据,并且保存layui模块以便全局使用。
声明一个变量(tabStudent)来放置表格数据。
二、开始初始化模块
首先我们在加载事件里面将声明的那两个变量来接收layer(弹出层)和table(数据表格)
三、接下来就是初始化表格,初始化得到的数据就放入刚刚声明的全局变量(tabStudent)里面
四、在然后就是写初始化表格里面的参数:
将表格的ID放入elem(指定原始table容器的选择器或DOM,方法渲染方式必填)里面
查询方法的路径(url:异步数据接口相关参数,url参数为必填项)
设置表头(cols)将表格的结构放入
例:
需要写一个方法来设置最后一列来返回设置在最后一列所设置的操作按钮,比如当我们要在操作那行设置一个修改和删除的按钮的时候:
Onclick是点击事件
4.设置表格每页的行数:page(开启分页):{
limit:n(指定每页显示的条数)
limits:[5,,,n](每页条数的选择项)}
5.当你需要表格的一些“列显示隐藏”“打印”或者“导出”功能的时候你就必须设置开启表格的工具栏
参数toolbar的作用便是开启表格头部工具栏区域,该参数支持4种类型值:
toolbar:’#toolbarDemo(注:该代码取的是自定义好的模板的ID该模板可以放在页面的任意位置)’指定自定义工具栏模板选择器toolbar:’xxx’直接传入工具栏模板字符toolbar:true仅开启工具栏,不显示左侧模板toolbar:‘default’让工具栏左侧显示默认的内置模板该参数的默认值为false.
6.设置表格的图标:
defaultToolbar:可以自由配置头部工具右侧的图标,数组可以3种:
defaultToolbar:[‘filter’]:显示筛选图标
defaultToolbar[‘exports’]:显示导出图标
defaultToolbar[‘print’]:显示打印图标
这些值也可以根据排序的顺序来显示排版图标,如defaultToolbar:[‘filter’,’exports’,’print’
7.Table容器的默认宽度是跟随它的父元素铺满的,你也可以设定一个固定的值(width),当容器中的内容超出了该宽度时,会自动出现横向滚动条。甚至还可以设置表格的高(height)。
8.如果你点击一个切换分页时不知道它是否为加载状态,则你可以添加loading这个参数,它的作用就是是否显示加载条,默认值是为true,如果设置false则在切换分页时不会出现加载条(注:该参数只是适于url参数开启的方式)。
五、然后就是在控制器为表格添加数据,数据添加完成后将其方法名称放入url里面。
layuitabletoolbar的使用使用layui的table功能时,在参考官方文档layui数据表格情况下,修改工具栏左侧显示默认的内置模板。
toolbar:'default'?//让工具栏左侧显示默认的内置模板
左侧的内置以layui-icon显示的操作按钮就展示出来,如图所示-左侧部分
但有时根据项目需求,不需要显示添加编辑删除中的某一个或者某两个功能时,我们可以如下操作:
点击功能方法参考官网文档即可;
例如:不想自定义一个复杂的导出功能,在使用官网给的例子的情况下,使用自己的导出方法。删除掉默认模板导出功能,如下图所示:
总结:利用官网文档学习使用layui框架,再此基础上进行修改和完善达到我们想要的功能。
Layui-基本使用、数据调试首先是官方文档。我真的不是第一次觉得阅读官方文档比百度上搜索要有效率几百倍了,当然前提教程是汉语。
组件库
使用文档
Springboot+Thymeleaf+layui框架的配置与使用
Springdatajpa分页+layui数据表格渲染数据
我觉得我现在能看懂了,感慨。
layui.table里面json数据有多层嵌套,请问要怎么获取数据?
下面这个主楼里用的是改底层源码的方式,我觉得不可取。
layui数据表格total和data无法使用多层嵌套json格式的数据的解决办法
下面有对主楼这样的补充,但也是改的底层源码:
我用的版本中Layui符号是以字体的形式表示的(layui2.3.0之前只支持采用unicode字符),可能也是被拦截掉了,参考以下写法。
SpringBoot中引用LayUIfont不显示问题解决办法
以后可以直接使用内联元素调出字体图标。
Layui字体图标库
第二种方法(我没试过):
SpringBoot使用layui的字体图标时无法正常显示解决办法
layuiAdmin使用总结,基于springmvc
Layui在MVC下的配置过程,我没用到,但是感觉不错。去看了看这位以前的文章,感叹大佬真的太多了,随处一看就都是大佬。
虽然大家都说毕设很水,但是年轻又有为的人却不计其数,可能他们很聪明早就开始做自己的项目了,没把毕设当作发力点。那我就将错就错吧,我想学习,我很羡慕。
通过table.render来刷新、绘制table
Layui表格单元格编辑保存
le可编辑扩展下拉框编辑器
layui的table中日期格式转换
这个除了显示其实还有个问题:当这个日期还是null时,会自动显示当前日期,所以需要加一个判断,不为空才显示。
下面是我用在了进度计划行内编辑中的例子。
如何在Django中使用第三方库DATABASES={
'default':{
'ENGINE':'django.db.backends.sqlite3',#Add'postgresql_psycopg2','mysql','sqlite3'or'oracle'.
'NAME':'demo.db',#Orpathtodatabasefileifusingsqlite3.
#Thefollowingsettingsarenotusedwithsqlite3:
'USER':'',
'PASSWORD':'',
'HOST':'',#Emptyforlocalhostthroughdomainsocketsor'.0.0.1'forlocalhostthroughTCP.
'PORT':'',#Settoemptystringfordefault.
}
}
INSTALLED_APPS=(
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
#Uncommentthenextlinetoenabletheadmin:
#'django.contrib.admin',
#Uncommentthenextlinetoenableadmindocumentation:
#'django.contrib.admindocs',
'south',
'LearnSouth',
'books',
)
结语:以上就是首席CTO笔记为大家整理的关于在DJango中如何使用layui的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于在DJango中如何使用layui的相关内容别忘了在本站进行查找喔。
2024-12-01 00:12
2024-11-30 23:52
2024-11-30 22:38
2024-11-30 22:16
2024-11-30 22:02