1. 程式人生 > >Python Web 框架-Django day03

Python Web 框架-Django day03

目錄

1.模板

day02回顧

1.模板

  1. 載入方式
    1. loader
    2. render
  2. 語法
    1. 變數 return render(request,'xx.html',{}) 模板中:{{變數}}
    2. 標籤
      1. {% for %} ... {% endfor %}
      2. {% if %} ... {% endif %}
      3. {% comment %} ... {% comment %}
      4. {% static '' %}
      5. {% load static %}
    3. 過濾器 {{value|upper}} 將value變為大寫 {{value|lower}} 將value變為小寫 {{value|add:num}} 將num值累加到value之後 {{value|floatformat:n}} 將value四捨五入到n位小數 {{value|truncatechars:n}} 將value擷取保留至n位字元(包含...)
  3. 靜態檔案 在settings.py中設定變數
    1. 設定靜態檔案的訪問路徑 STATIC_URL = ‘/static’
    2. 設定靜態檔案的儲存路徑 STATICFILES_DIRS=(os.path.join(BASE_DIR,'static'),)
      1. 專案的根目錄處建立一個static目錄
      2. 每個應用中建立一個static目錄

1.模板

  1. 模板的繼承
    1. 語法
      1. 在父模板中 必須要標識處哪些內容在子模板中允許被修改 標籤:   {% block 名稱 %}   {% endblock %} blcok的作用:
        1. 在父模板中正常顯示
        2. 在子模板中,如果不修改的話則按父模板的顯示,要是修改的話則按照子模板的內容顯示
      2. 在子模板中
        1. 指定繼承自哪個父模板 {% extends ‘父模板名稱’ %}
        2. 增加 block 標籤,改寫屬於自己的內容 {% block 名稱 %} {% endblock %} 練習:
          1. 建立專案 - fruitday
          2. 建立應用 - index,配置好響應的路由
          3. 訪問http://localhost:8000/login 顯示 之前已經做好的 登入頁面(處理好靜態資原始檔)
          4. 訪問http://localhost:8000/register 建立一個新的模板繼承自登入頁面,並按照註冊的樣式進行模板的重寫
  2. url()的name引數
    1. url的語法 url(regex,views,kwargs,name) name:為了給當前的url地址起別名,反向解析時使用 反向解析:通過別名找到對應的地址 url(regex,views,kwargs=None,name='別名')
    2. 反向解析
      1. 在模板上做反向解析
        1. 基本解析 {% url '別名' %}
        2. 帶參的解析 {% url '別名' '引數1' '引數2' %}
      2. 在檢視上做反向解析
        1. 基本解析 url = reverse('別名') url 就是通過別名解析出來的地址
        2. 帶參的解析 url = reverse('別名' args=(引數1,引數2))

2.模型 - Models

  1. 什麼是模型 根據資料庫表結構創建出來的class
  2. ORM 三大特徵
    1. 表 到 類的對映
    2. 資料型別的對映
    3. 關係對映
  3. 建立 和 配置資料庫
    1. 建立資料庫 create database webdb default charset utf8 collate utf8_general_ci;
    2. Django資料庫配置 在settings.py中配置資料庫資訊 DATABASES = {     'dafault' : {     ... ...   } }
      1. ENGINE:django.db.backends.sqlite3 連線到mysql:django.db.backends.mysql
      2. NAME:連線到資料庫的名稱
      3. USER:登入到資料庫的使用者名稱,通常為root
      4. PASSWORD:登入到資料庫的密碼,通常為 123456
      5. HOST:要連線到主機地址 本機:localhost 或 127.0.0.1
      6. PORT:指定埠號 ,mysql為3306
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'webdb',
                'USER':'root',
                'PASSWORD':'123456',
                'HOST':'localhost',
                'PORT':3306,
            }
        }
    3. 資料庫的同步操作
      1. ./manage.py makemigrations 作用:將每個應用下的models.py檔案生成一個數據庫的中間檔案,並將中間檔案儲存在migrations的目錄檔案中
      2. ./manage.py migrate 作用:將每個應用下的migrations目錄中的中間檔案同步到資料庫
  4. 編寫Models
    1. 舉個例子 在index應用中的 models.py 中 #建立一個實體類 - Publisher #用於表示出版社資訊,屬性如下 #1.name:出版社名稱(varchar) #2.address:出版社所在地址(varchar) #3.city:出版社所在城市(varchar) #4.country:出版社所在國家(varchar) #5.website:出版社的網址(varchar)
      class Publisher(models.Model):
          name = models.CharField(max_length=30)
          address = models.CharField(max_length=200)
          city = models.CharField(max_length=50)
          country = models.CharField(max_length=50)
          website = models.URLField()
       
    2. Models的語法規範 class ClassName(models.Model):   屬性 = models.欄位型別(欄位選項)      欄位型別:對映到資料庫表中的資料型別     CharField() - varchar   欄位選項:指定生成的欄位的說明資訊     max_length=30
      1. 欄位型別(Field Types):
        1. BooleanField() 程式語言中適應 True 和 False 表示該列的值 資料庫中使用 1 和 0 來表示具體的值 資料型別為:tinyint
        2. CharField() 字串 資料型別為:varchar
        3. DateField() 程式語言中使用 字串 或 date 型別的資料表示值 資料庫中的使用 時間字串 資料型別為:date
        4. DateTimeField() 資料型別為:datetime
        5. DecimalField() 資料型別為:decimal money = models.DecimalField(max_digits=7,decimal_places=2)
        6. FloatField() 資料型別為:float
        7. IntegerField() 資料型別為:int
        8. EmailField() 資料型別為:varchar
        9. URLField() 資料型別為:varchar
        10. ImageField() 儲存圖片的路徑 資料型別為:varchar image = models.ImageField(upload_to='images/users/')
      2. 欄位選項(Field Options):
        1. default 作用:為當前欄位指定預設值
        2. null 作用:指定當前欄位是否允許為空,預設為False,不能為空
        3. primary_key 作用:指定是否為主鍵
        4. db_column 作用:指定當前欄位對映到表中類的名字,如果不指定則採用屬性名作為列名
      3. 練習: 在index 應用中的models.py中追加兩個class
        1. Author - 作者
          1. name - 姓名
          2. age - 年齡
          3. emial - 郵箱(允許為空)
            class Author(models.Model):
                name = models.CharField(max_length=30)
                age = models.IntegerField()
                email = models.EmailField(null=True)
                isActive = models.BooleanField(default=True)
            
        2. Book - 圖書
          1. title - 圖書
          2. publicate_date - 出版時間
            class Book(models.Model):
                title = models.CharField(max_length=50)
                publicate_date = models.DateField()
  5. 相關指令
    1. 通過資料庫自動匯出models ./manage.py inspectdb > 檔名.py
    2. 資料的版本的切換
      1. ./manage.py migrate 執行所有應用中最新版本的資料庫中間檔案
      2. ./manage.py migrate 應用名稱 版本號 執行指定應用中指定版本的中間檔案 ex: ./manage.py migrate index 0002

示例 請點選

kauw