国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Django新手必看:如何創(chuàng)建應(yīng)用和定義數(shù)據(jù)表。(詳細(xì)講解)

這篇具有很好參考價(jià)值的文章主要介紹了Django新手必看:如何創(chuàng)建應(yīng)用和定義數(shù)據(jù)表。(詳細(xì)講解)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

??????個(gè)人簡(jiǎn)介:以山河作禮。
??????:Python領(lǐng)域新星創(chuàng)作者,CSDN實(shí)力新星認(rèn)證,阿里云社區(qū)專家博主
????:Web全棧開(kāi)發(fā)專欄:《Web全棧開(kāi)發(fā)》免費(fèi)專欄,歡迎閱讀!
????:文章末尾掃描二維碼可以加入粉絲交流群,不定期免費(fèi)送書(shū)。


1. Django創(chuàng)建應(yīng)用

  • Django 項(xiàng)目就是基于 Django 框架開(kāi)發(fā)的 Web 應(yīng)用,它包含了一組配置和多個(gè)應(yīng)用,我們把應(yīng)用稱之為App,在前文中對(duì)它也做了相應(yīng)的介紹,比如 auth、admin,它們都屬于 APP。
  • 一個(gè) App 就是一個(gè) Python 包,通常一個(gè) App 可以包含模型、視圖、模板和 URL 配置文件,可以被應(yīng)用到多個(gè) Django項(xiàng)目中,因?yàn)樗鼈兊谋举|(zhì)就是可被重用的 Python 軟件包。

1.1 創(chuàng)建應(yīng)用

Django 的設(shè)計(jì)目標(biāo)是讓開(kāi)發(fā)者關(guān)注應(yīng)用的功能邏輯的實(shí)現(xiàn)。

所以,創(chuàng)建應(yīng)用的過(guò)程是非常簡(jiǎn)單的,利用 manage.py 提供的 startapp 命令就可以創(chuàng)建一個(gè)APP。

具體命令如下所示:
語(yǔ)法:

python manage.py startapp 應(yīng)用名

python manage.py startapp index
  • startapp 同樣也屬于 manage.py 的子命令,用來(lái)創(chuàng)建 Django 的應(yīng)用。

執(zhí)行這個(gè)命令不會(huì)在命令行看到任何輸出,但是可以在 manage.py 的同級(jí)目錄下看到多出了一個(gè) index 目錄:

Django新手必看:如何創(chuàng)建應(yīng)用和定義數(shù)據(jù)表。(詳細(xì)講解)

我們對(duì)這些文件做逐一的解釋:

  • admin.py 用于將 Model 定義的數(shù)據(jù)表注冊(cè)到管理后臺(tái),是 Django Admin 應(yīng)用的配置文件
  • apps.py 用于應(yīng)用程序本身的屬性配置文件
  • models.py 用于定義應(yīng)用中所需要的數(shù)據(jù)表
  • tests.py 文件用于編寫(xiě)當(dāng)前應(yīng)用程序的單元測(cè)試
  • views.py 用來(lái)定義視圖處理函數(shù)的文件
  • 一級(jí)目錄下的 __init__.py文件標(biāo)識(shí) index 應(yīng)用是一個(gè) Python 包
  • migrations 目錄用于存儲(chǔ)數(shù)據(jù)庫(kù)遷移時(shí)生成的文件,該目錄下的 __init__.py文件標(biāo)識(shí) migrations 是一個(gè) Python 包

這就是 index
應(yīng)用涉及到的所有文件,當(dāng)然在實(shí)際的開(kāi)發(fā)工作中,該應(yīng)用目錄下的文件也不是一成不變的,開(kāi)發(fā)者根據(jù)自己的需要會(huì)相應(yīng)的增加文件或者子目錄,比如
urls.py 文件或者存儲(chǔ)靜態(tài)文件的 static 目錄等。所以大家千萬(wàn)不要認(rèn)為 Django
框架自動(dòng)生成的目錄,無(wú)需我們做其他操作或者更改,這是使用 Django 的一個(gè)誤區(qū)。

1.2 應(yīng)用的添加

