中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

PythonDjango的模型建立與操作方法是什么

本文小編為大家詳細(xì)介紹“Python Django的模型建立與操作方法是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Python Django的模型建立與操作方法是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供商州企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為商州眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

模型的建立

我們要建立一個(gè)博客系統(tǒng),首先先在 manage.py 所在目錄下,用命令 python manage.py startapp blog 新建一個(gè) blog 應(yīng)用,然后在 ./blog/models.py 中寫一個(gè)類,命名為 BlogArticles。

通過這個(gè)類我們可以創(chuàng)建一個(gè)專門用來保存博客文章的數(shù)據(jù)庫表,代碼如下:

from django.db import modelsfrom django.utils import timezone   # 新增from django.contrib.auth.models import User    # 新增# Create your models here.# 編寫博客的數(shù)據(jù)類型類BlogArticlesclass BlogArticles(models.Model):    # 字段title的屬性為CharField()類型,并且以參數(shù)max_length=300說明字段的最大數(shù)量
    title = models.CharField(max_length=300)    # 一個(gè)用戶對應(yīng)多篇文章,級聯(lián)刪除
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="blog_posts")
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)    class Meta:
        ordering = ("-publish", )   # 規(guī)定了BlogArticles實(shí)例對象的顯示順序,即按照publish字段值的倒序顯示

    def __str__(self):        return self.title

  • timezone 模塊,我們未來記錄文章發(fā)布時(shí)間,所以導(dǎo)入了這個(gè)模塊。但因?yàn)?Django 默認(rèn)開啟時(shí)區(qū)且為 UTC,所以需要在 settings 中進(jìn)行如下設(shè)置:

TIME_ZONE = 'Asia/Shanghai'     # 設(shè)置東八區(qū)時(shí)間# TIME_ZONE = 'UTC'USE_TZ = False

  • User 模型被命名為內(nèi)置應(yīng)用叫 auth,它以命名空間 django.contrib.auth 的形式出現(xiàn)在 INSTALL_APPS 配置中

  • ForeignKey() 反映出一個(gè)用戶可以發(fā)表多篇文章,其中參數(shù) on_delete=models.CASCADE 是數(shù)據(jù)庫中的“級聯(lián)刪除”,如果“用戶表”中的某個(gè)用戶被刪除,那么“文章表”中該用戶對應(yīng)的文章記錄也將被刪除。

  • 另一個(gè)參數(shù) related_name="blog_posts" 的作用是允許 User 的實(shí)例(某個(gè)用戶名)以 “blog_posts” 屬性反向查詢到類 BlogArticles 的實(shí)例。

  • 我們還定義了 Meta 子類,使用了 ordering = ("-publish", ) 規(guī)定文章的顯示順序

  • __str__ 方法是對象的字符串表示形式。我們可以使用版塊的名稱來表示它。

以上步驟我們還是僅僅在我們創(chuàng)建 blog 應(yīng)用中寫了一個(gè)博客文章模型,如果想要讓應(yīng)用生效,我們還需要將應(yīng)用配置到我們的 settings 當(dāng)中去,在 settings.py 文件的 INSTALLED_APPS 列表中添加 blog 應(yīng)用,如下所示:

Python Django的模型建立與操作方法是什么

BlogArticles 類的數(shù)據(jù)模型編寫完畢,我們得數(shù)據(jù)庫表就是通過這個(gè)類中各字段和屬性創(chuàng)建完成。

數(shù)據(jù)遷移

下一步就是告訴 Django,我的模型類創(chuàng)建好了,該到你創(chuàng)建數(shù)據(jù)庫了,我們打開終端,轉(zhuǎn)到 manage.py 文件所在的文件夾,然后運(yùn)行一下命令:

python manage.py makemigrations

然后你將看到如下輸出內(nèi)容:

Migrations for 'blog':
  blog/migrations/0001_initial.py
    - Create model BlogArticles

此時(shí),Django 在 /blog/migrations 目錄中創(chuàng)建了一個(gè)名為 0001_initial.py 的文件。它代表了應(yīng)用程序模型的當(dāng)前狀態(tài),在下一步,將使用該文件創(chuàng)建表和列。

遷移文件將被翻譯成 SQL 語句。執(zhí)行下面命令:

 python manage.py sqlmigrate blog 0001

然后可以看到如下輸出內(nèi)容:

