筆記5:Django知識一

Django

1 MVC

MVC的核心思想就是解耦。html

1559138019832

2 Django介紹

2.1 MVT

Django遵循MVC思想,其稱爲MVT。其中:node

  • M: Model模型:和MVC中的M相同和數據庫交互
  • V:View視圖,和MVC中的C相同,接收請求並處理,與M和T交互,返回應答
  • T:Template模板,和MVC中的V功能相同,產生HTML

1559138277822

解決python安裝包依賴問題python

1559139008305

在虛擬環境裏面配置,減小依賴。mysql

Django項目建立git

1559139501282

  • 項目結構

1559139626118

  • 建立應用 C:\Users\admin\Desktop\bncDome\test1>django-admin startapp booktest

1559139813409

1559140138434

  • 啓動服務器

1559142881991

  • 添加app

1559141953184

2.2 ORM框架

1559142294439

ORM模型類生產表github

  • 1 設計testbook app中的model.py

1559143745239

  • 2 生成遷移文件

1559143598381

1559143956503

  • 3 執行遷移生成表

1559144008478

1559144107935

sqlite3是一個小型數據庫,常常使用在手機登移動端sql

  • 經過模型操做數據表。操做sqlite3
 
 
 
xxxxxxxxxx
 
 
 
 
C:\Users\admin>cd Desktop\bncDome\test1
C:\Users\admin\Desktop\bncDome\test1>python manage.py shell
In [3]: from booktest.models import BookInfo
In [6]: from datetime import date
In [4]: b=BookInfo()
# 插入
In [5]: b.btitle = '天龍八部'
In [9]: b.bpub_date = date(1990,1,1)
In [10]: b.save()
# 查找
In [14]: b2=BookInfo.objects.get(id=1)
In [15]: type(b2)
Out[15]: booktest.models.BookInfo
In [16]: b2.btitle
Out[16]: '天龍八部'
# 更新
In [17]: b2.btitle ='笑傲江湖'
In [18]: b2.save()
In [19]: b2.btitle
Out[19]: '笑傲江湖'
#刪除
In [23]: b2.delete()
 

2.3 模型M:數據庫交互

  • 模型與模型關係

1559232526545

生成遷移文件shell

1559232582029

生成遷移表數據庫

1559232615290

1559232696219

1559232830466

1559232902886

  • Django操做後臺管理

(1)本地化語言與時間django

1559233086302

(2)建立管理員

1559233147460

(3)啓動服務器

1559233206207

(4)瀏覽器訪問

1559233262373

(5)註冊模型類

1559233296822

1559233405264

1559233729525

1559233420800

(6)列表文本顯示

1559233550047

1559233566898

(7)自定義管理頁面

1559488741646

1559488845141

2.4 視圖V:V與M或者T交互

  • 視圖使用:當視圖與T交互時候,首先瀏覽器地址中127.0.0.1\index。找到項目第三步中的url中的urlpatterns中查找,\與^ 同樣,逐漸往下匹配。找到booktest.urls。而後跳到app中的booktest中的urls(第二步)繼續匹配。對應的是一個視圖views.index,就會跳到視圖views.py匹配,即第一步

(1)編寫view代碼,定義視圖函數,返回瀏覽器的內容

1559489906689

(2)建立urls.py:配置url路由,注意嚴格匹配開頭結尾。地址視圖都在這裏直接匹配

1559490135125

1559490288469

1559490364451

(3) 項目的url文件配置,包含對應的app中的視圖

1559489545206

  • ur與視圖匹配過程

    1559490527800l

 

2.5 T:Template模板

(1)根項目下建立模板templates文件夾

1559491898481

(2)配置模板目錄

  • 項目絕對路徑,查看便可

1559490928361

  • 設置目錄文件路徑

1559490983465

  • 配置模板文件,每一個app下建立一個模板文件名如booktest

1559492103769

這裏面的模板文件爲html,而模板中不單單爲html。其中支持變量,變量使用兩個花括號,;裏面是view.py中設置的字典鍵名。

  • 模板中的遍歷