應(yīng)用創(chuàng)建完成后,我們還需要在 settings.py 配置文件中對(duì)其進(jìn)行添加。

我們已經(jīng)對(duì) INSTALLED_APPS 做了介紹,把我們創(chuàng)建的應(yīng)用添加到這個(gè)列表,如下所示:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'index',
]
  • 用如上方式添加完成后,就可以讓 index 應(yīng)用的和整個(gè)項(xiàng)目融為一體了。
  • 接下來(lái),就可以正式進(jìn)入開(kāi)發(fā)應(yīng)用階段了,通過(guò)實(shí)現(xiàn)一些小的功能點(diǎn),讓我們更加全面的了解 Django 框架。

2. Django ORM

  • ORM (Object Realtional Mapping)即對(duì)象關(guān)系映射,它是一種基于關(guān)系型數(shù)據(jù)庫(kù)的程序技術(shù)。ORM允許你使用類和對(duì)象對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,這大大提高了對(duì)數(shù)據(jù)庫(kù)的控制,避免了直接使用 SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。這種程序技術(shù)的底層主要是通過(guò)映射機(jī)制實(shí)現(xiàn)的,后面會(huì)講解映射的使用!
  • Web 開(kāi)發(fā)中對(duì)數(shù)據(jù)庫(kù)的操作是必不可少的,然而每種數(shù)據(jù)庫(kù)的操作方式以及用法不盡相同。由于 Django 中 ORM的存在,為我們操作不同種類的數(shù)據(jù)庫(kù)提供了統(tǒng)一的方法,ORM 適配了多種常用的關(guān)系型數(shù)據(jù)庫(kù)。

Django新手必看:如何創(chuàng)建應(yīng)用和定義數(shù)據(jù)表。(詳細(xì)講解)

2.1 定義數(shù)據(jù)表

在定義數(shù)據(jù)表之前,我們應(yīng)該首先理解什么是模型類。

  • 模型類

    其實(shí)模型類本質(zhì)上屬于一個(gè) Python 類,只不過(guò)在 Django 中稱之為做模型類,它是由 django.db.models.Model 派生出的子類

    通過(guò)上述介紹,我們可以這樣理解:Django 中模型類就相當(dāng)于 ORM 模塊。

  • 定義數(shù)據(jù)表

    現(xiàn)在有一張用戶信息表 UserInfo,它有兩個(gè)字段 name 和 password,可以定義如下:

    from django.db import models
    class UserInfo(models.Model):
        name = models.CharFiled(max_length=100)
        password = models.CharFiled(max_length=100)
    

通過(guò)以上代碼,UserInfo 數(shù)據(jù)表就已經(jīng)創(chuàng)建完成,我們對(duì)代碼進(jìn)行逐行解析:

  • 第 1 行,使用 from django.db import models 導(dǎo)入 models 模塊

  • 第 2 行,使用 class 關(guān)鍵字對(duì) UserInfo 表進(jìn)行類定義,并繼承了models 模塊中的 Model 類

  • 第3、4 行,數(shù)據(jù)表中的字段 name 和 password 是 UserInfo 類的屬性,name 和 password 字段類型都是 CharFiled,字段長(zhǎng)度均是100。

2.2 定義項(xiàng)目數(shù)據(jù)表

下面我們用 ORM 定義 index 應(yīng)用所需的數(shù)據(jù)表,首選找到 index 應(yīng)用下的 models.py 文件。

在文件里添加如下代碼:

from django.db import models


# Create your models here.


# 創(chuàng)建book表
class Book(models.Model):
    title = models.CharField(max_length=30, unique=True, verbose_name='書(shū)名')
    public = models.CharField(max_length=50, verbose_name='出版社')
    price = models.DecimalField(max_digits=7, decimal_places=2, verbose_name='定價(jià)')
    retail_price = models.DecimalField(max_digits=7, decimal_places=2, verbose_name='零售價(jià)', default="30")


# 創(chuàng)建作者表
class Author(models.Model):  
    name = models.CharField(max_length=30, verbose_name='姓名')
    email = models.EmailField(verbose_name='郵箱')


