天天看點

總結一下這幾天學習django的心得總結一下這幾天學習django的心得

總結一下這幾天學習django的心得

http://www.tuicool.com/articles/jMVB3e

時間 2014-01-12 11:40:11  

CSDN部落格

原文  

http://blog.csdn.net/jackrex/article/details/18180279

主題 

Django  資料庫

Python 是個門十分簡潔 好用的程式設計語言,我之前熟悉的是Java 但是用了Python之後 ,發現python的文法還有結構十厘清晰,比如強制的縮進,空行,給人的感覺是,寫出來的代碼很整潔,非常幹淨漂亮。外加上Python 的各種架構十分之多,從webpy ,jdango  .使用python 開發十分快捷。鑒于 性能上,jdango 還是比較重的。可以支撐的比其他的架構要好的很多。另外,python 的開源的庫十分居多,我們可以使用 python 的pip  sudo pip install XXX 來友善安裝,汗,我之前還一直用的是 python setup.py install .都是一個一個下載下傳下來;哎。。。。。

說道python  。如果有對python 文法不熟悉的同學,直接在網上看 python基礎教程 或者其他,有的同學喜歡買書,我也買了幾本,但是一直都沒有看,東西都是從網上學來的,雖說有點雜,但是經常總結總結應該說還是不錯的。

好了,直接開始一點Django 的學習吧。 首先推薦的是 pythontip.com 這裡面有Django 和python 學習教程,這些東西自學完成 後 估計python 和jdango 都入了門了,然後在

進階進階的。那就是後話了。

PS 我用的是mac 下得PyCharm 開發python 爽歪歪

 1. 如何建立 Django  工程

 一個工程裡面包裹好多Apps

首先你進入一個檔案夾中 (你已經安裝了jdango 你可以用setup.py 也可以用我前面說的pip) 然後執行 django-admin.py startproject mysite 這樣會在目錄下建立一個 mysite

的檔案夾,這時候包含了4個檔案。

__init__.py
    manage.py
    settings.py
    urls.py      

檔案如下:

  • __init__.py  :讓 Python 把該目錄當成一個開發包 (即一組子產品)所需的檔案。 這是一個空檔案,一般你不需要修改它。
  • manage.py  :一種指令行工具,允許你以多種方式與該 Django 項目進行互動。 鍵入 python   manage.py   help ,看一下它能做什麼。 你應當不需要編輯這個檔案;在這個目錄下生成它純是為了友善。

    5

  • settings.py  :該 Django 項目的設定或配置。 檢視并了解這個檔案中可用的設定類型及其預設值。
  • urls.py :Django項目的URL設定。 可視其為你的django網站的目錄。 目前,它是空的。

盡管這些的檔案很小,但這些檔案已經構成了一個可運作的Django應用。

 2 然後進行 python manage.py runserver 

Validating models...
0 errors found.

Django version 1.0, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.      

這将會在端口8000啟動一個本地伺服器, 并且隻能從你的這台電腦連接配接和通路。 既然伺服器已經運作起來了,現在用網頁浏覽器通路  

http://127.0.0.1:8000/

  。 你應該可以看到一個令人賞心悅目的淡藍色Django歡迎頁面。 它開始工作了。

更改 端接口

更改這個 Development Server 的主機位址或端口

預設情況下,  runserver  指令在 8000 端口啟動開發伺服器,且僅監聽本地連接配接。 要想要更改伺服器端口的話,可将端口作為指令行參數傳入:

python manage.py runserver 8080      

通過指定一個 IP 位址,你可以告訴伺服器–允許非本地連接配接通路。 如果你想和其他開發人員共享同一開發站點的話,該功能特别有用。 `` 0.0.0.0`` 這個 IP 位址,告訴伺服器去偵聽任意的網絡接口。

4

python manage.py runserver 0.0.0.0:8000      

完成這些設定後,你本地網絡中的其它計算機就可以在浏覽器中通路你的 IP 位址了。比如: 

http://192.168.1.103:8000/

  . (注意,你将需要校閱一下你的網絡配置來決定你在本地網絡中的IP 位址) Unix使用者可以在指令提示符中輸入ifconfig來擷取以上資訊。 使用Windows的使用者,請嘗試使用 ipconfig 指令。

3 接下來,你可以去使用 5中資料庫,可能常用的 有mysql 和sqlite 、

設定資料庫所需擴充卡`` postgresql``PostgreSQL psycopg  1.x版, 

http://www.djangoproject.com/r/python-pgsql/1/

 。

postgresql_psycopg2 PostgreSQL psycopg  2.x版, 

http://www.djangoproject.com/r/python-pgsql/

mysql MySQL MySQLdb  ,  

http://www.djangoproject.com/r/python-mysql/

 .