1559492448818

(3)使用模板文件

1559491107254

 

  • 模板渲染:產生標準的html

1559491434322

  • 封裝以上步驟

1559491544675

注意:使用模板文件中須要以上四個步驟,對以上四步進行封裝爲my_render遍歷高效執行。幸運的是django已經幫咱們封裝好了這個方法爲render。其中第一個參數爲request,第二個是模板路徑,第三個參數是變量字典,沒有變量則爲空

1559491709284

1559491608434

1559492307170

  • 顯示結果

1559492417381

 

2.6 MVT綜合案例

(1)啓動項目解決端口號佔用,指定端口號

1559492591951

(2)案例介紹

1559492675244

1559492716985

(3)視圖編寫,先導入模型model類,查找MongoDB數據庫的表信息

1559492850511

1559492946155

(4)配置url,記得配置主項目下的urls.py,這個文件一次配置屢次使用

1559493017734

(5)建立模板文件

1559493253565

(6)顯示圖書信息,主頁信息

1559493198553

(7) 在視圖裏面編寫圖書管理的詳細信息

1559493402099

1559493480687

(8) 設置URL地址以及傳參

1559493621636

Django在頁面間傳參的原理是,在頁面url配置時候經過括號裏面的組進行傳參,後面視圖會自動解析組內容進行參數填充。多個參數多個組

(8)建立子頁面信息

1559493816342

2.7 Django使用MySQL

(1)建立新的項目:django-admin startproject tets2

(2) 建立app: django-admin startapp booktest

(3) setting.py中的INSTALLED_APPS註冊應用booktest

(4) setting.py中的DATABASES中配置數據庫

 
 
 
xxxxxxxxxx
 
 
 
 
DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'bj18',
        'USER':'root',
        'PASSWORD':'admin',
        'HOST':'127.0.0.1',
        'PORT':3306,
    }
}
 

(5) 預先安裝pip install pymysql,以後在test2中須要加兩句話:

1559566868521

1559566639759

(6) 根目錄下啓動服務: python manage.py runserver

(7) 遷移表:python manage.py makemigrations

(8) mysql數據庫同步表:python manage.py migrate

1560179674829

(9) 編寫views

 
 
 
xxxxxxxxxx
 
 
 
 
from django.shortcuts import render
from booktest.models import BookInfo
# Create your views here.
def index(request):
    # 1 查詢全部信息
    books = BookInfo.objects.all()
    # 2 使用模板
    return render(request,'booktest/index.html',{'books':books})
 

(10) 設置模板目錄DIRS

 
 
 
xxxxxxxxxx
 
 
 
 
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',
            ],
        },
    },
]
 

(11) 在templates下新建booktest文件夾,而後建立html

(12) 配置urls

 
 
 
xxxxxxxxxx
 
 
 
 
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('booktest/', include('booktest.urls') )
]
 

booktest的urls

 
 
 
xxxxxxxxxx
 
 
 
 
from django.urls import path,include
from booktest import views
urlpatterns = [
    path('',views.index,name='index')
]
 

重定向

 
 
 
xxxxxxxxxx
 
 
 
 
from django.shortcuts import render,redirect
def create(request):
    b = BookInfo()
    b.btitle = '流星蝴蝶劍'
    b.bpub_date= datetime.date(1990,1,1)
    b.save()
    # return HttpResponse('ok')
    return redirect('index')
 

(13)mysql日誌文件

1560266978298

(14)模型-模型關係:1:1,1:多,多:多

1560267866713

兩個類之間有多對多的關係,ManyToManyField定義在哪一個類裏面均可以

1560267754216

(15)模型-關聯查詢

1560268121596

1560268260720

(16)管理器對象

1560268710592

1560268993164

1560269246685

1560269420407

(17)元選項:不會由於app改變影響模型類,而後從新作下遷移

1560269741567

模型類對應的表名不依賴於應用的名字

相關文章
相關標籤/搜索