1. 程式人生 > >Django框架之模型

Django框架之模型

.com 需要 模型 bool span 我們 unique web 大文本

出品人:灰度

模型詳解(上)

在講解之前先來說下MVC框架,M指的是模型(model)的意思是應用程序的核心,v指的是視圖(view)主要用來顯示內容,C呢就是控制器(Controller)主要用來控制輸入.MVC是一種編寫WEB應用的一種設計模式,他主要的目的是解耦,怎麽理解這就話,其實就是將業務代碼和視圖代碼分離,由控制器來進行調用進行數據的輸入輸出操作。在Django中不叫MVC叫MVT(其實是一樣的)。


1.理解什麽是ORM模型

首先理解什麽是ORM,簡單來說就是通過代碼來操作數據庫,通過對象來映射對應的sql代碼,無需編寫sql語句,自動生成數據庫表,它主要提供是三個功能:(1)允許我們通過面向對象的方式來操作數據庫(2)根據我們自己設計的模型,自動在數據庫中生成我們需要的數據表(3)可以很方便的配置,讓我們對數據庫進行切換操作

2.這裏我們拿mysql為例,Django默認使用自帶的sqlite3數據庫,我們來修改成我們自己的,修改settings.py文件,找到DATABASES

技術分享

將其修改成下面的數據庫

技術分享

在__init__.py中添加mysql驅動,前提是已經安裝了pymysql驅動

技術分享

3.模板中的字段屬性

在模板中定義屬性有三條規則

(1)不能使用python 的關鍵字 例如:os

(2)不能使用雙下劃線,Django對雙下劃線敏感,涉及到Django查詢問題

(3)定義屬性時,必須指定屬性的類型

4.說道類型,下面列舉下Django中的類型


  • BooleanField:布爾字段,值為True或False。

  • CharField(max_length=字符長度):字符串

  • TextField:大文本字段,一般超過4000個字符時使用

  • IntegerField:整數

  • FloatField:浮點數

  • DateField日期

  • TimeField:時間

  • DateTimeField:日期時間

  • FileField:上傳文件字段。

  • ImageField:

    繼承於FileField,對上傳的內容進行校驗,確保是有效的圖片。

  • DecimalField(max_digits=None, decimal_places=None):十進制浮點數。

參數max_digits表示總位數。

參數decimal_places表示小數位數


5.字段屬性約束-------選項

  • null:如果為True,表示允許為空,默認值是False。

  • blank:如果為True,則該字段允許為空白,默認值是False。

* 對比:null是數據庫範疇的概念,blank是表單驗證證範疇的。

  • db_column:字段的名稱,如果未指定,則使用屬性的名稱。

  • db_index:若值為True, 則在表中會為此字段創建索引,默認值是False。

  • default:默認值。

  • primary_key:若為True,則該字段會成為模型的主鍵字段,默認值是False,一般作為AutoField的選項使用。

  • unique:如果為True, 這個字段在表中必須有唯一值,默認值是False。

下面讓我們寫個模型吧

技術分享

執行遷移命令

  1. python manage.py makemigrations #在終端項目下執行
  1. python manage.py migrate #生成數據表

6.數據庫相關操作

在這裏,小編說聲抱歉寫的不夠細,具體的看說明文檔吧,我已經將網址寫在這裏,寫的還是很詳細的

參考網址:http://python.usyiyi.cn/translate/django_182/topics/db/queries.html

一、 查詢

1、單條數據查詢get()

例如查詢剛才我們創建的表中的數據

HeroInfo.objects.get(name=‘lisi‘)

2、查詢表中所有的數據all()

HeroInfo.objects.all() # 這裏說下它的返回值類型是QuerySet(查詢集)

3、過濾器查詢filter() # 可以理解為where

HeroInfo.objects.filter(name=‘lisi‘)相當於 HeroInfo.objects.all().filter(name=‘list‘)

4、模糊查詢contains 結尾 endswith 開頭startswith

HeroInfo.objects.get(name__contains=‘li‘) 相當於 select ....from HeroInfo where name like ‘%li%‘

5.空查詢 isnull

6.比較查詢 大於get 小於let

7.取反 exclude

二、引用Q對象查詢復雜的語句

通常Q對象用來查詢邏輯條件時用到 not and or

提示下先引入from django.db.models import Q

Q 對象可以使用&| 操作符組合起來

    Q(question__startswith=‘Who‘) | Q(question__startswith=‘What‘)

F對象用於對象間的比較

BookInfo.objects.filter(bread__gt=F(‘bcomment‘))













Django框架之模型