BEGIN;
--
-- Create model BlogArticles
--
CREATE TABLE "blog_blogarticles" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(300) NOT NULL, "body" text NOT NULL, "publish" datetime NOT NULL, "author_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE INDEX "blog_blogarticles_author_id_ed798e23" ON "blog_blogarticles" ("author_id");
COMMIT;

最后我們將生產(chǎn)的遷移文件應(yīng)用到數(shù)據(jù)庫中:

 python manage.py migrate

當(dāng)看到

Operations to perform:
  Apply all migrations: admin, auth, blog, contenttypes, sessions
Running migrations:
...
Applying sessions.001_initial... OK

Applying sessions.001_initial... OK,這是我們在上一步生產(chǎn)的遷移腳本。意味著,我們的數(shù)據(jù)庫已經(jīng)可以開始使用了。

Django 自帶一個(gè)數(shù)據(jù)庫 SQLite,需要注意的是 SQLite 是一個(gè)產(chǎn)品級數(shù)據(jù)庫。SQLite 被許多公司用于成千上萬的產(chǎn)品,如所有 Android 和 iOS 設(shè)備,主流的 Web 瀏覽器,Windows 10,MacOS 等。 但這不適合所有情況。SQLite 不能與 MySQL,PostgreSQL 或 Oracle 等數(shù)據(jù)庫進(jìn)行比較。大容量的網(wǎng)站,密集型寫入的應(yīng)用程序,大的數(shù)據(jù)集,高并發(fā)性的應(yīng)用使用 SQLite 最終都會(huì)導(dǎo)致問題。

SQLite 很輕量級,但是并不影響我們用來學(xué)習(xí),接下來我們將利用命令行工具來對模型進(jìn)行操作,也就是我們學(xué)習(xí)過數(shù)據(jù)庫的基本操作——增、刪、改、查。

模型操作

上面的內(nèi)容中建立了一個(gè)博客文章的模型,然后通過數(shù)據(jù)遷移建立我們對應(yīng)中的數(shù)據(jù)庫表,加下來基于上述模型進(jìn)行一些增刪改成的操作,這小部分內(nèi)容可能需要大家對數(shù)據(jù)庫操作有一點(diǎn)熟悉。相信大家都是抱著學(xué)習(xí) Django 的目的來看這一套入門筆記,我就不敢再各位數(shù)據(jù)庫大佬們面前班門弄斧了,直接進(jìn)入本章學(xué)習(xí)了。

SQLite 的啟動(dòng)

對數(shù)據(jù)庫的操作可以利用 GUI 工具,也可以通過命令行 sqlite3  db.sqlite3,我們在 db.sqlite3 所在的目錄下使用上述命令,就可以進(jìn)入到 db.sqlite3 數(shù)據(jù)庫,如果本地開發(fā)中沒有配置 SQLite 環(huán)境,可以自行搜索如何配置。

如果我們輸入命令,看到如下信息,說明進(jìn)入成功:

 ~/DjangoProject/myblog $ sqlite3 db.sqlite3
SQLite version 3.29.0 2019-07-10 17:32:03
Enter ".help" for usage hints.
sqlite>

然后我們使用 .tables 即可查看當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)庫表的名稱,除了 blog_blogarticles 是我們通過 BlogArticles 模型建立的,其余的都是項(xiàng)目默認(rèn)創(chuàng)建的數(shù)據(jù)庫表。

 ~/DjangoProject/myblog $ sqlite3 db.sqlite3
SQLite version 3.29.0 2019-07-10 17:32:03
Enter ".help" for usage hints.
sqlite> .tables
auth_group                  blog_blogarticles         
auth_group_permissions      django_admin_log          
auth_permission             django_content_type       
auth_user                   django_migrations         
auth_user_groups            django_session            
auth_user_user_permissions
sqlite>

接下來使用 pragma table_info(blog_blogarticles); 命令來查看 blog_blogarticles 表的結(jié)構(gòu):

sqlite> .header on
sqlite> pragma table_info(blog_blogarticles);
cid|name     |type        |notnull|dflt_value|pk
  0|  id     |integer     |1      |          |1
  1|title    |varchar(300)|1      |          |0
  2|body     |text        |1      |          |0
  3|publish  |datetime    |1      |          |0
  4|author_id|integer     |1      |          |0
sqlite>

.header on 開啟頭部顯示

