1.簡述html
1.1 開發環境python
該筆記所基於的開發環境爲:windows八、python2.7.五、psycopg2-2.4.二、django1.5.四、pyCharm-2.7.3。以上所描述的軟件、插件安裝、破解等能夠參考以前的python筆記,提供了具體的資源連接和操做步驟。web
1.2 django學習筆記簡介sql
django學習基於官網提供的投票應用,是學習該應用編寫過程當中,遇到的問題、知識點、注意問題等的總結,同時包含大量學習過程當中的截圖,方便你們更直觀的學習。shell
它將包含兩部分:數據庫
一個公共網站,可以讓人們查看投票的結果和讓他們進行投票。django
一個管理網站,可以讓你添加、修改和刪除投票項目。windows
官網文檔連接爲http://django-chinese-docs.readthedocs.org/en/latest/後端
1.3 關於筆記瀏覽器
一樣做爲初學者,寫這篇文章時,剛剛看到教程的第4部分,筆記中有不足之處,還但願你們指正,真心與你們共同討論學習!
------------------------------------------------
博主經營一家髮飾淘寶店,都是純手工製做哦,開業衝鑽,只爲信譽!須要的親們能夠光顧一下!謝謝你們的支持!
店名:
小魚尼莫手工飾品店
經營:
髮飾、頭花、髮夾、耳環等(手工製做)
網店:
http://shop117066935.taobao.com/
---------------------------------------------------------------------
繼續正題...
2.搭建項目的運行環境
import django; print(django.get_version())
django-admin.py startproject mysite
python manage.py syncdb
2.9.在pgadmin中查看建立好的tables
python manage.py startapp polls
from django.db import models class Poll(models.Model): question = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Choice(models.Model): poll = models.ForeignKey(Poll) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: 'polls',)
3.5 根據 model 的定義,使用命令語句獲取建立table所需的sql
python manage.py sql polls BEGIN;CREATE TABLE "polls_poll" ( "id" serial NOT NULL PRIMARY KEY, "question" varchar(200) NOT NULL, "pub_date" timestamp with time zone NOT NULL);CREATE TABLE "polls_choice" ( "id" serial NOT NULL PRIMARY KEY, "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id") DEFERRABLE INITIALLY DEFERRED, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL);COMMIT;
3.6 再次運行 syncdb 命令,將會自動在你的數據庫中建立這些模型對應的表
python manage.py syncdb
3.7 能夠看到database中新建立了兩個表
>>> from polls.models import Poll, Choice # Import the model classes we just wrote. # 系統中尚未 polls 。 >>> Poll.objects.all() [] # 建立一個新 Poll 。 # 在默認配置文件中時區支持配置是啓用的,所以 Django 但願爲 pub_date 字段獲取一個 datetime with tzinfo 。使用了 timezone.now(),而不是 datetime.datetime.now() 以便獲取正確的值。 >>> from django.utils import timezone >>> p = Poll(question="What's new?", pub_date=timezone.now()) # 保存對象到數據庫中。你必須顯示調用 save() 方法。 >>> p.save() # 如今對象擁有了一個ID 。請注意這可能會顯示 "1L" 而不是 "1",取決於你正在使用的數據庫。 這沒什麼大不了的,它只是意味着你的數據庫後端喜歡返回的整型數做爲 Python 的長整型對象而已。 >>> p.id 1# 經過 Python 屬性訪問數據庫中的列。 >>> p.question "What's new?" >>> p.pub_date datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>) # 經過改成屬性值來改變值,而後調用 save() 方法。 >>> p.question = "What's up?" >>> p.save() # objects.all() 用以顯示數據庫中全部的 polls 。 >>> Poll.objects.all()[<Poll: Poll object>]
3.9 處理Poll object問題
class Poll(models.Model): # ... def __unicode__(self): return self.question class Choice(models.Model): # ... def __unicode__(self): return self.choice_text
ps:新shell演示,能夠看到結果
import datetime from django.utils import timezone # ... class Poll(models.Model): # ... def was_published_recently(self): return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
3.11 保存上訪修改後,在新的shell中對table操做
python manage.py shell
>>> from polls.models import Poll, Choice # 確認咱們附加的 __unicode__() 正常運行。 >>> Poll.objects.all() [<Poll: What's up?>] # Django 提供了一個豐富的數據庫查詢 API ,徹底由關鍵字參數來驅動。 >>> Poll.objects.filter(id=1) [<Poll: What's up?>] >>> Poll.objects.filter(question__startswith='What') [<Poll: What's up?>] # 獲取今年發起的投票。 >>> from django.utils import timezone >>> current_year=timezone.now().year >>> Poll.objects.get(pub_date__year=current_year) <Poll: What's up?> # 請求一個不存在的 ID ,這將引起一個異常。 >>> Poll.objects.get(id=2) Traceback (most recent call last): ...DoesNotExist: Poll matching query does not exist. Lookup parameters were {'id': 2} # 根據主鍵查詢是常見的狀況,所以 Django 提供了一個主鍵精確查找的快捷方式。 # 如下代碼等同於 Poll.objects.get(id=1). >>> Poll.objects.get(pk=1) <Poll: What's up?> # 確認咱們自定義方法正常運行。 >>> p = Poll.objects.get(pk=1) >>> p.was_published_recently() True # 給 Poll 設置一些 Choices 。經過 create 方法調用構造方法去建立一個新Choice 對象實例,執行 INSERT 語句後添加該 choice 到可用的 choices 集中並返回這個新建的 Choice 對象實例。 Django 建立了一個保存外鍵關聯關係的集合 ( 例如 poll 的 choices) 以即可以經過 API去訪問。 >>> p = Poll.objects.get(pk=1) # 從關聯對象集中顯示全部 choices -- 到目前爲止尚未。 >>> p.choice_set.all()[] # 建立三個 choices 。 >>> p.choice_set.create(choice_text='Not much', votes=0) <Choice: Not much> >>> p.choice_set.create(choice_text='The sky', votes=0) <Choice: The sky> >>> c = p.choice_set.create(choice_text='Just hacking again', votes=0) # Choice 對象擁有訪問它們關聯的 Poll 對象的 API 。 >>> c.poll <Poll: What's up?> # 反之亦然: Poll 對象也可訪問 Choice 對象。 >>> p.choice_set.all() [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>] >>> p.choice_set.count() 3 # 只要你須要 API 會自動連續關聯。使用雙下劃線來隔離關聯。只要你想要幾層關聯就能夠有幾層關聯,沒有限制。 # 尋找和今年發起的任何 poll 有關的全部 Choices( 重用咱們在上面創建的 'current_year' 變量 )。 >>> Choice.objects.filter(poll__pub_date__year=current_year) [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>] # 讓咱們使用 delete() 刪除 choices 中的一個。 >>> c = p.choice_set.filter(choice_text__startswith='Just hacking') >>> c.delete()
結果(ps:delete 後 The haking行刪除)