python Web應(yīng)用程序1 2021-03-02

Django是一個(gè)web框架

在Django中創(chuàng)建項(xiàng)目:

#創(chuàng)建項(xiàng)目 末尾句點(diǎn)讓新項(xiàng)目使用合適的目錄結(jié)構(gòu)

PS C:\Users\hp\Desktop\learning_log> django-admin startproject learning_log .

#dir查看文件信息

PS C:\Users\hp\Desktop\learning_log> dir

? ? 目錄: C:\Users\hp\Desktop\learning_log

Mode? ? ? ? ? ? ? ? LastWriteTime? ? ? ? Length Name? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

----? ? ? ? ? ? ? ? -------------? ? ? ? ------ ----? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

d-----? ? ? ? 2021/3/1? ? 14:11? ? ? ? ? ? ? ? .vscode? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

d-----? ? ? ? 2021/3/1? ? 14:17? ? ? ? ? ? ? ? learning_log? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

-a----? ? ? ? 2021/3/1? ? 14:17? ? ? ? ? ? 690 manage.py? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

PS C:\Users\hp\Desktop\learning_log> dir learning_log

? ? 目錄: C:\Users\hp\Desktop\learning_log\learning_log

Mode? ? ? ? ? ? ? ? LastWriteTime? ? ? ? Length Name

----? ? ? ? ? ? ? ? -------------? ? ? ? ------ ----

-a----? ? ? ? 2021/3/1? ? 14:17? ? ? ? ? ? 417 asgi.py

-a----? ? ? ? 2021/3/1? ? 14:17? ? ? ? ? 3200 settings.py? ? #指定Django如何與系統(tǒng)交互以及如何管理項(xiàng)目

-a----? ? ? ? 2021/3/1? ? 14:17? ? ? ? ? ? 775 urls.py? ? #應(yīng)該創(chuàng)建哪些頁(yè)面來(lái)響應(yīng)瀏覽器請(qǐng)求

-a----? ? ? ? 2021/3/1? ? 14:17? ? ? ? ? ? 417 wsgi.py? ? #幫助Django提供它創(chuàng)建的文件

-a----? ? ? ? 2021/3/1? ? 14:17? ? ? ? ? ? ? 0 __init__.py

創(chuàng)建數(shù)據(jù)庫(kù):

#遷移migrate鳄袍,首次執(zhí)行讓django確保數(shù)據(jù)庫(kù)與項(xiàng)目的當(dāng)前狀態(tài)匹配.使用SQLite中酷师,首次將新建數(shù)據(jù)庫(kù)

PS C:\Users\hp\Desktop\learning_log> python manage.py migrate

Operations to perform:? ? #指出它將準(zhǔn)備好數(shù)據(jù)庫(kù)滔驾,用于存儲(chǔ)執(zhí)行管理和身份驗(yàn)證任務(wù)所需的信息

? Apply all migrations: admin, auth, contenttypes, sessions

Running migrations:

? Applying contenttypes.0001_initial... OK

? Applying auth.0001_initial... OK

? Applying admin.0001_initial... OK

? Applying admin.0002_logentry_remove_auto_add... OK

? Applying admin.0003_logentry_add_action_flag_choices... OK

? Applying contenttypes.0002_remove_content_type_name... OK

? Applying auth.0002_alter_permission_name_max_length... OK

? Applying auth.0003_alter_user_email_max_length... OK

? Applying auth.0004_alter_user_username_opts... OK

? Applying auth.0005_alter_user_last_login_null... OK

? Applying auth.0006_require_contenttypes_0002... OK

? Applying auth.0007_alter_validators_add_error_messages... OK

? Applying auth.0008_alter_user_username_max_length... OK

? Applying auth.0009_alter_user_last_name_max_length... OK

? Applying auth.0010_alter_group_name_max_length... OK

? Applying auth.0011_update_proxy_permissions... OK

? Applying auth.0012_alter_user_first_name_max_length... OK

? Applying sessions.0001_initial... OK


#SQLite是一種使用單個(gè)文件的數(shù)據(jù)庫(kù)旧巾,是編寫簡(jiǎn)單應(yīng)用程序的理想選擇,因?yàn)樗屇悴挥锰P(guān)注數(shù)據(jù)庫(kù)管理的問(wèn)題

PS C:\Users\hp\Desktop\learning_log> dir

? ? 目錄: C:\Users\hp\Desktop\learning_log

Mode? ? ? ? ? ? ? ? LastWriteTime? ? ? ? Length Name

----? ? ? ? ? ? ? ? -------------? ? ? ? ------ ----

