環境:Ubuntu20.04
、 Django1.11.1
css
Django的主要目的是簡便、快速的開發數據庫驅動的網站。它強調代碼複用,多個組件能夠很方便的以"插件"形式服務於整個框架,Django有許多功能強大的第三方插件,你甚至能夠很方便的開發出本身的工具包。這使得Django具備很強的可擴展性。它還強調快速開發和DRY(DoNotRepeatYourself)原則。html
1.1 重量級框架前端
對比Flask框架,Django原生提供了衆多的功能組件,讓開發更簡便快速。python
bookmanager: 爲工程目錄; book: 爲應用目錄; bookmanager/settings.py -->> bookmanager/urls.py -->> book/urls.py -->> book/views.py -->> templates/book/index.html -->> book/models.py -->> 數據庫
django-admin startproject bookmanager 執行後,會多出一個新目錄名爲bookmanager,此即爲新建立的工程目錄。
運行服務器命令以下:sql
# vim ./bookmanager/settings.py 中設置ALLOWED_HOSTS = ['*'] # 設置後可遠程訪問 ip 0.0.0.0:8000 python manage.py runserver ip:端口 或: python manage.py runserver
在django中,建立子應用模塊目錄仍然能夠經過命令來操做,即:shell
python manage.py startapp 子應用名稱 例如:cd ~/book python manage.py startapp book 執行後,能夠看到工程目錄中多出了一個名爲book的子目錄
在工程配置文件settings.py中,INSTALLED_APPS項保存了工程中已經註冊安裝的子應用,初始工程中的INSTALLED_APPS以下:數據庫
例如,將剛建立的book子應用添加到工程中,可在INSTALLED_APPS列表中添加'book.apps.BookConfig'。django
vim ./bookmanager/settings.py # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 添加本身的子應用 'book.apps.BookConfig', ]
子應用目錄models.py中定義模型類,繼承自
models.Modelvim
from django.db import models # Create your models here. # 準備書籍列表信息的模型類 class BookInfo(models.Model): # 建立字段,字段類型... name = models.CharField(max_length=10) # 準備人物列表信息的模型類 class PeopleInfo(models.Model): name = models.CharField(max_length=10) gender = models.BooleanField() # 外鍵約束:人物屬於哪本書 book = models.ForeignKey(BookInfo)
根據子應用目錄models.py的內容生成建立表的語句和在數據庫中建立表瀏覽器
生成遷移文件:根據模型類生成建立表的語句
python manage.py makemigrations 子應用目錄下makemigrations目錄下會生成0001_initial.py
執行遷移:根據第一步生成的語句在數據庫中建立表
python manage.py migrate
提示:默認採用sqlite3
數據庫來存儲數據
Django工程目錄下settings.py設置中文和時區:
# 設置中文 LANGUAGE_CODE = 'zh-Hans' # 亞洲上海時區 TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = True
建立管理員的命令 :
python manage.py createsuperuser # 根據提示輸入管理用戶名和密碼
重置密碼
python manager.py changepassword 用戶名
啓動服務: python manage.py runserver ip:端口
登錄站點 :http://127.0.0.1:8000/admin
管理數據庫。
在子應用目錄models.py中優化模型類展現:
# 準備書籍列表信息的模型類 class BookInfo(models.Model): # 建立字段,字段類型... name = models.CharField(max_length=10) def __str__(self): """將模型類以字符串的方式輸出""" return self.name # 在網站管理列表中能夠看到name屬性
在子應用目錄中的views.py
裏定義
Python
函數,被定義在應用
的views.py
中.HttpRequest
類型的對象reqeust
,包含了全部請求信息
.HttpResponse對象
,包含返回給請求者的響應信息
.HttpResponse
模塊 :from django.http import HttpResponse
OK!
給客戶端# vim ./book/views.py from django.shortcuts import render # Create your views here. from django.http import HttpResponse def index(request): return HttpResponse('OK!!!')
查找視圖的過程 :
在工程目錄中settings.py 設置URLconf
入口:
# vim ./bookmanager/settings.py ROOT_URLCONF = 'bookmanager.urls'
URLconf
配置
項目
中定義URLconf
應用
中定義URLconf
項目
中定義URLconf
# vim ./bookmanager/urls.py from django.conf.urls import url,include # 導入 from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), # 正則匹配規則:只要不是admin/ 就算匹配成功 url(r'^', include('book.urls')) ]
應用
中定義URLconf
# 在子應用目錄下新建urls.py # vim ./book/urls.py from django.conf.urls import url from book.views import index # urlpatterns爲固定寫法 urlpatterns = [ url(r'^$',index) # 路由引導視圖函數 ]
應用
同級目錄下建立模板文件夾templates
. 文件夾名稱固定寫法.templates
文件夾下, 建立應用
同名文件夾. 例, Book
應用
同名文件夾下建立網頁模板
文件. 例 :index.html
在工程目錄下, vim bookmanager/setings.py 設置DIRS
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
在子應用目錄下編寫: vim book/views.py # -*- coding:utf-8 -*- from django.shortcuts import render # Create your views here. from django.http import HttpResponse def index(request): context = {'title':'測試模板數據'} return render(request, 'book/index.html', context)
# 編寫模板數據html、css、js等 vim templates/book/index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>測試模板數據</title> </head> <body> <h1>根路徑下的數據</h1> <di style="background: red; font-size: 30px"> {{title}} </di> </body> </html>
1.運行服務器: python manage.py runserver 0.0.0.0:8000
2.在服務器中輸入: http://192.168.1.101:8000/ 訪問
實現步驟:
子應用目錄下修改: vim book/views.py from django.shortcuts import render # Create your views here. from django.http import HttpResponse from book.models import BookInfo,PeopleInfo # BookInfo,PeopleInfo 模型類,在4.1定義遷移過 def index(request): context = {'title':'測試模板數據'} return render(request, 'book/index.html', context) # 定義視圖:提供書籍列表信息 def bookList(request): # 查詢數據庫書籍列表數據 books = BookInfo.objects.all() # 構造上下文 context = {'books':books} # 數據交給模板處理,處理完成後經過視圖響應給客戶端 return render(request, 'book/booklist.html', context)
在模板目錄下: vim templates/book/booklist.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>書籍列表信息</title> </head> <body> <ul> {% for book in books %} <li>{{ book.name }}</li> {% endfor %} </ul> </body> </html>
修改子應用
目錄中的urls.py
文件
from django.conf.urls import url from book.views import index,bookList urlpatterns = [ url(r'^$',index), # 匹配書籍列表信息的URL,調用對應的bookList視圖 url(r'^booklist/$',bookList) ]
cd $HOME/bookmanager
啓動服務: python manage.py runserver 0.0.0.0:8000
在瀏覽器輸入http://192.168.1.101:8000/booklist/
便可看到在數據庫的數據。
BASE_DIR 屬性:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
當前工程的根目錄,Django會依此來定位工程內的相關文件,咱們也可使用該參數來構造文件路徑。
DEBUG屬性:
調試模式,建立工程後初始值爲True,即默認工做在調試模式下。
做用:
修改代碼文件,程序自動重啓
Django程序出現異常時,向前端顯示詳細的錯誤追蹤信息
而非調試模式下,僅返回Server Error (500)
注意:部署線上運行的Django不要運行在調式模式下,記得修改DEBUG=False和ALLOWED_HOSTS(訪問ip)。
設置本地語言與時區
LANGUAGE_CODE = 'en-us' # 語言 TIME_ZONE = 'UTC' # 時區# 時區
將語言和時區修改成中國大陸信息
LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai'
項目中的CSS、圖片、js都是靜態文件。通常會將靜態文件放到一個單獨的目錄中。
爲了提供靜態文件,須要配置兩個參數:
1) 在項目根目錄下建立static目錄來保存靜態文件。
2) 在bookmanager/settings.py中修改靜態文件的兩個參數爲
STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]
3)此時在static添加的任何靜態文件均可以使用網址/static/文件在static中的路徑來訪問了。
例如,咱們向static目錄中添加一個index.html文件,在瀏覽器中就可使用127.0.0.1:8000/static/index.html來訪問。
咱們將此類添加到工程settings.py中的INSTALLED_APPS列表中,代表註冊安裝具有此配置屬性的應用。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 添加本身的子應用 'book.apps.BookConfig', ]
在每一個應用目錄中都包含了apps.py文件,用於保存該應用的相關信息。
在建立應用時,Django會向apps.py文件中寫入一個該應用的配置類,如
from django.apps import AppConfig class BookConfig(AppConfig): name = 'book'
AppConfig.name屬性表示這個配置類是加載到哪一個應用的,每一個配置類必須包含此屬性,默認自動生成。
AppConfig.verbose_name屬性用於設置該應用的直觀可讀的名字,此名字在Django提供的Admin管理站點中會顯示,如
from django.apps import AppConfig class UsersConfig(AppConfig): name = 'book' verbose_name = '圖書管理'