不過世界真是奇妙,如今我們就在猴年馬月裏!2016年是猴年,按農曆計算,6月5日至7月3日是庚午月,正好是「猴年」裏的「馬月」。那麼問題來了:你想不想在猴年馬月裏學會django呢?css
下面咱們嘗試一下,用15行代碼結合django寫個web程序,來一次django的清爽體驗。html
固然,複雜的很呢!!!若是你是跟着官方文檔自學過,就會知道,那裏有個初級項目是投票網站,分了6部分纔講完。並且若是你是個完徹底全網絡編程的初學者,估計過了第3篇纔看出個這個項目的樣子。並且在學習中,還須要瞭解django最重要的幾方面內容:前端
好比目錄結構:python
運行django-admin startproject sitename
後,你會看見sitename文件夾裏的四個文件:web
__init__.py settings.py urls.py wsgi.py
再運行python manage.py startapp app01
後,還能夠在app01這個app的目錄裏看出來所謂的MTV架構。chrome
__init__.py admin.py models.py # M,定義各類數據類 templates # T,這是個目錄,放html模板的,固然你能夠建到項目路徑下 views.py # V,根據路由編寫的響應各類請求的函數 app.py ...
若是你用過pycharm,新建工程和app後的代碼結構如圖所示,帥哥作的很好,直接用了。 數據庫
固然,這些只是個初級認識,後面還要學習urls處理各類路由,而後怎麼定義數據庫,怎麼先後端傳數據,手續很複雜啊!django
可是,你看看人家flask,bottle,分分鐘就弄出個hello world
啊!立馬就知道大體的框架用法了,django是否是也能這麼玩呢?編程
巧了,國外早有django愛好者嘗試過django的簡單玩法,並且還專門寫了本書。今天就拋磚引玉,你們一塊兒來玩玩!flask
talk is simple, show me the code!
# -*- coding:utf-8 -*- # a mini Django project import sys from django.conf import settings from django.conf.urls import url from django.http import HttpResponse from django.core.management import execute_from_command_line settings.configure( DEBUG = True, # 調試狀態 SECRET_KEY = 'iamasecretkeyhahahaha', # 默認的session須要的key,也爲了CSRF ROOT_URLCONF = sys.modules[__name__], # url根目錄的配置 ) def home(request): return HttpResponse('a mini django website') # 主頁 urlpatterns = [ url(r'^$', home), # 元組類型,默認請求發送到home函數 ] # 啓動程序 if __name__ == "__main__": execute_from_command_line(sys.argv)
新建個文件,好比miniWeb.py
,寫上這些代碼,而後在當前目錄下,命令行運行:
>python miniWeb.py runserver
看到這些說明運行成功!
System check identified no issues (0 silenced). June 13, 2016 - 12:23:51 Django version 1.9.7, using settings None Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
而後用瀏覽器打開http://localhost:8000/
, wow, look at that! a mini django website
應該已經出如今你的瀏覽器裏!
是否是太簡單了? 哈哈! 要的就是這種清爽感受!爽不爽?不算註釋的話,也就15行吧。
簡單解釋一下:這些代碼其實就是把一個django標配的settings,view,url,manage幾個文件進行了簡化與整合,目的在於用最小的代碼向你展現django的網頁響應過程。 實際也就是把django中的請求生命週期放在一個文件中展現了(咱們這裏尚未涉及到model部分)。
流程以下:
1.__name__這行在學習python的時候天天都會用到,就是一個入口函數,在咱們這裏就是一個命令行的入口,經過命令行傳入
runserver
參數,而後django內部會本身處理;
2.而後咱們打開http://localhost:8000/
,這時候訪問的是網站的根目錄url,咱們在urlpatterns
裏面,爲這個指明瞭要跳轉的函數,也就是home
;
3.在home
函數中,會經過Http響應,將頁面內容返回給網頁前端;
4.因而,咱們看到了頁面內容a mini django website
.
只有一行文字啊,這網站太low了!我們給他加點鹽,弄個html模板好很差?
仍是直接看代碼,關鍵地方我加了註釋:
# -*- coding:utf-8 -*- # a mini Django project import os # 添加模板路徑使用 import sys # 保存當前路徑 BASE_PATH= os.path.dirname(__file__) from django.conf import settings from django.conf.urls import url # from django.http import HttpResponse # 不須要了 from django.shortcuts import render # 渲染模板,讓html中顯示後臺自定義內容 from django.core.management import execute_from_command_line settings.configure( DEBUG = True, # 調試狀態 SECRET_KEY = 'iamasecretkeyhahahaha', # 默認的session須要的key,也爲了CSRF ROOT_URLCONF = sys.modules[__name__], # url根目錄的配置 TEMPLATE_DIRS = ( os.path.join(BASE_PATH, 'templates'), # 告訴django在當前目錄下找templates文件夾,這裏仍是元組,記得逗號! ), # 這裏記得有逗號,由於setting的配置也是元組 INSTALLED_APPS = ( # 默認的認證和內容的app,須要添加避免傳數據的錯誤 'django.contrib.auth', 'django.contrib.contenttypes', ), ) def home(request): #return HttpResponse('a mini django website') # 主頁 data = {'name': 'alex', 'age':18} # 經過模板語言傳到頁面的數據 print data return render(request, 'index.html', {'data': data}) urlpatterns = [ url(r'^$', home, name='home'), # 元組類型,默認請求發送到home函數 ] # 啓動程序 if __name__ == "__main__": execute_from_command_line(sys.argv)
比剛纔多了些模板文件的內容,這時候咱們還須要在當前目錄下新建一個文件夾,名字就是templates
,而後在裏面新建一個html文件,能夠像我這個同樣,
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>mini django</title> <meta name="description" content=""> <meta name="keywords" content=""> <link href="" rel="stylesheet"> </head> <body> <h1>顯示一下data:</h1> {{ data }} <h2>分開輸出:</h2> <li>name:`data`.`name`</li> <li>age:`data`.`age`</li> </body> </html>
注意裏面用到了一點模板語言,用{{}}表示的,其實就是個上面render
函數最後的參數替換而已。
也就是這句:
return render(request, 'index.html', {'data': data})
注意這裏,爲了和django默認新建工程一致,我把當前目錄名和py文件名字都改爲同樣的了:miniDjango.
命令行運行: >python miniDjango.py runserver
再次打開瀏覽器,訪問:http://localhost:8000/
, wow, look at that!
顯示一下data: {'age': 18, 'name': 'alex'} 分開輸出: name:alex age:18
是否是高大上了不少!
甚至,咱們能夠直接用Bootstrap的http://v3.bootcss.com/examples/jumbotron/這個模板測試一下。
首先保存這個網頁的源碼爲bt.html文件,放到templates文件夾。
而後添加url和view函數: 以下所示:
def bt(request): data = {'title': 'alex', 'headings':['我是標題1', '我是標題2','我是標題3']} # 經過模板語言傳到頁面的數據 return render(request, 'bt.html', {'data': data}) urlpatterns = [ url(r'^$', home, name='home'), # 元組類型,默認請求發送到home函數 url(r'^bt/$', bt, name='bt'), # 元組類型,默認請求發送到bt函數 ]
而後訪問http://localhost:8000/bt/
就能夠看見效果了! 以下圖所示:
若是說學習django像作一桌大餐,上面我們討論的這點內容頂可能是作了個番茄炒蛋。想要學習更多,還須要好好的多加練習,多和一塊兒學習的小夥伴討論,最好再有個名師指點。
人生苦短,我用Python,加油吧,小夥伴們!
今天django的清爽體驗到這裏就結束了。 歡迎留言一塊兒討論交流!
http://radar.oreilly.com/2014/04/simplifying-django.html
Lightweight Django [book]