sqlite3 SQLite如果使用Python 2.5+則不需要擴充卡。

 否則就使用  pysqlite  , 

http://www.djangoproject.com/r/python-sqlite/

oracle Oracle cx_Oracle  ,  

http://www.djangoproject.com/r/python-oracle/

13

 4 開始一個新的Apps

在`` mysite`` 項目檔案下輸入下面的指令來建立`` books`` app:

python manage.py startapp books      

這個指令并沒有輸出什麼,它隻在  mysite  的目錄裡建立了一個  books  目錄。 讓我們來看看這個目錄的内容:

books/
    __init__.py
    models.py
    tests.py
    views.py      

這個目錄包含了這個app的模型和視圖。

 5 建立資料庫 和models

第一步是用Python代碼來描述它們。 打開由`` startapp`` 指令建立的 models.py  并輸入下面的内容:

1

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()      

讓我們來快速講解一下這些代碼的含義。 首先要注意的事是每個資料模型都是 django.db.models.Model  的子類。它的父類 Model 包含了所有必要的和資料庫互動的方法,并提供了一個簡潔漂亮的定義資料庫字段的文法。 信不信由你,這些就是我們需要編寫的通過Django存取基本資料的所有代碼。

12

每個模型相當于單個資料庫表,每個屬性也是這個表中的一個字段。 屬性名就是字段名,它的類型(例如 CharField  )相當于資料庫的字段類型 (例如  varchar  )。例如,  Publisher  子產品等同于下面這張表(用PostgreSQL的  CREATE   TABLE  文法描述):

CREATE TABLE "books_publisher" (
    "id" serial NOT NULL PRIMARY KEY,
    "name" varchar(30) NOT NULL,
    "address" varchar(50) NOT NULL,
    "city" varchar(60) NOT NULL,
    "state_province" varchar(30) NOT NULL,
    "country" varchar(50) NOT NULL,
    "website" varchar(200) NOT NULL
);      

事實上,正如過一會兒我們所要展示的,Django 可以自動生成這些  CREATE   TABLE  語句。

“每個資料庫表對應一個類”這條規則的例外情況是多對多關系。 在我們的範例模型中,  Book  有一個  多對多字段 叫做  authors  。 該字段表明一本書籍有一個或多個作者,但  Book  資料庫表卻并沒有  authors  字段。 相反,Django建立了一個額外的表(多對多連接配接表)來處理書籍和作者之間的映射關系。

8

請檢視附錄 B 了解所有的字段類型和模型文法選項。

6

最後需要注意的是,我們并沒有顯式地為這些模型定義任何主鍵。 除非你單獨指明,否則Django會自動為每個模型生成一個自增長的整數主鍵字段每個Django模型都要求有單獨的主鍵。 id

2

模型安裝

完成這些代碼之後,現在讓我們來在資料庫中建立這些表。 要完成該項工作,第一步是在 Django 項目中  激活  這些模型。 将  books  app 添加到配置檔案的已安裝應用清單中即可完成此步驟。

再次編輯  settings.py  檔案, 找到  INSTALLED_APPS  設定。  INSTALLED_APPS  告訴 Django 項目哪些 app 處于激活狀态。 預設情況下如下所示:

3

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
)      

把這四個設定前面加#臨時注釋起來。 (這四個app是經常使用到的,我們将在後續章節裡讨論如何使用它們)。同時,注釋掉MIDDLEWARE_CLASSES的預設設定條目,因為這些條目是依賴于剛才我們剛在INSTALLED_APPS注釋掉的apps。 然後,添加`` ‘mysite.books’`` 到`` INSTALLED_APPS`` 的末尾,此時設定的内容看起來應該是這樣的:

MIDDLEWARE_CLASSES = (
    # 'django.middleware.common.CommonMiddleware',
    # 'django.contrib.sessions.middleware.SessionMiddleware',
    # 'django.contrib.auth.middleware.AuthenticationMiddleware',
)

INSTALLED_APPS = (
    # 'django.contrib.auth',
    # 'django.contrib.contenttypes',
    # 'django.contrib.sessions',
    # 'django.contrib.sites',
    'mysite.books',
)      

(就像我們在上一章設定TEMPLATE_DIRS所提到的逗号,同樣在INSTALLED_APPS的末尾也需添加一個逗号,因為這是個單元素的元組。 另外,本書的作者喜歡在  每一個  tuple元素後面加一個逗号,不管它是不是 隻有一個元素。 這是為了避免忘了加逗号,而且也沒什麼壞處。)

'mysite.books' 訓示我們正在編寫的 books  app。  INSTALLED_APPS  中的每個app都使用 Python的路徑描述,包的路徑,用小數點“.”間隔。

現在我們可以建立資料庫表了。 首先,用下面的指令驗證模型的有效性:

python manage.py validate      

