《Python Web 企業(yè)級項(xiàng)目開發(fā)教程(Django 版)》課后答案_第1頁
《Python Web 企業(yè)級項(xiàng)目開發(fā)教程(Django 版)》課后答案_第2頁
《Python Web 企業(yè)級項(xiàng)目開發(fā)教程(Django 版)》課后答案_第3頁
《Python Web 企業(yè)級項(xiàng)目開發(fā)教程(Django 版)》課后答案_第4頁
《Python Web 企業(yè)級項(xiàng)目開發(fā)教程(Django 版)》課后答案_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Django概述填空題MTV模板視圖視圖virtualenvpiplistdjango-adminstartprojectmysite判斷題×。虛擬環(huán)境管理工具只能管理通過管理工具創(chuàng)建的虛擬環(huán)境?!獭痢C铄e(cuò)誤,用于啟動服務(wù)器的命令為pythonmanage.pyrunserver。√×。配置項(xiàng)DATABASES必須包含一個(gè)默認(rèn)數(shù)據(jù)庫“default”。選擇題BC。A、B兩項(xiàng)都在命令行中操作,只能指定臨時(shí)配置文件。C。應(yīng)用創(chuàng)建后需注冊到配置文件的INSTALLED_APPS中,否則項(xiàng)目無法識別。D編程題Django使用MTV架構(gòu),該架構(gòu)分為模型(Model)、模板(Template)、視圖(View)三部分,其中模型是數(shù)據(jù)操作層,定義數(shù)據(jù)模型,封裝對數(shù)據(jù)庫層的訪問;模板(Template)為表現(xiàn)層,負(fù)責(zé)將頁面呈現(xiàn)給用戶;視圖(View)為業(yè)務(wù)邏輯層,調(diào)用模型和模板,實(shí)現(xiàn)業(yè)務(wù)邏輯。Django應(yīng)用是一個(gè)專門做某件事的網(wǎng)絡(luò)應(yīng)用程序,比如博客、論壇,或者簡單的投票程序;Django項(xiàng)目是一個(gè)網(wǎng)站的配置和應(yīng)用的集合??傮w上,Django遵循各部分松耦合、代碼盡可能精簡、保證Web開發(fā)效率、避免重復(fù)、明確優(yōu)于隱式這些理念。路由系統(tǒng)填空題尖括號路由轉(zhuǎn)換器參數(shù)名to_url()to_path()regexinclude()reverse()判斷題√×√√×選擇題BABBC簡答題Django接收到HTTP請求處理流程為:首先加載項(xiàng)目中的settings.py文件并從該文件中讀取變量ROOT_URLCONF,然后根據(jù)該變量查找對應(yīng)的根URLconf模塊,并讀取該模塊中的URL模式,之后將輸入的URL與URL模式進(jìn)行逐一匹配,最后若匹配成功則調(diào)用對應(yīng)的視圖,否則響應(yīng)錯(cuò)誤視圖。re_path()函數(shù)與path()函數(shù)都定義在urls模塊中功能相同,但若在URL中包含正則表達(dá)式時(shí)使用此函數(shù)。因?yàn)镈jnago中允許不同應(yīng)用中使用相同的URL命名,為了區(qū)分不同URL命名,應(yīng)使用應(yīng)用中的應(yīng)用命名空間進(jìn)行區(qū)分;Django中每一個(gè)URL模式都是一個(gè)實(shí)例,一個(gè)應(yīng)用可以創(chuàng)建多個(gè)實(shí)例,多個(gè)實(shí)例也可以映射到同一個(gè)應(yīng)用,但此時(shí)在視圖中使用命名空間進(jìn)行反向解析會出現(xiàn)URL匹配混淆,此時(shí)需要使用命名空間進(jìn)行區(qū)分。模型填空題定義數(shù)據(jù)字段和行為makemigrationsmigrate遷移文件OneToOneFieldForeignKeyManyToManyFielddb_table判斷題√××××選擇題DCADABC簡答題F對象用于不同字段之間的比較;Q對象用于構(gòu)造復(fù)雜的查詢條件。自定義管理器通常用兩種情況,一是添加額外的管理器方法;二是修改Manager的原始查詢集。Django中可以使用raw()方法和execute()執(zhí)行SQL。raw()方法用于執(zhí)行原始查詢語句,并返回一個(gè)RawQuerySet對象;execute()方法多用于執(zhí)行自定義SQL語句。模板填空題模板模板引擎TEMPLATESDIRSget_template()select_template判斷題√×。select_template()接收一個(gè)模板名稱列表,按順序嘗試加載列表中的模板,返回找到的第一個(gè)模板的Template對象;若未找到模板則拋出異常。√√×。參數(shù)request設(shè)有默認(rèn)值None,非可選參數(shù)。×。若點(diǎn)字符后的元素是一個(gè)方法,這個(gè)方法在調(diào)用時(shí)不帶括號,所以應(yīng)為“{{people.set_name}}”。選擇題B。Django按順序查找模板文件,首先查找Django內(nèi)置引擎配置的兩個(gè),若未找到,查找Jinja2引擎配置的目錄。所以查找的第三項(xiàng)為/home/html/jinja2/story_detail.html。B。get_template()和select_template()返回模塊對象,只有render_to_string()滿足要求。D。模板與Python的變量都有字母、數(shù)字、下劃線組成,但模板變量不能以下劃線開頭。C。當(dāng)遇到點(diǎn)字符時(shí),模板引擎會按字典、屬性或方法、數(shù)字索引的順序?qū)ζ溥M(jìn)行解釋。A。Jinja2中沒有cycle標(biāo)簽,它通過循環(huán)對象的cycle()方法實(shí)現(xiàn)cycle標(biāo)簽的功能,所以在Jinja2模板中,選項(xiàng)A的內(nèi)容應(yīng)寫為{{loop.cycle('odd','even')}}。簡答題Django項(xiàng)目通過模板引擎解釋模板文件,一個(gè)Django項(xiàng)目中可以配置一個(gè)或多個(gè)模板引擎。Django有內(nèi)置的模板引擎,也支持廣泛使用的Python模板引擎Jinja2。若要在Django項(xiàng)目中使用模板,需先在settings.py文件的TEMPLATES選項(xiàng)中配置模板引擎。Django模板中對方法的調(diào)用是隱式的,但Jinja2模板中必須使用括號明確表明調(diào)用的是一個(gè)方法(不能省略括號);Django模板中使用冒號“:”間隔過濾器和過濾器的參數(shù),Jinja2使用括號包含過濾器參數(shù);Jinja2中的循環(huán)變量為loop,Django引擎的循環(huán)變量為forloop;Django模板通過cycle標(biāo)簽實(shí)現(xiàn)循環(huán)計(jì)數(shù),Jinja2中沒有cycle標(biāo)簽,它通過循環(huán)對象的cycle()方法隱式實(shí)現(xiàn)cycle標(biāo)簽的功能。Django模板中對方法的調(diào)用是隱式的,但Jinja2模板中必須使用括號明確表明調(diào)用的是一個(gè)方法。視圖填空題處理請求request上下文字典requestrequest.GET.get(‘carts’)queryset判斷題×。視圖分為函數(shù)視圖和類視圖?!獭4藭r(shí)服務(wù)器收到的POST請求為空,應(yīng)使用“ifrequest.method==“POST””判斷是否使用POST方法?!?。HttpRequest對象的GET與POST屬性都是QueryDict對象,它是一個(gè)類似字典的對象,但不是字典?!踢x擇題AB。與字典不同,若要刪除的字段不存在,del不會拋出KeyError異常。DDC簡答題render()函數(shù)用于簡化“載入模板——填充上下文——生成響應(yīng)消息——返回響應(yīng)對象”這一流程,它結(jié)合給定的模板和上下文字典,返回一個(gè)渲染后的HttpResponse對象。render()、redirect()、get_object_or_404()、get_list_or_404()。類視圖允許在views.py的一個(gè)類中定義不同的類方法去響應(yīng)同一功能以不同請求方式發(fā)送的請求,可避免單個(gè)視圖中使用條件分支代碼處理相同場景時(shí)的臃腫。Django提供了兩種方式來配置類屬性,一種是Python類中定義屬性的標(biāo)準(zhǔn)方法——直接重寫父類的屬性;另一種是在URL中將類屬性配置為as_view()方法的關(guān)鍵字參數(shù)。后臺管理系統(tǒng)——Admin填空題模型添加中間件修改配置項(xiàng)/admin/@admin.register()admin.site.register()控制頁面展示字段判斷題×××√對選擇題BABAC簡答題Django提供了一個(gè)可插拔的后臺管理系統(tǒng)——Admin,該系統(tǒng)可以從模型中讀取元數(shù)據(jù),并提供以模型為中心的界面,通過使用該內(nèi)置系統(tǒng)可以方便快捷的對數(shù)據(jù)進(jìn)行管理。自定義管理員動作分為兩步:首先定義管理員動作函數(shù),該函數(shù)需要有返回值;然后在注冊的模型類中將定義的函數(shù)名添加到actions選項(xiàng)中。表單填空題formFormlabelrequiredEmailFieldis_bound判斷題×。表單類的字段映射為HTML表單域中的控件。×。默認(rèn)表單中的每個(gè)字段都是必需字段,若要將字段指定為非必需字段,required應(yīng)設(shè)置為False。×。當(dāng)disabled屬性的值為True時(shí),字段使用默認(rèn)值且不可編輯,即使用戶篡改提交給服務(wù)器的值以修改該字段,值也會被忽略?!獭獭?。表單實(shí)例中的數(shù)據(jù)無法被更改,若想更改已綁定表單實(shí)例中的數(shù)據(jù),或?qū)⑽唇壎ǖ谋韱螌?shí)例與某些數(shù)據(jù)綁定,應(yīng)創(chuàng)建一個(gè)新的表單實(shí)例。選擇題AD。表單驗(yàn)證完畢后,程序仍能從request.POST中訪問到未驗(yàn)證的數(shù)據(jù)。C。渲染選項(xiàng){{form.as_table}}和{{form.as_ul}}不會生成外層的<table>標(biāo)簽和<ul>標(biāo)簽,使用時(shí)應(yīng)手動提供這兩種標(biāo)簽。A。創(chuàng)建表單集還需要已經(jīng)定義好的表單。簡答題模型實(shí)例若為空,模板對它進(jìn)行的處理沒有意義,但表單實(shí)例為空時(shí),模板需要將其渲染為空表單,以便用戶填充數(shù)據(jù)。文件讀寫位置屬性用于記錄文件當(dāng)前讀寫的位置。選擇字段的方式有兩種:一可以利用內(nèi)部類Meta的fields屬性選擇模型類的部分字段,二可以利用內(nèi)部類Meta的exclude屬性排除表單中不需要的模型類字段。驗(yàn)證模型表單主要涉及兩個(gè)步驟:驗(yàn)證表單。模型表單驗(yàn)證在調(diào)用is_valid()或errors屬性時(shí)隱式觸發(fā),在調(diào)用full_clean()時(shí)顯式觸發(fā)。驗(yàn)證模型實(shí)例(Model.full_clean()),full_clean()在表單的clean()方法之后被調(diào)用。身份驗(yàn)證系統(tǒng)填空題usernamepasswordcreate_superuser()驗(yàn)證用戶Permissionsgroup.permission.add(permission,…)判斷題×√√√√選擇題ABCAC簡答題Django中允許開人員在模型的Meta子類中通過permissions屬性自定義權(quán)限,也可以通過ContentType類創(chuàng)建權(quán)限。在使用ContentType類創(chuàng)建權(quán)限時(shí),首先通過get_for_model()方法獲取要設(shè)置權(quán)限的模型,然后通過Permissions模型中的create()方法設(shè)置權(quán)限。Django限制訪問的方式有request.user.is_authenticated屬性、裝飾器@login_required和LoginRequiredMixin類,其中request.user.is_authenticated屬性為限制用戶最原始的方式,在函數(shù)視圖和類視圖中均可使用;裝飾器@login_required主要用于函數(shù)視圖中;LoginRequiredMixin主要用于類視圖中。自定義用戶模型步驟:首先定義用戶模型類,如User類,然后令User類繼承AbstractUser類;最后在settings.py文件中設(shè)置AUTH_USER_MODEL選項(xiàng),另其指明自定義用戶模型,例如User模型位于users/models.py中,此時(shí)AUTH_USER_MODEL為“users.User”。前期準(zhǔn)備簡答題需求驅(qū)動開發(fā),它是開發(fā)的基石,也是開發(fā)人員的工作目標(biāo),在著手開發(fā)項(xiàng)目之前,明確項(xiàng)目的業(yè)務(wù)流程和主要的業(yè)務(wù)需求非常必要。將項(xiàng)目劃分為多個(gè)模塊降低了項(xiàng)目功能之間的耦合度,既方便對項(xiàng)目進(jìn)行管理,也利于協(xié)同開發(fā)。項(xiàng)目環(huán)境分為開發(fā)環(huán)境和生產(chǎn)環(huán)境,開發(fā)環(huán)境是編寫和調(diào)試項(xiàng)目代碼的環(huán)境,生產(chǎn)環(huán)境是部署項(xiàng)目上線運(yùn)行時(shí)使用的環(huán)境。不同的環(huán)境使用的配置信息不同,為了避免開發(fā)環(huán)境和生產(chǎn)環(huán)境的配置相互干擾,可將它們的配置信息分別存儲在兩個(gè)配置文件中。電商項(xiàng)目——用戶管理與驗(yàn)證簡答題小魚商城的用戶注冊由前端與后端組成。前端在頁面中顯示用戶需填寫的注冊信息,對用戶填寫的注冊信息進(jìn)行初次校驗(yàn);在后端中首先需要對用戶填寫的注冊信息進(jìn)行校驗(yàn),如果不滿足校驗(yàn)規(guī)則則將錯(cuò)誤信息響應(yīng)到前端頁面,若注冊信息均滿足校驗(yàn)規(guī)則則將用戶填寫的注冊添加到數(shù)據(jù)庫中。小魚商城的用戶模型類User中包含了username與mobile字段,其中username字段為父類AbstractUser中的字段,該字段在定義時(shí)指定了唯一性unique為True;mobile字段為模型類User中的字段,該字段在定義時(shí)同樣指定了唯一性unique為True,因此在用戶注冊時(shí)需要對這兩個(gè)字段的重復(fù)性進(jìn)行檢測。多賬號登錄指用戶可使用不同認(rèn)證信息登錄到網(wǎng)站。小魚商城中,允許用戶使用用戶名和手機(jī)號碼登錄,Django框架中默認(rèn)使用用戶名登錄,而手機(jī)號登錄則是對Django框架登錄進(jìn)行擴(kuò)展,需要對auth模塊中backend.authenticate()方法進(jìn)行重寫,使其同時(shí)能根據(jù)用戶名和手機(jī)號獲取用戶對象即可。在用戶表中若通過郵箱驗(yàn)證email_active字段值為1,否則為0。小魚商城在進(jìn)行郵箱驗(yàn)證時(shí),會向用戶填寫的郵箱中發(fā)送包含激活鏈接的郵件,該激活鏈接中包含對用戶身份的驗(yàn)證,如果驗(yàn)證通過則修改用戶表email_active字段的值,否則不進(jìn)行修改即郵箱驗(yàn)證失敗。電商項(xiàng)目——商品與廣告簡答題SKU表示庫存量單位(StockKeepingUnit),它是庫存進(jìn)出計(jì)量的單位,可以是以件、盒等為單位、物理上不可分割的最小存儲單元;SPU表示標(biāo)準(zhǔn)產(chǎn)品單位(StandardProductUnit),它是商品信息聚合的最小單位,是一組可復(fù)用、易檢索的標(biāo)準(zhǔn)化信息的集合,該集合描述了一個(gè)產(chǎn)品的特性。SKU和SPU為一對多關(guān)系。小魚商城的面包屑導(dǎo)航中的類別分為一級、二級和三級類別,其中一級類別包含二級類別,二級類別包含三級類別。三級類別信息存儲在同一張數(shù)據(jù)表中,這張表是一個(gè)自關(guān)聯(lián)表,表中定義了一個(gè)parent字段,用于記錄當(dāng)前類別所屬的上級類別,一級類別的parent字段為None,二級類別的parent記錄一級類別id,三級類別的parent記錄二級類別id。那么當(dāng)一個(gè)類別的parent為None時(shí),它是一級類別;parent不為None,上級類別的parent為None時(shí),它是二級類別;parent和上級類別的parent都不為None時(shí),它是三級類別。MySQL是磁盤型的數(shù)據(jù)庫,它的存取效率很差,不適合存儲數(shù)據(jù)量較小、變動頻繁的數(shù)據(jù);相反Redis存取速度快、可設(shè)置過期時(shí)間,更適合存儲頻繁變動的數(shù)據(jù)。電商項(xiàng)目——購物車用戶未登錄會將購物車數(shù)據(jù)保存在Cookie中,包括sku_id、商品數(shù)量count和勾選狀態(tài)selected,這些信息會以JSON格式展示,為保護(hù)用戶購物車數(shù)據(jù)的隱私性,通過pickle模塊與base64模塊對購物車數(shù)據(jù)序列化。因?yàn)橘徫镘嚁?shù)據(jù)量小、結(jié)構(gòu)簡單、更新頻繁,所以選擇內(nèi)存型數(shù)據(jù)庫Redis。用戶登錄后會將購物車數(shù)據(jù)保存在Redis中。使用Redis保存購物車數(shù)據(jù)時(shí),會將user_id、sku_id和count數(shù)據(jù)以hash類型保存;勾選狀態(tài)selected數(shù)據(jù)以set類型進(jìn)行保存。合并購物車是將Cookie中的購物車數(shù)據(jù)合并到Redis購物車數(shù)據(jù)。在用戶登錄時(shí),會檢測Cookie中是否包含購物車數(shù)據(jù),若包含購物車數(shù)據(jù)會將這些數(shù)據(jù)以增量的形式合并到Redis數(shù)據(jù)庫中。電商項(xiàng)目——訂單與結(jié)算填空題decimal、int、decimal訂單提交這一功能涉及到數(shù)據(jù)庫中多張表(OrderInfo、OrderGoods、SKU、SPU)的修改,而這些數(shù)據(jù)的修改應(yīng)當(dāng)同步修改,若修改不能一起成功,便應(yīng)當(dāng)一起失敗,因此放在一個(gè)事務(wù)中。MySQL支持悲觀鎖和樂觀鎖兩種鎖,其中悲觀鎖會在查詢某條記錄時(shí)便給數(shù)據(jù)加鎖,防止別人修改數(shù)據(jù);樂觀鎖(雖然叫“鎖”,但本質(zhì)只是條件判斷)在更新時(shí)判斷

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論