Django初識 學習筆記一

Django初識 學習筆記一

一 MVC框架

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯彙集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不須要從新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。html

 

enter description here
enter description here

 

  • Model(模型)是應用程序中用於處理應用程序數據邏輯的部分。
      一般模型對象負責在數據庫中存取數據。python

  • View(視圖)是應用程序中處理數據顯示的部分。
      一般視圖是依據模型數據建立的。和html頁面有關係。mysql

  • Controller(控制器)是應用程序中處理用戶交互的部分。
      一般控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。接受請求,進行交互,與M和V進行交互,返回應答。web

    二 MVT框架

    Django也是MVC框架。 可是,Django框架(內部的URLconf)做爲控制器的角色,負責了接收用戶請求和轉發請求的工做,Django 裏更關注的是模型(Model)、模板(Template)和視圖(Views),故稱之爲 Django MVT 模式處理過程: Django框架接收了用戶請求和參數後,再經過正則表達式匹配URL,轉發給對應視圖進行處理。視圖調用M處理數據,再調用T返回界面給瀏覽器;正則表達式

     

    enter description here
    enter description here

     

  • M:Model,模型, 和數據庫進行交互,和MVC中M功能相同sql

  • V: View,視圖, 接受請求,進行交互,與M和V進行交互,返回應答 和MVC中C 功能相同shell

  • T: Template,模板,產生html頁面,和MVC中的v功能相同數據庫

三 第一個Django項目

命令:django-admin startproject 項目名django

項目目錄以下:vim

 

enter description here
enter description here

 

  • _init_.py: 說明test1是一個python包。
  • settings.py: 項目的配置文件
  • urls.py: 進行url路由的配置
  • wsgi.py: web服務器和django交互的入口
  • manage.py: 項目的管理文件

一個項目由不少個應用組成的,每個應用完成一個特定的功能。
建立應用的命令以下:
python manage.py startapp 應用名
應用目錄以下:

 

enter description here
enter description here

 

  • _init_.py: 說明目錄是一個python模塊
  • models.py: 寫和數據庫相關的內容
  • views.py: 接收請求,進行處理。和M,T交互,返回應答,
  • 定義處理函數,視圖函數

tests.py:寫測試代碼的函數
admin.py: 網站後臺管理相關的文件
創建應用和項目之間的聯繫,須要對應用進行註冊。(項目不知道應用在)
修改settings.py中的INSTALLED_APPS配置項。

INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'booktest', # 進行應用的註冊 )

運行開發web服務器命令:

python manage.py runserver

四 ORM

ORM:Object Relational Mapping(關係對象映射)
django中內嵌了ORM框架,ORM框架能夠將類和數據表進行對應起來,只須要經過類和對象就能夠對數據表進行操做。
設計類:模型類。
ORM另一個做用:根據設計的類生成數據庫中的表。

它的做用是在關係型數據庫和業務實體對象之間做一個映射,這樣,咱們在具體的操做業務對象的時候,就不須要再去和複雜的SQL語句打交道,只需簡單的操做對象的屬性和方法。

4.1 模型類設計
在應用models.py中設計模型類。必須繼承與models.Model類
1) 設計BookInfo類。
2) 設計HeroInfo類。
Models.ForeignKey能夠創建兩個模型類之間一對多的關係,django在生成表的時候,就會在多的表中建立一列做爲外鍵,創建兩個表之間一對多的關係。

from django.db import models # 設計和表對應的類,模型類 # Create your models here. # 一類 # 圖書類 class BookInfo(models.Model): '''圖書模型類''' # 圖書名稱,CharField說明是一個字符串,max_length指定字符串的最大長度 btitle = models.CharField(max_length=20) # 出版日期,DateField說明是一個日期類型 bpub_date = models.DateField() def __str__(self): # 返回書名 return self.btitle # 多類 # 英雄人物類 # 英雄名 hname # 性別 hgender # 年齡 hage # 備註 hcomment # 關係屬性 hbook,創建圖書類和英雄人物類之間的一對多關係 class HeroInfo(models.Model): '''英雄人物模型類''' hname = models.CharField(max_length=20) # 英雄名稱 # 性別,BooleanField說明是bool類型,default指定默認值,False表明男 hgender = models.BooleanField(default=False) # 備註 hcomment = models.CharField(max_length=128) # 關係屬性 hbook,創建圖書類和英雄人物類之間的一對多關係 # 關係屬性對應的表的字段名格式: 關係屬性名_id hbook = models.ForeignKey('BookInfo') def __str__(self): # 返回英雄名 return self.hname

4.2 模型類生成表
1) 生成遷移文件
命令:python manage.py makemigrations

 

enter description here
enter description here

