Read Sean

          Read me, read Sean.
          posts - 508, comments - 655, trackbacks - 9, articles - 4

          Django: Up and Running

          Posted on 2007-11-28 00:57 laogao 閱讀(764) 評論(0)  編輯  收藏 所屬分類: Programming in GeneralThe Other SideOther Languages

          算到現在,已經有將近半年沒有寫過技術文章了,手癢癢,于是拿Django來說事,希望最終的產出能夠做成一個簡短易懂的Django快速起步,讓初次接觸Django的朋友能夠在最短的時間內了解Django的基本概念和結構。

          Django是使用Python實現的一個基于MVC的web應用框架,類似Ruby世界的Ruby on Rails。如果你是通過Google搜到這篇文章,那么說明你已經對Django有所耳聞,并且愿意了解更多Django相關的信息。我在這里就不多廢 話Ruby vs Python或者Rails vs Django,直奔主題。

          在寫這篇文章時,最新的CPython版本為2.5.1,Django版本為0.96,如無特別說明,本文所有介紹和示例均以此環境為準。

          0- 在開始之前,首先當然是安裝一個基本能用的開發環境。

          如果你的操作系統是Linux或者其他類Unix系統,很可能已經預裝了Python,可以在命令行執行python -V查看Python版本。如果你是Windows操作系統,或者想嘗試不同版本的Python,那么可以到http://www.python.org/下載相應的安裝包進行安裝。

          有了Python以后,到http://www.djangoproject.com/下載Django,解壓以后,cd到解壓出來的目錄,執行python setup.py install。

          為了能夠做出一個基本的多層web應用,還需要安裝一個數據庫,如果沒有特別喜好和偏向,推薦PostgreSQL,可以在http://www.postgresql.org/找到合適的版本下載和安裝。

          我們還缺少一個數據庫驅動,在http://www.initd.org/pub/software/psycopg/可以找到用于連接PostgreSQL的psycopg2,安裝方法類似Django。

          1- django-admin.py startproject

          所有環境OK以后,我們開始動手把玩Django,首先找一個干凈的目錄,執行
          $ python django-admin.py startproject hello

          上面這行命令會新建一個hello子目錄,包含以下文件:
          __init.py__: 表示該目錄存放Python程序
          manage.py: 提供Django項目相關的管理操作
          settings.py: 相當于該Django項目的全局設置
          urls.py: 用于配置URL映射,基本上就是通過正則表達式指定不同URL由相應的view方法相應

          2- manage.py runserver

          至此我們已經搭起了一個基本的Django項目框架,執行
          $ python manage.py runserver
          命令行會提示在8000端口運行一個開發用的web server,轉到瀏覽器的http://localhost:8000/即可看到It worked!的提示信息。你也可以指定端口號,方法是python manage.py runserver XXXX。

          3- settings.py

          接下來我們做一個完整的從model/數據庫到view/template的例子。修改settings.py:
          DATABASE_ENGINE?=?'postgresql_psycopg2'
          DATABASE_NAME?
          =?'hello'?#?Your?db?name
          DATABASE_USER?=?'postgres'?#?Your?db?user
          DATABASE_PASSWORD?=?'********'?#?Your?db?password
          DATABASE_HOST?=?''
          DATABASE_PORT?
          =?''

          INSTALLED_APPS?
          =?(
          ????
          'django.contrib.auth',
          ????
          'django.contrib.contenttypes',
          ????
          'django.contrib.sessions',
          ????
          'django.contrib.sites',
          ????
          'hello',?#?Our?new?project
          )?

          4- models.py

          新建models.py:
          from?datetime?import?datetime
          from?django.db?import?models

          class?Book(models.Model):
          ????isbn????????
          =?models.SlugField(maxlength=20)
          ????title???????
          =?models.CharField(maxlength=200)
          ????author??????
          =?models.CharField(maxlength=200)
          ????description?
          =?models.TextField(blank=True,null=True)
          ????published???
          =?models.DateTimeField(default=datetime.now)
          這里我們從django.db.models.Model繼承我們的model類Book,同時還用到了models中現成的字段類,如 SlugField、CharField、TextField、DateTimeField等。大家比較陌生的恐怕是SlugField,這個基本上類似 CharField,不過增加了其內容需要符合URL要求的限制條件。

          執行下面的命令測試數據庫腳本的生成:
          $ python manage.py sql hello
          應該看到如下輸出結果:
          BEGIN;
          CREATE TABLE "hello_book" (
          "id" serial NOT NULL PRIMARY KEY,
          "isbn" varchar(20) NOT NULL,
          "title" varchar(200) NOT NULL,
          "author" varchar(200) NOT NULL,
          "description" text NULL,
          "published" timestamp with time zone NOT NULL
          );
          COMMIT;

          確認無誤后可以通過下面的命令提交到數據庫:
          $ python manage.py syncdb
          其間會要求我們創建一個管理員賬號,如果暫時不打算做admin頁面,可以跳過。

          5- views.py

          model有了之后,接下來我們就可以開始畫視圖了。由于篇幅和時間有限,我僅簡單介紹一下Django的template,然后實現一個最基本的圖書清單頁面。

          首先定義圖書清單的URL,在urls.py中:
          from?django.conf.urls.defaults?import?*

          urlpatterns?
          =?patterns('hello.views',
          ????(r
          '^hello/books/$',?'book_list'),
          )
          含義為hello/books/這個URI資源對應的相應view方法為hello.views.book_list。

          新建templates目錄,然后新建books.html:
          <html??xmlns="http://www.w3.org/1999/xhtml"?lang="zh-cn"?xml:lang="zh-cn">
          <head>
          <title>{{?title|escape?}}</title>
          </head>
          <body>
          <h2>{{?title?}}</h2>
          <table?border="1">
          ??
          <tr><th>ISBN</th><th>書名</th><th>作者</th><th>出版日期</th></tr>
          ??{%?for?book?in?books?%}
          ??
          <tr>
          ????
          <td>{{?book.isbn?}}</td>
          ????
          <td>{{?book.title?}}</td>
          ????
          <td>{{?book.author?}}</td>
          ????
          <td>{{?book.published?}}</td>
          ??
          </tr>
          ??{%?endfor?%}
          </table>
          </body>
          </html>
          Django模板的語法是{{}}表示引用,{%%}表示代碼,使用起來也很直觀,甚至支持UNIX風格的filter,如這里的{{ title|escape }}。

          新建views.py:
          from?hello.models?import?*
          from?django.shortcuts?import?render_to_response

          def?book_list(request):
          ????title?
          =?'Book?List'
          ????books?
          =?Book.objects.all()
          ????
          return?render_to_response('books.html',?{'title'?:?title,?'books'?:?books})
          最終頁面上的內容,通過title和books兩個參數傳遞給tempate(books.html)處理。

          修改settings.py:
          TEMPLATE_DIRS?=?(
          ????
          '/opt/PROJECTS/Django/hello/templates/',
          )
          指定templates目錄位置,注意需要使用絕對路徑和'/',無論是Unix還是Windows系統。

          我們手工造一些數據之后,就可以通過http://localhost:8000/hello/books/訪問我們用Django實現的這個簡單頁面了。

          6- What's next

          通過上面的簡單介紹,相信哪怕是初次接觸Django的朋友,也能夠對Django有一個初步的認識。其實Django并不難學,并且隨著學習的深入,你一定能發現更多的驚喜,不論是來自Django本身,還是Python及其龐大的第三方類庫。

          如果有時間,建議嘗試一下Django的admin pages,即為我們的model提供自動化、網頁化的增刪改查操作。啟用方法如下:

          修改models.py (增加class Admin):
          from?datetime?import?datetime
          from?django.db?import?models

          class?Book(models.Model):
          ????isbn????????
          =?models.SlugField(maxlength=20)
          ????title???????
          =?models.CharField(maxlength=200)
          ????author??????
          =?models.CharField(maxlength=200)
          ????description?
          =?models.TextField(blank=True,null=True)
          ????published???
          =?models.DateTimeField(default=datetime.now)
          ????
          class?Admin:
          ????????
          pass

          修改settings.py和urls.py,加入admin支持:
          [settings.py]
          INSTALLED_APPS?=?(
          ????
          'django.contrib.auth',
          ????
          'django.contrib.contenttypes',
          ????
          'django.contrib.sessions',
          ????
          'django.contrib.sites',
          ????
          'django.contrib.admin',
          ????
          'hello',
          )
          [urls.py]
          urlpatterns?=?patterns('hello.views',
          ????(r
          '^hello/books/$',?'book_list'),
          ????(r
          '^hello/admin/',?include('django.contrib.admin.urls')),
          )

          Note:
          # 為了成功運行admin pages,需要首先執行python manage.py syncdb admin以創建django_admin_log表。
          # 如果前面跳過了創建管理員步驟,簡單的方法可以刪掉auth_user表,然后python manage.py syncdb重建。

          按照我們urls.py的配置,admin pages可以通過http://localhost:8000/hello/admin/訪問。Enjoy!


          主站蜘蛛池模板: 和田县| 海阳市| 始兴县| 武定县| 八宿县| 望谟县| 凌源市| 石景山区| 乌审旗| 荔浦县| 佛教| 张家口市| 白银市| 扶沟县| 潼南县| 靖边县| 云龙县| 麟游县| 永胜县| 吴忠市| 扎囊县| 凌云县| 金乡县| 金寨县| 闵行区| 肥乡县| 清原| 西充县| 上杭县| 扎赉特旗| 长岛县| 中西区| 吴堡县| 义马市| 彭阳县| 宜兴市| 尉氏县| 姚安县| 新晃| 汤原县| 红河县|