<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(762) 評論(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!


    主站蜘蛛池模板: 无人在线观看免费高清视频 | 一级做a爰全过程免费视频| 亚洲AV无码一区东京热| 最刺激黄a大片免费网站| 亚洲一区二区三区高清在线观看 | 中文字幕影片免费在线观看| 亚洲Av高清一区二区三区| 中文字幕无码亚洲欧洲日韩| 日韩毛片免费在线观看| a一级爱做片免费| 色噜噜综合亚洲av中文无码| 色妞WWW精品免费视频| 五月天婷婷免费视频| 亚洲精品视频免费看| 国产gav成人免费播放视频| 久久国产乱子伦精品免费强| 亚洲综合av一区二区三区| 亚洲性猛交XXXX| 成年轻人网站色免费看| 中文字幕版免费电影网站| 日韩亚洲不卡在线视频中文字幕在线观看 | 无码av免费一区二区三区| 亚洲中文字幕无码mv| 亚洲国产精品VA在线看黑人| 日本免费v片一二三区| 69视频免费观看l| 国产无限免费观看黄网站| 亚洲精品成a人在线观看夫| 亚洲成AV人片天堂网无码| 美女黄频视频大全免费的| 亚洲国产成人久久精品动漫| 日本一道在线日本一道高清不卡免费| 爽爽爽爽爽爽爽成人免费观看| 亚洲av无码专区在线| 国产亚洲人成网站观看| 精品久久免费视频| 88av免费观看入口在线| 久久久精品视频免费观看| 亚洲精品国产suv一区88| 亚洲国产成人精品青青草原| 亚洲国产精品福利片在线观看|