遷移文件是根據模型類生成的。
2) 執行遷移生成表
命令: python mange.py migrate
根據遷移文件生成表。
生成表名的默認格式:
應用名_模型類名小寫

 

4.3 經過模型類操做數據表
進入項目shell的命令:

python manage.py shell

4.4 如下爲在相互shell終端中演示的例子:
首先導入模型類:
from booktest.models import BookInfo,HeroInfo
1)向booktest_bookinfo表中插入一條數據。
b = BookInfo() #定義一個BookInfo類的對象
b.btitle ='天龍八部' #定義b對象的屬性並賦值
b.bpub_date = date(1990,10,11)
b.save() #纔會將數據保存進數據庫
2)查詢出booktest_bookinfo表中id爲1的數據。
b = BookInfo.objects.get(id=1)
3)在上一步的基礎上改變b對應圖書的出版日期。
b.bpub_date = date(1989,10,21)
b.save() #纔會更新表格中的數據
4)緊接上一步,刪除b對應的圖書的數據。
b.delete() #纔會刪除
5)向booktest_heroInfo表中插入一條數據。
h = HeroInfo()
h.hname = '郭靖'
h.hgender = False
h.hcomment = ‘降龍十八掌’
b2 = BookInfo.objects.get(id=2)
h.hbook = b2 #給關係屬性賦值,英雄對象所屬的圖書對象
h.save()
6)查詢圖書表裏面的全部內容。
BookInfo.objects.all()
HeroInfo.objects.all()

4.5 關係操做

 

enter description here
enter description here

1)查詢出id爲2的圖書中全部英雄人物的信息。
b = BookInfo.objects.get(id=2)
b.heroinfo_set.all() #查詢出b圖書中全部英雄人物的信息

 

五 後臺管理

1) 本地化
語言和時區的本地化。
修改settings.py文件。

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans' # 使用中文

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai' # 中國時間

2) 建立管理員
命令:python manage.py createsuperuser

C:\Django\test1>python manage.py createsuperuser

You have 3 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth.
Run 'python manage.py migrate' to apply them.
Username (leave blank to use 't_maj'): admin
Error: That username is already taken.
Username (leave blank to use 't_maj'): Cosmo
Email address: cosmo.ma@outlook.com
Password:
Password (again):
Superuser created successfully.

3) 註冊模型類
在應用下的admin.py中註冊模型類。
告訴djang框架根據註冊的模型類來生成對應表管理頁面。
b = BookInfo()
str(b) str
4) 自定義管理頁面
自定義模型管理類。模型管理類就是告訴django在生成的管理頁面上顯示哪些內容。

六 視圖

在Django中,經過瀏覽器去請求一個頁面時,使用視圖函數來處理這個請求的,視圖函數處理以後,要給瀏覽器返回頁面內容。
6.1 視圖函數的使用
1)定義視圖函數
視圖函數定義在views.py中。
例:

def index(request):
            #進行處理。。。
            return HttpResponse('hello python')

視圖函數必須有一個參數request,進行處理以後,須要返回一個HttpResponse的類對象,hello python就是返回給瀏覽器顯示的內容。
2)進行url配置

 

enter description here
enter description here

url配置的目的是讓創建url和視圖函數的對應關係。url配置項定義在urlpatterns的列表中,每個配置項都調用url函數。
url函數有兩個參數,第一個參數是一個正則表達式,第二個是對應的處理動做。
配置url時,有兩種語法格式:
a) url(正則表達式,視圖函數名)
b) url(正則表達式,include(應用中的urls文件))
工做中在配置url時,首先在項目的urls.py文件中添加配置項時,並不寫具體的url和視圖函數之間的對應關係,而是包含具體應用的urls.py文件,在應用的urls.py文件中寫url和視圖函數的對應關係。
項目的url.py:

 

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)), # 配置項目
    url(r'^', include('booktest.urls')), # 包含booktest應用中的urls文件
]

應用的url.py:

urlpatterns = [
    # 經過url函數設置url路由配置項
    url(r'^index$', views.index), # 創建/index和視圖index之間的關係
    url(r'^index2$', views.index2),
    url(r'^books$', views.show_books), # 顯示圖書信息
    url(r'^books/(\d+)$', views.detail), # 顯示英雄信息
]

6.2 url匹配的過程
在項目的urls.py文件中包含具體應用的urls.py文件,應用的urls.py文件中寫url和視圖函數的對應關係。

 

enter description here
enter description here

 

當用戶輸入如http://127.0.0.1:8000/aindex時,去除域名和最前面的/,剩下aindex,拿aindex字符串到項目的urls文件中進行匹配,配置成功以後,去除匹配的a字符,那剩下的index字符串繼續到項目的urls文件中進行正則匹配,匹配成功以後執行視圖函數index,index視圖函數返回內容hello python給瀏覽器來顯示。

