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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論