d-----? ? ? ? 2021/3/1? ? 14:11? ? ? ? ? ? ? ? .vscode

d-----? ? ? ? 2021/3/1? ? 14:33? ? ? ? ? ? ? ? learning_log

-a----? ? ? ? 2021/3/1? ? 14:33? ? ? ? 131072 db.sqlite3? ? #創(chuàng)建了一個(gè)文件db.sqlite3

-a----? ? ? ? 2021/3/1? ? 14:17? ? ? ? ? ? 690 manage.py


查看項(xiàng)目:

#使用命令runserver查看項(xiàng)目狀態(tài)

PS C:\Users\hp\Desktop\learning_log> python manage.py runserver

Watching for file changes with StatReloader

Performing system checks...

System check identified no issues (0 silenced).? ? #通過(guò)檢查確認(rèn)正確創(chuàng)建了項(xiàng)目

March 01, 2021 - 14:59:15

Django version 3.1.7, using settings 'learning_log.settings'? ? #指出Django的版本以及當(dāng)前使用的設(shè)置文件名稱

Starting development server at http://127.0.0.1:8000/? ? #指出項(xiàng)目的URL 在當(dāng)前系統(tǒng)端口8000上偵聽(tīng)請(qǐng)求

Quit the server with CTRL-BREAK.


瀏覽器中輸入http://localhost:8000/:


一切正常

創(chuàng)建應(yīng)用程序:

PS C:\Users\hp\Desktop\learning_log> python manage.py startapp learning_logs? ? #新建learning_logs

PS C:\Users\hp\Desktop\learning_log> dir learning_logs

? ? 目錄: C:\Users\hp\Desktop\learning_log\learning_logs

Mode? ? ? ? ? ? ? ? LastWriteTime? ? ? ? Length Name

----? ? ? ? ? ? ? ? -------------? ? ? ? ------ ----

d-----? ? ? ? 2021/3/1? ? 15:39? ? ? ? ? ? ? ? migrations

-a----? ? ? ? 2021/3/1? ? 15:39? ? ? ? ? ? 66 admin.py

-a----? ? ? ? 2021/3/1? ? 15:39? ? ? ? ? ? 105 apps.py

-a----? ? ? ? 2021/3/1? ? 15:39? ? ? ? ? ? 60 models.py? ? #定義要在應(yīng)用程序中管理的數(shù)據(jù)

-a----? ? ? ? 2021/3/1? ? 15:39? ? ? ? ? ? 63 tests.py

-a----? ? ? ? 2021/3/1? ? 15:39? ? ? ? ? ? 66 views.py

-a----? ? ? ? 2021/3/1? ? 15:39? ? ? ? ? ? ? 0 __init__.py


定義模型:

#每當(dāng)需要修改"學(xué)習(xí)筆記"管理的數(shù)據(jù)時(shí)颜矿,都采取如下三個(gè)步驟:修改models.py,對(duì)learning_logs調(diào)用makemigrations,以及讓Django遷移項(xiàng)目

①創(chuàng)建/修改models.py

from?django.db?import?models

#?在這里創(chuàng)建模型

class?Topic(models.Model):??#?繼承Model

????'''用戶學(xué)習(xí)的主題'''

????#?text是一個(gè)由CharField--由字符串組成的數(shù)據(jù)召衔,即文本

????#?需要存儲(chǔ)少量文本,如名稱祭陷、標(biāo)題或城市苍凛,預(yù)留200字符的空間

????text?=?models.CharField(max_length=200)

????#?是一個(gè)DateTimeField--記錄日期和時(shí)間的數(shù)據(jù)

????#?auto_now_add=True,每當(dāng)用戶創(chuàng)建新主題時(shí)兵志,Django會(huì)自動(dòng)設(shè)置為當(dāng)前日期和時(shí)間

????date_added?=?models.DateTimeField(auto_now_add=True)

????def?__str__(self):

????????'''返回模型的字符串表示'''

????????#?顯示主題的信息

????????return?self.text


激活模型:


learning_log中settings.py

將INSTALLED_APP修改成:

INSTALLED_APPS?=?[

????'learning_logs',

????#?默認(rèn)添加的應(yīng)用程序

????'django.contrib.admin',

????'django.contrib.auth',

????'django.contrib.contenttypes',

????'django.contrib.sessions',

????'django.contrib.messages',

????'django.contrib.staticfiles',

]

#接下來(lái)讓Django修改數(shù)據(jù)庫(kù)醇蝴,使其能夠存儲(chǔ)于模型Topic相關(guān)信息

②對(duì)learning_logs調(diào)用makemigrations

PS C:\Users\hp\Desktop\learning_log> python manage.py makemigrations learning_logs