七 模板

模板不單單是一個html文件。
7.1 模板文件的使用
1) 建立模板文件夾
2) 配置模板目錄

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

使用模板文件
a) 加載模板文件
去模板目錄下面獲取html文件的內容,獲得一個模板對象。
b) 定義模板上下文
向模板文件傳遞數據。
c) 模板渲染
獲得一個標準的html內容。

from django.template import loader,RequestContext
def my_render(request, template_path, context_dict={}):
    '''使用模板文件'''
    # 使用模板文件
    # 1.加載模板文件, 模板對象
    temp = loader.get_template(template_path)
    # 2.定義模板上下文:給模板文件傳遞數據
    context = RequestContext(request, context_dict)
    # 3.模板渲染:產生標準的html內容
    res_html = temp.render(context)
    # 4.返回給瀏覽器
    return HttpResponse(res_html)

7.2 給模板文件傳遞數據
模板變量使用:{{ 模板變量名 }}
模板代碼段:{%代碼段%}
for循環:
{% for i in list %}
{% endfor %}

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>模板文件</title> </head> <body> <h1>這是一個模板文件</h1> 使用模板變量:<br/> {{ content }}<br/> 使用列表:<br/> {{ list }}<br/> for循環:<br/> <ul> {% for i in list %} <li>{{ i }}</li> {% endfor %} </ul> </body> </html>

八 模型

8.1 Django ORM

 

enter description here
enter description here

O:(objects)->類和對象。
R:(Relation)->關係,關係數據庫中的表格。
M:(Mapping)->映射。

 

ORM框架的功能:
a) 可以容許咱們經過面向對象的方式來操做數據庫。
b) 能夠根據咱們設計的模型類幫咱們自動生成數據庫中的表格。
c) 經過方便的配置就能夠進行數據庫的切換。

8.2 數據庫配置
mysql命令回顧:
登陸mysql數據庫:mysql –uroot –p
查看有哪些數據庫:show databases;
建立數據庫:create database test2 charset=utf8; #切記:指定編碼
使用數據庫:use test2;
查看數據庫中的表:show tables;
Django配置使用mysql數據庫:
修改settings.py中的DATABASES。

DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', 'ENGINE': 'django.db.backends.mysql', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'NAME': 'bj18', # 使用的數據庫的名字,數據庫必須手動建立 'USER': 'root', # 連接mysql的用戶名 'PASSWORD': 'mysql', # 用戶對應的密碼 'HOST': 'localhost', # 指定mysql數據庫所在電腦ip 'PORT': 3306, # mysql服務的端口號 } }

注意:django框架不會自動幫咱們生成mysql數據庫,因此咱們須要本身去建立。
8.3 切換mysql數據庫以後不能啓動服務器

須要安裝操做mysql數據庫的包,python2環境和python3環境有如下區別。

a) python2須要安裝mysql-python:

 pip install mysql-python

b) python3須要安裝pymysql:

 pip install pymysql

python3中安裝好pymysql,須要在test2/init.py中加以下內容:

import pymysql
pymysql.install_as_MySQLdb()

8.4 複習案例

  1. 設計模型類並生成表
    a) 設計BookInfo,增長屬性bread和bcomment,另外設置軟刪除標記屬性isDelete。
    b) 設計HeroInfo類,增長軟刪除標記屬性isDelete。
    軟刪除標記:刪除數據時不作真正的刪除,而是把標記數據設置爲1表示刪除,目的是防止重要的數據丟失。

  2. 編寫視圖函數並配置URL。
    3)建立模板文件。
    拆解功能:

  3. 圖書信息展現頁。
    a) 設計url,經過瀏覽器訪問 http://127.0.0.1:8000/index時顯示圖書信息頁面。
    b) 設計url對應的視圖函數index。
    查詢出全部圖書的信息,將這些信息傳遞給模板文件。
    c) 編寫模板文件index.html。
    遍歷顯示出每一本圖書的信息並增長新建和刪除超連接。
    2)圖書信息新增。
    a)設計url,經過瀏覽器訪問 http://127.0.0.1:8000/create/時向數據庫中新增一條圖書信息。
    b) 設計url對應得視圖函數create。

     

    enter description here
    enter description here

     

    頁面重定向:服務器不返回頁面,而是告訴瀏覽器再去請求其餘的url地址。
    3)圖書信息刪除。
    a)設計url,經過瀏覽器訪問 http://127.0.0.1:8000/delete數字/刪除數據庫中對應的一條圖書數據。 其中數字是點擊的圖書的id。 b)設計url對應的視圖函數delete。 獲取圖書的id,進行刪除。

相關文章
相關標籤/搜索