validate  指令檢查你的模型的文法和邏輯是否正确。 如果一切正常,你會看到  0   errors   found  消息。如果出錯,請檢查你輸入的模型代碼。 錯誤輸出會給出非常有用的錯誤資訊來幫助你修正你的模型。

一旦你覺得你的模型可能有問題,運作  python   manage.py   validate  。 它可以幫助你捕獲一些常見的模型定義錯誤。

模型确認沒問題了,運作下面的指令來生成  CREATE   TABLE  語句(如果你使用的是Unix,那麼可以啟用文法高亮):

python manage.py sqlall books      

在這個指令行中,  books  是app的名稱。 和你運作  manage.py   startapp  中的一樣。執行之後,輸出如下:

BEGIN;
CREATE TABLE "books_publisher" (
    "id" serial NOT NULL PRIMARY KEY,
    "name" varchar(30) NOT NULL,
    "address" varchar(50) NOT NULL,
    "city" varchar(60) NOT NULL,
    "state_province" varchar(30) NOT NULL,
    "country" varchar(50) NOT NULL,
    "website" varchar(200) NOT NULL
)
;
CREATE TABLE "books_author" (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(40) NOT NULL,
    "email" varchar(75) NOT NULL
)
;
CREATE TABLE "books_book" (
    "id" serial NOT NULL PRIMARY KEY,
    "title" varchar(100) NOT NULL,
    "publisher_id" integer NOT NULL REFERENCES "books_publisher" ("id") DEFERRABLE INITIALLY DEFERRED,
    "publication_date" date NOT NULL
)
;
CREATE TABLE "books_book_authors" (
    "id" serial NOT NULL PRIMARY KEY,
    "book_id" integer NOT NULL REFERENCES "books_book" ("id") DEFERRABLE INITIALLY DEFERRED,
    "author_id" integer NOT NULL REFERENCES "books_author" ("id") DEFERRABLE INITIALLY DEFERRED,
    UNIQUE ("book_id", "author_id")
)
;
CREATE INDEX "books_book_publisher_id" ON "books_book" ("publisher_id");
COMMIT;      

注意:

  • 自動生成的表名是app名稱(  books  )和模型的小寫名稱 (  publisher  ,  book ,  author  )的組合。你可以參考附錄B重寫這個規則。
  • 我們前面已經提到,Django為每個表格自動添加加了一個  id  主鍵, 你可以重新設定它。
  • 按約定,Django添加  "_id"  字尾到外鍵字段名。 你猜對了,這個同樣是可以自定義的。
  • 外鍵是用  REFERENCES  語句明确定義的。
  • 這些  CREATE   TABLE  語句會根據你的資料庫而作調整,這樣象資料庫特定的一些字段例如:(MySQL), auto_increment (PostgreSQL), serial(SQLite),都會自動生成。 integer   primary   key  同樣的,字段名稱也是自動處理(例如單引号還好是雙引号)。 例子中的輸出是基于PostgreSQL文法的。

sqlall  指令并沒有在資料庫中真正建立資料表,隻是把SQL語句段列印出來,這樣你可以看到Django究竟會做些什麼。 如果你想這麼做的話,你可以把那些SQL語句複制到你的資料庫用戶端執行,或者通過Unix管道直接進行操作(例如,`` python manager.py sqlall books | psql mydb`` )。不過,Django提供了一種更為簡易的送出SQL語句至資料庫的方法: `` syncdb`` 指令

python manage.py syncdb      

執行這個指令後,将看到類似以下的内容:

Creating table books_publisher
Creating table books_author
Creating table books_book
Installing index for books.Book model      

syncdb  指令是同步你的模型到資料庫的一個簡單方法。 它會根據  INSTALLED_APPS  裡設定的app來檢查資料庫, 如果表不存在,它就會建立它。 需要注意的是,  syncdb  并  不能 将模型的修改或删除同步到資料庫;如果你修改或删除了一個模型,并想把它送出到資料庫, syncdb 并不會做出任何處理。 (更多内容請檢視本章最後的“修改資料庫的架構”一段。)

如果你再次運作  python   manage.py   syncdb  ,什麼也沒發生,因為你沒有添加新的模型或者 添加新的app。是以,運作 python   manage.py   syncdb 總是安全的,因為它不會重複執行SQL語句。

如果你有興趣,花點時間用你的SQL用戶端登入進資料庫伺服器看看剛才Django建立的資料表。 你可以手動啟動指令行用戶端(例如,執行PostgreSQL的`` psql`` 指令),也可以執行 `` python manage.py dbshell`` ,這個指令将依據`` DATABASE_SERVER`` 的裡設定自動檢測使用哪種指令行用戶端。 常言說,後來者居上。

6  你應該學會使用Context 和模闆(待續)

說明: 本文好多參考 pythontip.com 的Django教程。 在此謝過.