MTV模型
Django的MTV分別代表:
- Model(模型):負(fù)責(zé)業(yè)務(wù)對(duì)象與數(shù)據(jù)庫(kù)的對(duì)象(ORM)
- Template(模版):負(fù)責(zé)如何把頁(yè)面展示給用戶
- View(視圖):負(fù)責(zé)業(yè)務(wù)邏輯,并在適當(dāng)?shù)臅r(shí)候調(diào)用Model和Template
此外竭业,Django還有一個(gè)urls分發(fā)器牡肉,它的作用是將一個(gè)個(gè)URL的頁(yè)面請(qǐng)求分發(fā)給不同的view處理仰税,view再調(diào)用相應(yīng)的Model和Template预鬓。
django基本命令
下載Django:
pip install django
創(chuàng)建一個(gè)django項(xiàng)目:
django-admin.py startproject 項(xiàng)目名
創(chuàng)建應(yīng)用:
python manage.py startapp 應(yīng)用名
啟動(dòng)項(xiàng)目:
python manage.py runserver 8080
同步更改數(shù)據(jù)庫(kù)表或字段
python manage.py syncdb
注意:Django 1.7.1 及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate
清空數(shù)據(jù)庫(kù)
python manage.py flush
創(chuàng)建超級(jí)管理員
python manage.py createsuperuser
# 按照提示輸入用戶名和對(duì)應(yīng)的密碼就好了郵箱可以留空昂勒,用戶名和密碼必填
修改 用戶密碼可以用:
python manage.py changepassword username
Django 項(xiàng)目環(huán)境終端
python manage.py dbshell
Django 會(huì)自動(dòng)進(jìn)入在settings.py中設(shè)置的數(shù)據(jù)庫(kù)勇哗,如果是 MySQL 或 postgreSQL,會(huì)要求輸入數(shù)據(jù)庫(kù)用戶密碼杠茬。
在這個(gè)終端可以執(zhí)行數(shù)據(jù)庫(kù)的SQL語(yǔ)句琳拨。如果您對(duì)SQL比較熟悉瞭恰,可能喜歡這種方式。
更多命令
python manage.py
查看所有的命令狱庇,忘記子名稱的時(shí)候特別有用惊畏。
靜態(tài)文件配置
概述:
靜態(tài)文件交由Web服務(wù)器處理恶耽,Django本身不處理靜態(tài)文件。簡(jiǎn)單的處理邏輯如下(以nginx為例):
URI請(qǐng)求-----> 按照Web服務(wù)器里面的配置規(guī)則先處理颜启,以nginx為例偷俭,主要求配置在nginx.
conf里的location
|---------->如果是靜態(tài)文件,則由nginx直接處理
|---------->如果不是則交由Django處理缰盏,Django根據(jù)urls.py里面的規(guī)則進(jìn)行匹配
以上是部署到Web服務(wù)器后的處理方式涌萤,為了便于開(kāi)發(fā),Django提供了在開(kāi)發(fā)環(huán)境的對(duì)靜態(tài)文件的處理機(jī)制口猜,方法是這樣:
static配置:
STATIC主要指的是如css,js,images這樣文件:
STATIC_URL = '/static/' # 別名
STATICFILES_DIRS = (
os.path.join(BASE_DIR,"static"), #實(shí)際名 ,即實(shí)際文件夾的名字
)
'''
注意點(diǎn)1:
django對(duì)引用名和實(shí)際名進(jìn)行映射,引用時(shí),只能按照引用名來(lái),不能按實(shí)際名去找
<script src="/statics/jquery-3.1.1.js"></script>
------error-----不能直接用负溪,必須用STATIC_URL = '/static/':
<script src="/static/jquery-3.1.1.js"></script>
注意點(diǎn)2:
STATICFILES_DIRS = (
("app01",os.path.join(BASE_DIR, "app01/statics")),
)
<script src="/static/app01/jquery.js"></script>
'''
media配置:
# in settings:
MEDIA_URL="/media/"
MEDIA_ROOT=os.path.join(BASE_DIR,"app01","media","upload")
# in urls:
from django.views.static import serve
url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
'''
靜態(tài)文件的處理又包括STATIC和MEDIA兩類,這往往容易混淆济炎,在Django里面是這樣定義的:
MEDIA:指用戶上傳的文件川抡,比如在Model里面的FileFIeld,ImageField上傳的文件须尚。如果你定義
MEDIA_ROOT=c:\temp\media崖堤,那么File=models.FileField(upload_to="abc/")#,上傳的文件就會(huì)被保存到c:\temp\media\abc
eg:
class blog(models.Model):
Title=models.charField(max_length=64)
Photo=models.ImageField(upload_to="photo")
上傳的圖片就上傳到c:\temp\media\photo耐床,而在模板中要顯示該文件密幔,則在這樣寫
在settings里面設(shè)置的MEDIA_ROOT必須是本地路徑的絕對(duì)路徑,一般是這樣寫:
BASE_DIR= os.path.abspath(os.path.dirname(__file__))
MEDIA_ROOT=os.path.join(BASE_DIR,'media/').replace('\\','/')
MEDIA_URL是指從瀏覽器訪問(wèn)時(shí)的地址前綴撩轰,舉個(gè)例子:
MEDIA_ROOT=c:\temp\media\photo
MEDIA_URL="/data/"
在開(kāi)發(fā)階段,media的處理由django處理:
訪問(wèn)http://localhost/data/abc/a.png就是訪問(wèn)c:\temp\media\photo\abc\a.png
在模板里面這樣寫![](/media/abc/a.png)
在部署階段最大的不同在于你必須讓web服務(wù)器來(lái)處理media文件老玛,因此你必須在web服務(wù)器中配置,
以便能讓web服務(wù)器能訪問(wèn)media文件
以nginx為例钧敞,可以在nginx.conf里面這樣:
location ~/media/{
root/temp/
break;
}
具體可以參考如何在nginx部署django的資料蜡豹。
'''