SQLite 的 PRAGMA 命令是一個(gè)特殊的命令,可以用在 SQLite 環(huán)境內(nèi)控制各種環(huán)境變量和狀態(tài)標(biāo)志。一個(gè) PRAGMA 值可以被讀取,也可以根據(jù)需求進(jìn)行設(shè)置。

我們可以大致查看上面的表結(jié)構(gòu),cid 是指列 id,name 是指列名,type 是指列類型,notnull 非空,值為 1 表示 True,dflt_value 是指 default 默認(rèn)值(這一列沒有值,說明設(shè)置設(shè)置默認(rèn)值),pk 是指 primary_key 主鍵。

大家可以跟我們在前一章中的數(shù)據(jù)模型 BlogArticles 所規(guī)定的字段和屬性進(jìn)行對比,是不是剛好我們利用數(shù)據(jù)遷移成功將數(shù)據(jù)模型轉(zhuǎn)化為數(shù)據(jù)庫表。

創(chuàng)建超級管理員

我們可以在命令行中輸入 python manage.py createsuperuser 創(chuàng)建一個(gè) Django 超級管理員,輸入用戶名和密碼,當(dāng)提示 Superuser created successfully,創(chuàng)建成功。如下:

 ~/DjangoProject/myblog $ python manage.py createsuperuser 
Username (leave blank to use 'yuzhou_1su'): zoeu
Email address: test@test.com
Password: 
Password (again): 
Superuser created successfully.

然后我在瀏覽器輸入 http://127.0.0.1:8000/admin/ ,就可以打開如下界面:

Python Django的模型建立與操作方法是什么

輸入剛才創(chuàng)建的超級管理員的用戶名和密碼就可以進(jìn)入系統(tǒng),如圖:

Python Django的模型建立與操作方法是什么

Groups 和 Users 是 Django 在用戶管理應(yīng)用中默認(rèn)的用戶分類。為了讓我們得管理員用戶能夠發(fā)布博客,我們需要在 ./blog/admin.py 文件中,加入如下代碼:

from django.contrib import admin# 新增,將BlogArticles類引入到當(dāng)前環(huán)境中from .models import BlogArticles    

# 將BlogArticles注冊到admin中admin.site.register(BlogArticles)

刷新頁面,我們可以得到如下的頁面:

Python Django的模型建立與操作方法是什么

超級管理員界面先放在這,我們回到模型操作。

模型 API 測試

使用 Python 進(jìn)行開發(fā)的一個(gè)重要優(yōu)點(diǎn)是交互式 shell。我們在 ./blog/models.py 中創(chuàng)建了數(shù)據(jù)模型后,Django 就會(huì)自動(dòng)提供數(shù)據(jù)庫抽象的 API,這是一種快速嘗試和試驗(yàn) API 的方法。通過這個(gè) API 我們可以快速創(chuàng)建、獲取、修改和刪除對象,對此我們稱之為 ORM(Object-Relational Mapper)

我們可以使用 manage.py 工具加載我們的項(xiàng)目來啟動(dòng) Python shell :

python3 manage.py shell
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 16:52:21) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

請?zhí)貏e注意我們進(jìn)入 shell 的方式,不是直接在命令行中敲 python3,雖然這與直接輸入 python 指令來調(diào)用交互式控制臺是非常相似。

區(qū)別是我們利用 manage.py 工具,將項(xiàng)目將被添加到 sys.path 并加載 Django。這意味著我們可以在項(xiàng)目中導(dǎo)入我們的模型和其他資源并使用它。

讓我們從導(dǎo)入 BlogArticles 類開始:下面就可以開始我們對數(shù)據(jù)庫的增、刪、改、查等操作。

$ python3 manage.py shell  
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 16:52:21) 
[Clang 6.0 (clang-600.0.57)] on darwinType "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)>>> from django.contrib.auth.models import User>>> from blog.models import BlogArticles>>> admin = User.objects.get(username="zoue")>>> admin.username'zoeu'>>> admin.id1>>> admin.password'pbkdf2_sha256$150000$b9j0ZKBVZSo1$l+fEIiKIaS6u1mhjMPOX1qR0xMOaemnRJIwiE2lNn60='>>> admin.email'test@test.com'>>> type(admin)
<class 'django.contrib.auth.models.User'>

接下來,要?jiǎng)?chuàng)建新的 BlogArticle 對象,我們可以執(zhí)行以下操作:

