參考博客:https://www.cnblogs.com/yuanchenqi/articles/7629939.htmlcss
Web服務器開發領域裏著名的MVC模式。html
所謂MVC就是把Web應用分爲模型(M),控制器(C)和視圖(V)三層,他們之間以一種插件式的、鬆耦合的方式鏈接在一塊兒。python
模型負責業務對象與數據庫的映射(ORM),視圖負責與用戶的交互(頁面),控制器接受用戶的輸入調用模型和視圖完成用戶的請求,其示意圖以下所示:jquery
Django的MTV分別表明:nginx
Model(模型):負責業務對象與數據庫的對象(ORM)web
Template(模版):負責如何把頁面展現給用戶shell
View(視圖):負責業務邏輯,並在適當的時候調用Model和Template數據庫
此外,Django還有一個urls分發器,它的做用是將一個個URL的頁面請求分發給不一樣的view處理,view再調用相應的Model和Template。Django WEB框架示意圖以下所示:django
通常是用戶經過瀏覽器向咱們的服務器發起一個請求(request),這個請求回去訪問視圖函數,(若是不涉及到數據調用,那麼這個時候視圖函數返回一個模板也就是一個網頁給用戶),視圖函數調用模型,模型去數據庫查找數據,而後逐級返回,視圖函數把返回的數據填充到模板中空格中,最後返回網頁給用戶。瀏覽器
pip3 install django
django-admin.py startproject mysite
在命令執行的當前目錄會生成mysite的工程,目錄結構以下所示:
文件介紹:
python manage.py startapp blog
python manage.py runserver 8080
這樣咱們的django就啓動起來了!當咱們訪問:http://127.0.0.1:8080/時就能夠看到:
''' python manage.py syncdb 注意:Django 1.7.1 及以上的版本須要用如下命令 python manage.py makemigrations python manage.py migrate '''
這種方法能夠建立表,當你在models.py中新增了類時,運行它就能夠自動在數據庫中建立表了,不用手動建立。
python manage.py flush
此命令會詢問是 yes 仍是 no, 選擇 yes 會把數據所有清空掉,只留下空表。
''' python manage.py createsuperuser # 按照提示輸入用戶名和對應的密碼就行了郵箱能夠留空,用戶名和密碼必填 # 修改 用戶密碼能夠用: python manage.py changepassword username '''
python manage.py shell
這個命令和 直接運行 python 進入 shell 的區別是:你能夠在這個 shell 裏面調用當前項目的 models.py 中的 API,對於操做數據的測試很是方便。
python manage.py dbshell
Django 會自動進入在settings.py中設置的數據庫,若是是 MySQL 或 postgreSQL,會要求輸入數據庫用戶密碼。
在這個終端能夠執行數據庫的SQL語句。若是對SQL比較熟悉,可能喜歡這種方式。
python manage.py
查看全部的命令,在忘記子名稱的時候很是有用。
靜態文件交由web服務器處理,Django自己不處理靜態文件。簡單的處理邏輯以下:
URI請求-----> 按照Web服務器裏面的配置規則先處理,以nginx爲例,主要求配置在nginx. conf裏的location |---------->若是是靜態文件,則由nginx直接處理 |---------->若是不是則交由Django處理,Django根據urls.py裏面的規則進行匹配
以上是部署到web服務器後的處理方式,爲了便於開發,Django提供了在開發環境的對靜態文件的處理機制。
static主要指的是如css,js,images這樣的文件:
STATIC_URL = '/static/' # 別名 STATICFILES_DIRS = ( os.path.join(BASE_DIR,"static"), # 實際名 ,即實際文件夾的名字 )
注意點1:django對引用名和實際名進行映射,引用時,只能按照引用名來,不能按實際名去找
<script src="/statics/jquery-3.1.1.js"></script> ------error-----不能直接用,必須用STATIC_URL = '/static/': <script src="/static/jquery-3.1.1.js"></script>
注意點2:
STATICFILES_DIRS = ( ("app01",os.path.join(BASE_DIR, "app01/statics")), ) <script src="/static/app01/jquery.js"></script>
訪問地址:
http://127.0.0.1:8000/static/jquery.js
settings.py:
MEDIA_URL="/media/" MEDIA_ROOT=os.path.join(BASE_DIR,"app01","media","upload")
urls.py:
from django.views.static import serve url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
訪問地址:
http://127.0.0.1:8000/media/1.png
media配置總結:
''' 靜態文件的處理又包括STATIC和MEDIA兩類,這每每容易混淆,在Django裏面是這樣定義的: MEDIA:指用戶上傳的文件,好比在Model裏面的FileFIeld,ImageField上傳的文件。若是你定義 MEDIA_ROOT=c:\temp\media,那麼File=models.FileField(upload_to="abc/")#,上傳的文件就會被保存到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裏面設置的MEDIA_ROOT必須是本地路徑的絕對路徑,通常是這樣寫: BASE_DIR= os.path.abspath(os.path.dirname(__file__)) MEDIA_ROOT=os.path.join(BASE_DIR,'media/').replace('\\','/') MEDIA_URL是指從瀏覽器訪問時的地址前綴,舉個例子: MEDIA_ROOT=c:\temp\media\photo MEDIA_URL="/data/" 在開發階段,media的處理由django處理: 訪問http://localhost/data/abc/a.png就是訪問c:\temp\media\photo\abc\a.png 在模板裏面這樣寫<img src="/media/abc/a.png"> 在部署階段最大的不一樣在於你必須讓web服務器來處理media文件,所以你必須在web服務器中配置, 以便能讓web服務器能訪問media文件 以nginx爲例,能夠在nginx.conf裏面這樣: location ~/media/{ root/temp/ break; } 具體能夠參考如何在nginx部署django的資料。 '''