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) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Programming in GeneralThe Other SideOther Languages

          算到現(xiàn)在,已經(jīng)有將近半年沒(méi)有寫(xiě)過(guò)技術(shù)文章了,手癢癢,于是拿Django來(lái)說(shuō)事,希望最終的產(chǎn)出能夠做成一個(gè)簡(jiǎn)短易懂的Django快速起步,讓初次接觸Django的朋友能夠在最短的時(shí)間內(nèi)了解Django的基本概念和結(jié)構(gòu)。

          Django是使用Python實(shí)現(xiàn)的一個(gè)基于MVC的web應(yīng)用框架,類(lèi)似Ruby世界的Ruby on Rails。如果你是通過(guò)Google搜到這篇文章,那么說(shuō)明你已經(jīng)對(duì)Django有所耳聞,并且愿意了解更多Django相關(guān)的信息。我在這里就不多廢 話Ruby vs Python或者Rails vs Django,直奔主題。

          在寫(xiě)這篇文章時(shí),最新的CPython版本為2.5.1,Django版本為0.96,如無(wú)特別說(shuō)明,本文所有介紹和示例均以此環(huán)境為準(zhǔn)。

          0- 在開(kāi)始之前,首先當(dāng)然是安裝一個(gè)基本能用的開(kāi)發(fā)環(huán)境。

          如果你的操作系統(tǒng)是Linux或者其他類(lèi)Unix系統(tǒng),很可能已經(jīng)預(yù)裝了Python,可以在命令行執(zhí)行python -V查看Python版本。如果你是Windows操作系統(tǒng),或者想嘗試不同版本的Python,那么可以到http://www.python.org/下載相應(yīng)的安裝包進(jìn)行安裝。

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

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

          我們還缺少一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng),在http://www.initd.org/pub/software/psycopg/可以找到用于連接PostgreSQL的psycopg2,安裝方法類(lèi)似Django。

          1- django-admin.py startproject

          所有環(huán)境OK以后,我們開(kāi)始動(dòng)手把玩Django,首先找一個(gè)干凈的目錄,執(zhí)行
          $ python django-admin.py startproject hello

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

          2- manage.py runserver

          至此我們已經(jīng)搭起了一個(gè)基本的Django項(xiàng)目框架,執(zhí)行
          $ python manage.py runserver
          命令行會(huì)提示在8000端口運(yùn)行一個(gè)開(kāi)發(fā)用的web server,轉(zhuǎn)到瀏覽器的http://localhost:8000/即可看到It worked!的提示信息。你也可以指定端口號(hào),方法是python manage.py runserver XXXX。

          3- settings.py

          接下來(lái)我們做一個(gè)完整的從model/數(shù)據(jù)庫(kù)到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類(lèi)Book,同時(shí)還用到了models中現(xiàn)成的字段類(lèi),如 SlugField、CharField、TextField、DateTimeField等。大家比較陌生的恐怕是SlugField,這個(gè)基本上類(lèi)似 CharField,不過(guò)增加了其內(nèi)容需要符合URL要求的限制條件。

          執(zhí)行下面的命令測(cè)試數(shù)據(jù)庫(kù)腳本的生成:
          $ python manage.py sql hello
          應(yīng)該看到如下輸出結(jié)果:
          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;

          確認(rèn)無(wú)誤后可以通過(guò)下面的命令提交到數(shù)據(jù)庫(kù):
          $ python manage.py syncdb
          其間會(huì)要求我們創(chuàng)建一個(gè)管理員賬號(hào),如果暫時(shí)不打算做admin頁(yè)面,可以跳過(guò)。

          5- views.py

          model有了之后,接下來(lái)我們就可以開(kāi)始畫(huà)視圖了。由于篇幅和時(shí)間有限,我僅簡(jiǎn)單介紹一下Django的template,然后實(shí)現(xiàn)一個(gè)最基本的圖書(shū)清單頁(yè)面。

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

          urlpatterns?
          =?patterns('hello.views',
          ????(r
          '^hello/books/$',?'book_list'),
          )
          含義為hello/books/這個(gè)URI資源對(duì)應(yīng)的相應(yīng)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>書(shū)名</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模板的語(yǔ)法是{{}}表示引用,{%%}表示代碼,使用起來(lái)也很直觀,甚至支持UNIX風(fēng)格的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})
          最終頁(yè)面上的內(nèi)容,通過(guò)title和books兩個(gè)參數(shù)傳遞給tempate(books.html)處理。

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

          我們手工造一些數(shù)據(jù)之后,就可以通過(guò)http://localhost:8000/hello/books/訪問(wèn)我們用Django實(shí)現(xiàn)的這個(gè)簡(jiǎn)單頁(yè)面了。

          6- What's next

          通過(guò)上面的簡(jiǎn)單介紹,相信哪怕是初次接觸Django的朋友,也能夠?qū)jango有一個(gè)初步的認(rèn)識(shí)。其實(shí)Django并不難學(xué),并且隨著學(xué)習(xí)的深入,你一定能發(fā)現(xiàn)更多的驚喜,不論是來(lái)自Django本身,還是Python及其龐大的第三方類(lèi)庫(kù)。

          如果有時(shí)間,建議嘗試一下Django的admin pages,即為我們的model提供自動(dòng)化、網(wǎng)頁(yè)化的增刪改查操作。啟用方法如下:

          修改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:
          # 為了成功運(yùn)行admin pages,需要首先執(zhí)行python manage.py syncdb admin以創(chuàng)建django_admin_log表。
          # 如果前面跳過(guò)了創(chuàng)建管理員步驟,簡(jiǎn)單的方法可以刪掉auth_user表,然后python manage.py syncdb重建。

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


          主站蜘蛛池模板: 二手房| 香格里拉县| 来安县| 松滋市| 德清县| 正宁县| 荥阳市| 连城县| 嘉祥县| 乌苏市| 闵行区| 定陶县| 昌乐县| 阳山县| 邵武市| 博爱县| 安庆市| 武穴市| 吴川市| 凭祥市| 唐河县| 阿拉善盟| 甘孜县| 阳江市| 洪泽县| 奎屯市| 南漳县| 牙克石市| 湾仔区| 龙山县| 英吉沙县| 安阳县| 平谷区| 会昌县| 个旧市| 历史| 沈丘县| 社旗县| 松潘县| 同德县| 和顺县|