Migrations for 'learning_logs':

? learning_logs\migrations\0001_initial.py

? ? - Create model Topic

#命令makemigrations讓Django確定該如何修改數(shù)據(jù)庫(kù),使其能夠存儲(chǔ)與前面定義的新模型相關(guān)聯(lián)的數(shù)據(jù)

#輸出表明Django創(chuàng)建了一個(gè)名為0001_initial.py的遷移文件想罕,這個(gè)文件將在數(shù)據(jù)庫(kù)中為模型Topic創(chuàng)建一個(gè)表

③Django遷移項(xiàng)目

#下面應(yīng)用這種遷移悠栓,讓Django替我們修改數(shù)據(jù)庫(kù)

PS C:\Users\hp\Desktop\1> python manage.py migrate

Operations to perform:

? Apply all migrations: admin, auth, contenttypes, learning_logs, sessions

Running migrations:

? Applying learning_logs.0001_initial... OK? ? #應(yīng)用遷移時(shí)正常



Django管理網(wǎng)站:

1.創(chuàng)建超級(jí)用戶

PS C:\Users\hp\Desktop\learning_log> python manage.py createsuperuser

Username (leave blank to use 'hp'): 11_admin

Email address: 349050532@qq.com

Password:

Password (again):

Error: Your passwords didn't match.

2.向管理網(wǎng)站注冊(cè)模型

#learning_logs中admin.py

from?django.contrib?import?admin

from?.models?import?Topic??#?導(dǎo)入要注冊(cè)的模型Topic

admin.site.register(Topic)??#?讓Django通過(guò)管理網(wǎng)站管理模型


登入網(wǎng)址http://localhost:8000/admin/login/?next=/admin/霉涨,輸入超級(jí)賬號(hào)

超級(jí)賬號(hào)


包含模型Topic的管理網(wǎng)站

3.添加主題


添加主題

定義模型Entry:

多對(duì)一關(guān)系:每個(gè)條目都與特定主題相關(guān)聯(lián),多個(gè)條目可關(guān)聯(lián)到同一個(gè)主題

from?django.db?import?models

#?在這里創(chuàng)建模型

class?Topic(models.Model):??#?繼承Model

????'''用戶學(xué)習(xí)的主題'''

????#?text是一個(gè)由CharField--由字符串組成的數(shù)據(jù)惭适,即文本

????#?需要存儲(chǔ)少量文本笙瑟,如名稱、標(biāo)題或城市癞志,預(yù)留200字符的空間

????text?=?models.CharField(max_length=200)

????#?是一個(gè)DateTimeField--記錄日期和時(shí)間的數(shù)據(jù)

????#?auto_now_add=True往枷,每當(dāng)用戶創(chuàng)建新主題時(shí),Django會(huì)自動(dòng)設(shè)置為當(dāng)前日期和時(shí)間

????date_added?=?models.DateTimeField(auto_now_add=True)

????def?__str__(self):

????????'''返回模型的字符串表示'''

????????#?顯示主題的信息

????????return?self.text

class?Entry(models.Model):

????'''學(xué)習(xí)的有關(guān)某個(gè)主題的具體知識(shí)'''

????#?外鍵凄杯,指向數(shù)據(jù)庫(kù)中的另一臺(tái)記錄错洁,這里將每個(gè)條目關(guān)聯(lián)到特定主題

????#?創(chuàng)建主題時(shí),都分配了一個(gè)鍵(ID)戒突,需要在兩項(xiàng)數(shù)據(jù)之間建立聯(lián)系時(shí)屯碴,使用相關(guān)聯(lián)鍵

????#on_delete=models.CASCADE在刪除主題的同時(shí)?刪除所有與之相關(guān)聯(lián)的條目,級(jí)聯(lián)刪除

????topic?=?models.ForeignKey(Topic,?on_delete=models.CASCADE)

????#字段長(zhǎng)度不受限制

????text?=?models.TextField()

????#按創(chuàng)建順序呈現(xiàn)條目膊存,并在每個(gè)條目旁放置時(shí)間戳

????date_added?=?models.DateTimeField(auto_now_add=True)

????#Meta存儲(chǔ)用于管理模型的額外信息

????class?Meta:

????????#設(shè)置特殊屬性窿锉,讓Django在需要時(shí)使用Entries來(lái)表示多個(gè)條目

????????#如果沒(méi)有這個(gè)類,Django將使用Entrys來(lái)表示多個(gè)條目

????????verbose_name_plural?=?'entries'

????def?__str__(self):

????????'''返回模型的字符串表示'''

????????return?f"{self.text[:50]}..."

遷移模型:

PS C:\Users\hp\Desktop\learning_log> python manage.py makemigrations learning_logs

#生成新的遷移文件膝舅,告訴Django如何修改數(shù)據(jù)庫(kù)嗡载,使其能夠存儲(chǔ)與模型Entry相關(guān)信息

Migrations for 'learning_logs':

? learning_logs\migrations\0002_entry.py? ??

? ? - Create model Entry

PS C:\Users\hp\Desktop\learning_log> python manage.py migrate? ?

Operations to perform:

? Apply all migrations: admin, auth, contenttypes, learning_logs, sessions

Running migrations:

? Applying learning_logs.0002_entry... OK? ? #遷移順利


向管理網(wǎng)站注冊(cè)Entry:

修改admin.py:

from?django.contrib?import?admin

from?.models?import?Topic,?Entry??#?導(dǎo)入要注冊(cè)的模型Topic,Entry

admin.site.register(Topic)??#?讓Django通過(guò)管理網(wǎng)站管理模型

admin.site.register(Entry)



描述


三個(gè)條目

Django shell:

#輸入數(shù)據(jù),通過(guò)交互式終端會(huì)話以編程方式查看這些數(shù)據(jù)

PS C:\Users\hp\Desktop\learning_log> python manage.py shell

Python 3.9.0 (tags/v3.9.0:9cf6752, Oct? 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32

Type "help", "copyright", "credits" or "license" for more information.

(InteractiveConsole)

>>> from learning_logs.models import Topic? ? #導(dǎo)入模塊Topic

>>> Topic.objects.all()? ? #獲取所有實(shí)例仍稀,這將返回一個(gè)查詢集(queryset)的列表

<QuerySet [<Topic: Chess>, <Topic: Rock Climbing>]>


#可以像遍歷列表一樣遍歷查詢集洼滚,查看分配給每個(gè)主題對(duì)象的ID:

>>> from learning_logs.models import Topic

>>> Topic.objects.all()

<QuerySet [<Topic: Chess>, <Topic: Rock Climbing>]>

>>> topics = Topic.objects.all()

>>> for topic in topics:? ? ? ?

...? ? print(topic.id,topic)

...

1 Chess

2 Rock Climbing


#知道主題對(duì)象的ID后,就可使用方法Topic.objects.get()獲取該對(duì)象并查看其屬性

>>> t=Topic.objects.get(id=1)

>>> t.text

'Chess'

>>> t.date_added

datetime.datetime(2021, 3, 1, 8, 54, 20, 684484, tzinfo=<UTC>)


#查看相關(guān)聯(lián)的條目

>>> t.entry_set.all()

<QuerySet [<Entry: Chinese chess is a kind of chess game originated i...>, <Entry: Chess is mainly popular in

Chinese and countries w...>]>

#假如有模型Pizza,Topping.Topping通過(guò)外鍵關(guān)聯(lián)到Pizza技潘,如果有一個(gè)名為my_pizza的Pizza對(duì)象遥巴,就可使用代碼my_pizza.topping_set.all()來(lái)獲取披薩的所有配料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市享幽,隨后出現(xiàn)的幾起案子铲掐,更是在濱河造成了極大的恐慌,老刑警劉巖值桩,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摆霉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡奔坟,警方通過(guò)查閱死者的電腦和手機(jī)携栋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)咳秉,“玉大人婉支,你說(shuō)我怎么就攤上這事±浇ǎ” “怎么了向挖?”我有些...
    開(kāi)封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵蝌以,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我何之,道長(zhǎng)饼灿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任帝美,我火速辦了婚禮,結(jié)果婚禮上晤硕,老公的妹妹穿的比我還像新娘悼潭。我一直安慰自己,他們只是感情好舞箍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布舰褪。 她就那樣靜靜地躺著,像睡著了一般疏橄。 火紅的嫁衣襯著肌膚如雪占拍。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天捎迫,我揣著相機(jī)與錄音晃酒,去河邊找鬼。 笑死窄绒,一個(gè)胖子當(dāng)著我的面吹牛贝次,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彰导,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蛔翅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了位谋?” 一聲冷哼從身側(cè)響起山析,我...
    開(kāi)封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掏父,沒(méi)想到半個(gè)月后笋轨,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赊淑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年翩腐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膏燃。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茂卦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出组哩,到底是詐尸還是另有隱情等龙,我是刑警寧澤处渣,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站蛛砰,受9級(jí)特大地震影響罐栈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泥畅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一荠诬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧位仁,春花似錦柑贞、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至琳疏,卻和暖如春有决,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背空盼。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工书幕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人揽趾。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓按咒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親但骨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子励七,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350