# 創(chuàng)建用戶信息表
class UserInfo(models.Model): 
    username = models.CharField(max_length=24, verbose_name='用戶注冊(cè)')
    password = models.CharField(max_length=24, verbose_name='密碼')
  • 通過(guò)上述代碼,我們定義了一個(gè)名叫 Book 的數(shù)據(jù)表。
  • 數(shù)據(jù)表由以下字段構(gòu)成書(shū)名(title)、出版社(public)、價(jià)格(price)、零售價(jià)(retail_price),而且對(duì)每個(gè)字段都做添加了相應(yīng)的字段屬性以及字段選項(xiàng)。

為什么表中沒(méi)有設(shè)置主鍵呢,當(dāng)定義一個(gè)模型類時(shí),Django會(huì)自動(dòng)創(chuàng)建一個(gè)主鍵字段,該字段名為id,類型為AutoField,其自增長(zhǎng)。

也可以手動(dòng)創(chuàng)建

id = models.AutoField(primary_key=True) # id 會(huì)自動(dòng)創(chuàng)建,可以手動(dòng)寫(xiě)入

2.3 通用字段選項(xiàng)

Model 中添加的字段都是 Field 類型的實(shí)例,不同的 Field 類型可能會(huì)支持不同的字段選項(xiàng),但是也有很多字段選項(xiàng)是通用的,即可以用在任何一種 Field 類型中。這里介紹一些常用且重要的通用字段選項(xiàng),它們都有對(duì)應(yīng)的默認(rèn)值,這些字段選項(xiàng)都是可選的,理解這些有助于更好地使用它們。

  • blank

    默認(rèn)值是 False,設(shè)置為 True 時(shí),字段可以為空。設(shè)置為 False 時(shí),字段是必須填寫(xiě)的。如果是字符型字段 CharField 和 TextField,它們是用空字符串來(lái)存儲(chǔ)空值的。

  • unique

    默認(rèn)值是 False,它是一個(gè)數(shù)據(jù)庫(kù)級(jí)別的選項(xiàng),規(guī)定該字段在表中必須是唯一的。

  • null

    默認(rèn)為 False,如果此選項(xiàng)為 False 建議加入 default 選項(xiàng)來(lái)設(shè)置默認(rèn)值。如果設(shè)置為 True,表示該列值允許為空。日期型、時(shí)間型以及數(shù)字型字段不接受空字符串。所以當(dāng)設(shè)置 IntegerField,DateTimeField 型字段可以為空時(shí),需要將 blank 與 null 均設(shè)為 True 才可以。

  • `db_index

    默認(rèn)值是 False,如果設(shè)置為 True,Django 則會(huì)為該字段創(chuàng)建數(shù)據(jù)庫(kù)索引,如果該字段經(jīng)常作為查詢的條件,那么就需要設(shè)置 db_index 選項(xiàng),從而加快數(shù)據(jù)的檢索速度。

  • db_column

    這個(gè)選項(xiàng)用于設(shè)置數(shù)據(jù)庫(kù)表字段的名稱。如果沒(méi)有指定,Django 默認(rèn)使用 Model 中字段的名字。

  • default

    用于給字段設(shè)置默認(rèn)值,該選項(xiàng)可以設(shè)置為一個(gè)值或者是可以調(diào)用對(duì)象,但不能是可變對(duì)象,不同字段類型默認(rèn)值也不同,比如 BooleanFiled 布爾類型 default 值為Ture 或者 False。主要的使用場(chǎng)景是當(dāng)一個(gè)字段的值被用戶省略時(shí),后臺(tái)服務(wù)器自動(dòng)為該字段的設(shè)置默認(rèn)值。

  • primary_key

    默認(rèn)值是 False,如果設(shè)置為 True,表示該字段為主鍵,在 Django 中 默認(rèn) id 為主鍵,也就是說(shuō)即使你的數(shù)據(jù)表中沒(méi)有創(chuàng)建 id 字段,Django 也會(huì)自動(dòng)為你創(chuàng)建 id 字段并將其設(shè)置為主鍵。如果你在表中設(shè)置了其他字段為主鍵的時(shí),那么 Django 將取消為 id 字段設(shè)置主鍵。

  • choices
    這個(gè)選項(xiàng)用于給字段設(shè)置可以選擇的值。它是一個(gè)可迭代對(duì)象,即列表或者元組,其中每一個(gè)元素都是一個(gè)二元組(a,b)的形式,a 是用來(lái)選擇的對(duì)象,b 是對(duì) a 的描述信息。比如我們對(duì)某個(gè)人性別定義數(shù)據(jù)表如下所示:

    # 創(chuàng)建表
    class UserInfo(models.Model):
        # 定義chocies參數(shù)的對(duì)應(yīng)關(guān)系,以元組(或者列表)的形式進(jìn)行表述:
        choices = (
            (male, '男性'),
            (female, '女性'),
        )
        gender = models.CharField(max_length=2,choices = choices,default='male')
    
  • verbose_name

    設(shè)置此字段在 admin 后臺(tái)管理系統(tǒng)界面上的顯示名稱,如果沒(méi)有設(shè)置這個(gè)字段,Django 將會(huì)直接展示字段名并且將字段中的下劃線轉(zhuǎn)變?yōu)榭崭?/strong>。

2.4 外鍵使用

有一個(gè)數(shù)據(jù)表,就應(yīng)該對(duì)應(yīng)一個(gè)模型 在models.py中定義模型

引入:from django.db import models

模型類要繼承models.Model類

from django.db import models

# Create your models here.
class Grades(models.Model):
    """班級(jí)表"""
    gname = models.CharField(max_length=20)  # 班級(jí)名稱
    gdate = models.DateTimeField()  # date
    gtotal = models.IntegerField()  # total

class Students(models.Model):
    """學(xué)生表"""
    sname = models.CharField(max_length=20)  # name
    sgender = models.BooleanField(default=True)  # gender
    sage = models.IntegerField()  # age
    # 關(guān)聯(lián)外鍵
    sgrade = models.ForeignKey(Grades,models.DO_NOTHING)
on_delete=None,  # 刪除關(guān)聯(lián)表中的數(shù)據(jù)時(shí),當(dāng)前表與其關(guān)聯(lián)的field的行為

on_delete=models.CASCADE,     # 刪除關(guān)聯(lián)數(shù)據(jù),與之關(guān)聯(lián)也刪除

on_delete=models.DO_NOTHING,  # 刪除關(guān)聯(lián)數(shù)據(jù),什么也不做

on_delete=models.PROTECT,     # 刪除關(guān)聯(lián)數(shù)據(jù),引發(fā)錯(cuò)誤ProtectedError

\# models.ForeignKey('關(guān)聯(lián)表', on_delete=models.SET_NULL, blank=True, null=True)
on_delete=models.SET_NULL,  # 刪除關(guān)聯(lián)數(shù)據(jù),與之關(guān)聯(lián)的值設(shè)置為null(前提FK字段需要設(shè)置為可空,一對(duì)一同理)

\# models.ForeignKey('關(guān)聯(lián)表', on_delete=models.SET_DEFAULT, default='默認(rèn)值')
on_delete=models.SET_DEFAULT, # 刪除關(guān)聯(lián)數(shù)據(jù),與之關(guān)聯(lián)的值設(shè)置為默認(rèn)值(前提FK字段需要設(shè)置默認(rèn)值,一對(duì)一同理)

2.5 應(yīng)用數(shù)據(jù)庫(kù)遷移

上面我們創(chuàng)建好了 index應(yīng)用所需的數(shù)據(jù)表,下一步就是執(zhí)行數(shù)據(jù)庫(kù)的遷移,之后讓我們?cè)賮?lái)看一下又有什么新的變化發(fā)生呢?數(shù)據(jù)庫(kù)遷移的兩個(gè)命令分步驟執(zhí)行,

如下所示:

$ python manage.py makemigrations
$ python manage.py migrate

執(zhí)行完畢后會(huì)在命令行得到如下輸出:
Django新手必看:如何創(chuàng)建應(yīng)用和定義數(shù)據(jù)表。(詳細(xì)講解)

Django新手必看:如何創(chuàng)建應(yīng)用和定義數(shù)據(jù)表。(詳細(xì)講解)

若遷移過(guò)程中出現(xiàn)報(bào)錯(cuò)提示,首先檢查您的 models.py 文件是否正確書(shū)寫(xiě),除此之外,也可能由于 Django 與 MySQL 版本問(wèn)題導(dǎo)致報(bào)錯(cuò)。

  • 從上述輸出結(jié)果可以看出,我們對(duì) index 應(yīng)用進(jìn)行了數(shù)據(jù)庫(kù)遷移工作。
  • 并且在數(shù)據(jù)庫(kù)中創(chuàng)建了三張表,分別是 Author、Book、UserInfo。

而且在 index 應(yīng)用下的 migrations 目錄下生還成了一個(gè) 0001_initial.py 的文件:

Django新手必看:如何創(chuàng)建應(yīng)用和定義數(shù)據(jù)表。(詳細(xì)講解)

這個(gè)遷移文件包含了創(chuàng)建數(shù)據(jù)表時(shí)用到的所有信息,這是一個(gè)臨時(shí)的過(guò)度文件。

makemigrationsmigrate 是 Django 中的兩個(gè)命令,用于數(shù)據(jù)庫(kù)遷移和同步模型。

makemigrations 命令會(huì)基于你的 Django應(yīng)用中的模型定義,生成一組遷移文件,這些文件描述如何在數(shù)據(jù)庫(kù)中創(chuàng)建或修改表結(jié)構(gòu)。在執(zhí)行 makemigrations命令時(shí),Django 會(huì)比較當(dāng)前模型定義與最近一次遷移所定義的模型之間的差異,并生成一系列 SQL 命令來(lái)執(zhí)行這些更改。

示例命令:

$ python manage.py makemigrations

migrate 命令用于應(yīng)用遷移,它會(huì)將遷移文件中定義的更改應(yīng)用到數(shù)據(jù)庫(kù)中。執(zhí)行 migrate 命令時(shí),Django會(huì)檢查其中的每個(gè)遷移,執(zhí)行其中定義的 SQL 命令,并將這些更改反映到數(shù)據(jù)庫(kù)模式中。如果執(zhí)行成功,你的 Django應(yīng)用的數(shù)據(jù)模型就和數(shù)據(jù)庫(kù)之間保持同步了。

示例命令:

$ python manage.py migrate

總之,makemigrations 命令會(huì)生成遷移文件,描述如何在數(shù)據(jù)庫(kù)中創(chuàng)建或修改表結(jié)構(gòu),而 migrate命令會(huì)將這些遷移文件應(yīng)用到數(shù)據(jù)庫(kù)中,使數(shù)據(jù)模型保持和數(shù)據(jù)庫(kù)之間的同步。這兩個(gè)命令通常會(huì)在 Django開(kāi)發(fā)過(guò)程中被頻繁使用,需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改,增加和刪除操作。

???????????????感謝贊助?

Django新手必看:如何創(chuàng)建應(yīng)用和定義數(shù)據(jù)表。(詳細(xì)講解)
618,清華社 IT BOOK 多得圖書(shū)活動(dòng)開(kāi)始啦!活動(dòng)時(shí)間為2023年6月7日至6月18日,清華社為您精選多款高分好書(shū),涵蓋了C++、Java、Python、前端、后端、數(shù)據(jù)庫(kù)、算法與機(jī)器學(xué)習(xí)等多個(gè)IT開(kāi)發(fā)領(lǐng)域,適合不同層次的讀者。全場(chǎng)5折,掃碼領(lǐng)券更有優(yōu)惠哦!快來(lái)京東點(diǎn)擊鏈接IT BOOK多得https://pro.m.jd.com/mall/active/3Rho97HkMaGFycLzAWfFdvZdyvRn/index.html文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-479528.html

到了這里,關(guān)于Django新手必看:如何創(chuàng)建應(yīng)用和定義數(shù)據(jù)表。(詳細(xì)講解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包