>>> BlogAriticle01 = BlogArticles(title ='DjangoNotes_Day01', author=zoue, body='Django是啥?');

為了將這個(gè)對象保存在數(shù)據(jù)庫中,我們必須調(diào)用 save 方法:

>>> BlogAriticle01.save()

save方法用于創(chuàng)建和更新對象。這里Django創(chuàng)建了一個(gè)新對象,因?yàn)檫@時(shí) BlogAriticle01 實(shí)例沒有 id。第一次保存后,Django 會(huì)自動(dòng)設(shè)置 ID :

>>> BlogAriticle01.id4

因?yàn)槲易约涸谥皠?chuàng)建過其它文章,所以這個(gè) id 值為 4,如果你是按照本入門筆記一步步操作過來,id 值應(yīng)該為 1。

當(dāng)然,還可以查看其它屬性,這里統(tǒng)一將命令敲出來:

>>> BlogAriticle01.title'DjangoNotes_Day01'>>> BlogAriticle01.author
<User: admin>>>> BlogAriticle01.body'Django是啥?'>>> BlogAriticle01.publish
datetime.datetime(2019, 9, 30, 19, 56, 58, 735676)>>>

每個(gè) Django 模型都帶有一個(gè)特殊的屬性; 我們稱之為模型管理器(Model Manager)。你可以通過屬性 objects 來訪問這個(gè)管理器,它主要用于數(shù)據(jù)庫操作。例如,我們可以使用它來直接創(chuàng)建一個(gè)新的 Board 對象:

>>> BlogArticle02 = BlogArticles.objects.create(title='Python', author=admin, body='Head First to Python.')>>> BlogArticle02.id5

要更新一個(gè)值,我們可以利用如下操作:

>>> BlogAriticle01.body = 'I love Django, 但是我太難了'>>> BlogAriticle01.body'I love Django, 但是我太難了'

>>> blogs = BlogArticles.objects.all()>>> blogs
<QuerySet [<BlogArticles: Python>, <BlogArticles: DjangoNotes_Day01>, <BlogArticles: right here waiting>, <BlogArticles: Yesterday once more>, <BlogArticles: You Raise me up>]>

結(jié)果是一個(gè) QuerySet,我們可以將這個(gè) QuerySet 看作一個(gè)列表。假設(shè)我們想遍歷它并打印每個(gè)模塊的標(biāo)題。

>>> for blog in blogs:...     print(blog.title)... Python
DjangoNotes_Day01
right here waiting
Yesterday once more
You Raise me up>>>

同樣,我們可以使用模型的 管理器(Manager) 來查詢數(shù)據(jù)庫并返回單個(gè)對象。為此,我們要使用 get 方法:

>>> BlogArticles.objects.get(id=5)
<BlogArticles: Python>

>>> BlogArticles.objects.get(id=5).delete() 
(1, {'blog.BlogArticles': 1})

刪除后再重新查看一下 QuerySet,發(fā)現(xiàn)沒有了<BlogArticles: Python>,說明刪除成功。

>>> blogs = BlogArticles.objects.all()>>> blogs
<QuerySet [<BlogArticles: DjangoNotes_Day01>, <BlogArticles: right here waiting>, <BlogArticles: Yesterday once more>, <BlogArticles: You Raise me up>]>

除了 get 方法,其實(shí)也可以用 filter 進(jìn)行篩選查詢 id=5 然后刪除,BlogArticles.objects.filter(id=5).delete()。

讀到這里,這篇“Python Django的模型建立與操作方法是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁題目:PythonDjango的模型建立與操作方法是什么
鏈接地址:http://www.rwnh.cn/article46/gpoghg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、云服務(wù)器面包屑導(dǎo)航、網(wǎng)站策劃、App開發(fā)外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
开封县| 金沙县| 洛南县| 凤凰县| 丹凤县| 萨嘎县| 永平县| 丰顺县| 和静县| 陆川县| 弥渡县| 泗水县| 垦利县| 花莲县| 唐海县| 民勤县| 曲周县| 隆回县| 二手房| 冀州市| 申扎县| 新余市| 隆尧县| 镇远县| 德阳市| 乳山市| 宁蒗| 宿迁市| 莱州市| 拜城县| 寻甸| 关岭| 南陵县| 肥东县| 泸西县| 雅安市| 田东县| 宁陕县| 梨树县| 吴江市| 石狮市|