建立專案
django-admin.py startproject mysite
1. 目錄結構
mysite/ #專案的名稱
manage.py #可通過命令和專案進行互動的檔案
mysite/ #專案的實際資料夾
__init__.py #空檔案,告訴python這個目錄是個python包
settings.py #該專案的配置檔案
urls.py #專案的URL宣告,dispatch檔案
wsgi.py #專案wscgi的一個入口
2. 啟動開發機
只用於開發環境,不能用於生產環境!
開發環境支援熱啟動
python manage.py runserver #default 8000
#如果主機想訪問虛擬機器需要指定IP和埠
python manage.py runserver 0.0.0.0:8000
3. 資料庫
需求MySQLdb
pip2.7 install mysql-python -i http://pypi.douban.com/simple
settings.py檔案中進行設定
#mysql的資料庫必須提前建好
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
#修改時區
#TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
#預設apps
INSTALLED_APPS = (
'django.contrib.admin', #管理頁面
'django.contrib.auth', #許可權系統
'django.contrib.contenttypes', #內容框架
'django.contrib.sessions', #回話框架
'django.contrib.messages', #訊息框架
'django.contrib.staticfiles', #管理靜態內容框架
)
#此命令會安裝上述的app,並生成對應的表,在此建立系統管理員帳號和密碼
python manage.py syncdb
建立模型
app完成某個特定的功能,諸如微博系統,公共記錄資料庫亦或是一個簡單的投票程式。
project是若干配置檔案與許多app組成的特殊網站。
project可以包含很多app,app也可用於多個project。
python manage.py startapp polls
這會生成
polls/
__init__.py
admin.py
models.py
tests.py
views.py
首先應該定義模型。
模型是關於資料的獨立、限定的資源。它包括要儲存的資料的必要的欄位和行為。
Django遵循DRY原則,即Don't repeat youself——每一個獨立的概念或資料都儲存在一個地方,並且儲存一份。
定義所有的模型,關於投票,建立投票和選擇兩個模型,投票包括一個問題和一個發起日期,選擇包括選擇的內容和投票計數。每一個選擇應該關聯一個投票。
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)
每個模型對應一個類,每個類繼承自models.Model,每個類對應一張表。
每個類成員對應該表的列,並且有自己的型別。有些引數是必須的例如max_length,它不只是資料庫的模式,還包括頁面的驗證。而整數型別的預設值是可選的。
最後類之間的關係用外來鍵來描述。該處需要注意的是,poll會自動處理為poll_id加到
啟用模型
首先應該在settings.py中新增該應用。
INSTALL_APPS = (
...
...
'polls',
)
然後鍵入命令,觀察models生成的SQL語句。
python manage.py sql polls
這裡有一些額外的命令可以觀察實際的構成。
python manage.py validate #檢查錯誤,尤其是構建apps的model後檢查,再執行syncdb之前
python manage.py sqlcustom polls #輸出應用定義的custom sql statement
python manage.py sqlclear polls #輸出應用中有必要DROP TABLE的語句
python manage.py sqlindexes polls
python manage.py sqlall polls #輸出sql sqlcustom sqlindexes的集合
然後要實際執行這些語句,在資料庫中實際建立他們。該語句只用於初次建立時
python manage.py syncdb
呼叫API來工作
#進入互動介面
python manage.py shell
>>> from polls.models import Poll, Choice
#顯示所有例項
>>> Poll.objects.all()
[]
>>> from django.utils import timezone
#建立一個物件
>>> p = Poll(question="What's new?", pub_date=timezone.now())
#存入資料庫
>>> p.save()
#可使用p.question等修改,檢視類成員函式,修改後再次save即可
>>> Poll.objects.all()
[<Poll: Poll object>] #這是由於__unicode__沒有設定的結果,
class Poll(models.Model):
# ...
def __unicode__(self): # Python 3: def __str__(self):
return self.question
#這樣即可輸出
>>> Poll.objects.all()
[<Poll: What's new?>]
#查詢資料庫,filter(類成員名稱後雙下劃線,可以加入各種比較)
#get可直接用來查詢,其中pk可用來查詢主鍵,PrivateKey
>>> Poll.objects.filter(question__startswith='What')
[<Poll: What's up?>]
>>> current_year = timezone.now().year
>>> Poll.objects.get(pub_date__year=current_year)
<Poll: What's up?>
因為Poll是Choice的外來鍵,所以Poll有如下的成員函式
>>> p.choice_set.all()
[]
>>> c = p.choice_set.create(choice_text='Just hacking again', votes=0)
>>> p.choice_set.all()
[<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
>>> p.choice_set.count()
3
# Choice也有如下的成員變數
>>> c.poll
<Poll: What's up?>
#刪除某個記錄
>>> c = p.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()