2025年P(guān)ython框架應(yīng)用與開(kāi)發(fā)模擬試卷_第1頁(yè)
2025年P(guān)ython框架應(yīng)用與開(kāi)發(fā)模擬試卷_第2頁(yè)
2025年P(guān)ython框架應(yīng)用與開(kāi)發(fā)模擬試卷_第3頁(yè)
2025年P(guān)ython框架應(yīng)用與開(kāi)發(fā)模擬試卷_第4頁(yè)
2025年P(guān)ython框架應(yīng)用與開(kāi)發(fā)模擬試卷_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2025年P(guān)ython框架應(yīng)用與開(kāi)發(fā)模擬試卷考試時(shí)間:______分鐘總分:______分姓名:______一、選擇題(每題2分,共20分)1.在Django框架中,用于處理用戶認(rèn)證相關(guān)的視圖通常位于哪個(gè)應(yīng)用模塊?A.`django.contrib.admin`B.`django.contrib.auth`C.`django.contrib.sessions`D.`django.contrib.messages`2.下列哪個(gè)庫(kù)是Python中最常用的ORM(對(duì)象關(guān)系映射)工具之一,常與Django框架配合使用?A.Flask-SQLAlchemyB.SQLAlchemyC.DjangoRestFrameworkD.PyMySQL3.在Flask應(yīng)用中,如果想要將一個(gè)視圖函數(shù)映射到多個(gè)URL上,應(yīng)該使用?A.路由組(RouterGroup)B.藍(lán)圖(Blueprint)C.視圖包裝器(ViewDecorator)D.路由別名(RouteAlias)4.以下哪個(gè)PythonWeb框架通常被認(rèn)為是“微框架”(Microframework)?A.DjangoB.PyramidC.FlaskD.Tornado5.在Web應(yīng)用開(kāi)發(fā)中,用于緩存頁(yè)面片段或整個(gè)響應(yīng)以提升性能的技術(shù)通常稱為?A.會(huì)話管理(SessionManagement)B.負(fù)載均衡(LoadBalancing)C.數(shù)據(jù)校驗(yàn)(DataValidation)D.緩存(Caching)6.如果一個(gè)Django模型的字段定義為`CharField(max_length=100)`,則向該字段賦值時(shí),如果傳入的字符串長(zhǎng)度為150,Django會(huì)如何處理?A.拋出`ValueError`B.自動(dòng)截?cái)酁榍?00個(gè)字符保存C.自動(dòng)將字符串轉(zhuǎn)換為小寫(xiě)保存D.保存失敗并返回錯(cuò)誤信息7.在Flask中,獲取HTTP請(qǐng)求體中的JSON數(shù)據(jù)的推薦方式是使用?A.`request.form['data']`B.`request.get_json()`C.`request.data['data']`D.`request.body['data']`8.下列哪個(gè)概念描述了將應(yīng)用程序的業(yè)務(wù)邏輯、表示層和控制層分離的設(shè)計(jì)模式?A.MVT(Model-View-Template)B.MVC(Model-View-Controller)C.MVVM(Model-View-ViewModel)D.ORM(Object-RelationalMapping)9.在進(jìn)行Web應(yīng)用安全防護(hù)時(shí),為了防止跨站請(qǐng)求偽造(CSRF)攻擊,Django和Flask等框架通常推薦使用什么方法?A.使用HTTPS協(xié)議B.對(duì)所有POST請(qǐng)求進(jìn)行驗(yàn)證C.在表單中包含一個(gè)獨(dú)特的、隨每次請(qǐng)求變化的令牌(Token)D.對(duì)用戶密碼進(jìn)行加鹽哈希存儲(chǔ)10.對(duì)于需要處理大量并發(fā)請(qǐng)求的Web應(yīng)用,選擇使用哪個(gè)PythonWeb框架可能更合適?A.Django(基于CPython)B.Flask(基于CPython)C.FastAPI(基于Starlette,支持異步)D.Tornado(基于異步I/O)二、填空題(每空1分,共15分)1.Django框架遵循的著名設(shè)計(jì)模式是__________。2.Flask應(yīng)用中,用于注冊(cè)路由并創(chuàng)建應(yīng)用程序?qū)嵗某S煤瘮?shù)是__________。3.SQLAlchemy中,定義表單驗(yàn)證邏輯的函數(shù)通常是__________。4.在Django模板中,用于顯示變量?jī)?nèi)容的語(yǔ)法是__________。5.Flask中,用于處理請(qǐng)求數(shù)據(jù)的類(lèi)是__________。6.Python中,用于表示“不等于”的邏輯運(yùn)算符是__________。7.在進(jìn)行單元測(cè)試時(shí),Django的測(cè)試框架通常建議從`django.test.TestCase`類(lèi)繼承,而Flask則推薦使用__________模塊。8.Web應(yīng)用中,用于區(qū)分不同用戶會(huì)話狀態(tài)的數(shù)據(jù)存儲(chǔ)機(jī)制稱為_(kāi)_________。9.如果一個(gè)Django視圖函數(shù)需要處理GET和POST請(qǐng)求,通常會(huì)檢查`request.method`的值是否為_(kāi)_________或__________。10.Python中的`assert`語(yǔ)句常用于在單元測(cè)試中檢查代碼執(zhí)行結(jié)果的__________。三、簡(jiǎn)答題(每題5分,共20分)1.簡(jiǎn)述Django中的“模型-視圖-模板”(MVT)模式中,模型(Model)、視圖(View)和模板(Template)各自的主要職責(zé)是什么?2.解釋什么是“ORM”(對(duì)象關(guān)系映射)?它為Web開(kāi)發(fā)帶來(lái)了哪些主要優(yōu)勢(shì)?3.在Flask應(yīng)用中,什么是“藍(lán)圖”(Blueprint)?使用藍(lán)圖有什么好處?4.Web開(kāi)發(fā)中常見(jiàn)的“CSRF”(跨站請(qǐng)求偽造)攻擊是什么?開(kāi)發(fā)者應(yīng)如何防范此類(lèi)攻擊?四、閱讀理解題(10分)閱讀以下使用Flask和SQLAlchemy編寫(xiě)的代碼片段,回答問(wèn)題:```pythonfromflaskimportFlask,request,jsonifyfromflask_sqlalchemyimportSQLAlchemyapp=Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///example.db'app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=Falsedb=SQLAlchemy(app)classUser(db.Model):id=db.Column(db.Integer,primary_key=True)username=db.Column(db.String(80),unique=True,nullable=False)email=db.Column(db.String(120),unique=True,nullable=False)@app.route('/users',methods=['POST'])defcreate_user():data=request.get_json()username=data.get('username')email=data.get('email')ifnotusernameornotemail:returnjsonify({"error":"Usernameandemailarerequired"}),400new_user=User(username=username,email=email)db.session.add(new_user)mit()returnjsonify({"message":"Usercreatedsuccessfully","user_id":new_user.id}),201@app.route('/users/<int:user_id>',methods=['GET'])defget_user(user_id):user=User.query.get(user_id)ifnotuser:returnjsonify({"error":"Usernotfound"}),404returnjsonify({"username":user.username,"email":user.email})#...更多路由...```請(qǐng)回答:1.該Flask應(yīng)用創(chuàng)建了哪個(gè)數(shù)據(jù)庫(kù)模型?該模型包含哪些字段?2.`/users`路由處理什么類(lèi)型的HTTP請(qǐng)求?它期望接收什么樣的請(qǐng)求體數(shù)據(jù)?如果請(qǐng)求體數(shù)據(jù)不符合要求,會(huì)返回什么響應(yīng)?3.`/users/<int:user_id>`路由處理什么類(lèi)型的HTTP請(qǐng)求?當(dāng)訪問(wèn)一個(gè)不存在的用戶ID時(shí),會(huì)返回什么狀態(tài)碼和錯(cuò)誤信息?五、編程題(25分)請(qǐng)使用Django框架(假設(shè)你已經(jīng)創(chuàng)建了一個(gè)名為`myproject`的Django項(xiàng)目和一個(gè)名為`myapp`的Django應(yīng)用)完成以下功能模塊的設(shè)計(jì)與實(shí)現(xiàn):1.模型設(shè)計(jì):在`myapp`中定義一個(gè)名為`Article`的模型,包含以下字段:*`title`(CharField,最大長(zhǎng)度200,標(biāo)題)*`content`(TextField,內(nèi)容)*`created_at`(DateTimeField,創(chuàng)建時(shí)間,自動(dòng)生成當(dāng)前時(shí)間)*`updated_at`(DateTimeField,更新時(shí)間,自動(dòng)更新為當(dāng)前時(shí)間)*`author`(ForeignKey,關(guān)聯(lián)到自定義的`User`模型,即`django.contrib.auth.User`)2.視圖實(shí)現(xiàn):實(shí)現(xiàn)`Article`模型的兩個(gè)視圖:*`list_articles`:用于展示所有`Article`對(duì)象的列表(按`created_at`降序排列)。每篇文章顯示標(biāo)題和作者。*`view_article`:用于展示指定`Article`對(duì)象的詳細(xì)信息(標(biāo)題、內(nèi)容、作者、創(chuàng)建時(shí)間、更新時(shí)間)。3.URL配置:在`myapp`的`urls.py`中配置以下URL模式:*`/articles/`對(duì)應(yīng)`list_articles`視圖。*`/articles/<int:article_id>/`對(duì)應(yīng)`view_article`視圖。4.模板:創(chuàng)建必要的Django模板文件(至少包含`list_articles.html`和`view_article.html`)。*`list_articles.html`:循環(huán)渲染每篇文章的標(biāo)題和作者,并提供查看詳情的鏈接。*`view_article.html`:顯示文章的所有詳細(xì)信息。注意:你需要提供相關(guān)的模型代碼、視圖函數(shù)(包括必要的URL導(dǎo)入)、URL配置代碼以及部分模板代碼(使用Django模板標(biāo)簽)。不需要實(shí)現(xiàn)用戶認(rèn)證、表單提交或數(shù)據(jù)庫(kù)遷移的完整流程,但視圖函數(shù)中應(yīng)有基本的模型查詢邏輯。六、調(diào)試題(10分)```pythonfromflaskimportFlask,gfromflask_sqlalchemyimportSQLAlchemyapp=Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///test.db'db=SQLAlchemy(app)classUser(db.Model):id=db.Column(db.Integer,primary_key=True)username=db.Column(db.String(80),unique=True,nullable=False)@app.before_requestdefbefore_request_func():user_id=request.args.get('user_id')ifuser_id:g.user=User.query.filter_by(id=user_id).only()#錯(cuò)誤1else:g.user=None@app.route('/profile')defuser_profile():ifg.userisNone:return"Usernotfound",404#錯(cuò)誤2user_name=g.user.username()returnf"Hello,{user_name}!"#...更多路由...```請(qǐng)指出代碼中的錯(cuò)誤并說(shuō)明原因,然后提供修正后的代碼片段。試卷答案一、選擇題1.B解析:`django.contrib.auth`包含處理用戶認(rèn)證、登錄、注銷(xiāo)等功能的視圖和表單。2.B解析:SQLAlchemy是一個(gè)獨(dú)立的、強(qiáng)大的ORM工具,雖然Django內(nèi)置了ORM,但SQLAlchemy更通用,常被其他框架或獨(dú)立項(xiàng)目使用。3.B解析:藍(lán)圖(Blueprint)允許開(kāi)發(fā)者將一組相關(guān)的路由和視圖組織在一起,稍后可以將其注冊(cè)到主應(yīng)用程序中。4.C解析:Flask是一個(gè)輕量級(jí)的“微框架”,提供了Web開(kāi)發(fā)所需的基本功能,但需要開(kāi)發(fā)者自行添加更多組件(如ORM、表單驗(yàn)證等)。5.D解析:緩存是存儲(chǔ)臨時(shí)數(shù)據(jù)以加速后續(xù)請(qǐng)求的技術(shù),通過(guò)減少對(duì)數(shù)據(jù)庫(kù)或其他慢速資源的訪問(wèn)來(lái)提升性能。6.A解析:Django的模型字段會(huì)進(jìn)行驗(yàn)證,如果數(shù)據(jù)不符合字段約束(如長(zhǎng)度),會(huì)拋出`ValueError`。7.B解析:`request.get_json()`是Flask推薦的方法,用于解析JSON格式的請(qǐng)求體。8.B解析:MVC模式將應(yīng)用程序分為模型(數(shù)據(jù))、視圖(用戶界面)和控制器(處理邏輯),有助于代碼分離和維護(hù)。MVT是Django為適應(yīng)Web模式對(duì)MVC的調(diào)整。9.C解析:CSRF攻擊利用用戶已認(rèn)證的狀態(tài)發(fā)起惡意請(qǐng)求。CSRF令牌(Token)機(jī)制要求每個(gè)狀態(tài)改變請(qǐng)求必須攜帶一個(gè)瀏覽器端生成的、服務(wù)器端驗(yàn)證有效的令牌,以確認(rèn)請(qǐng)求的來(lái)源合法性。10.C解析:FastAPI基于Starlette,原生支持異步編程(async/await),能更好地處理大量并發(fā)請(qǐng)求。Tornado也可處理高并發(fā),但FastAPI更現(xiàn)代且易于使用。Django(基于CPython)和Flask(基于CPython)是同步框架,處理并發(fā)能力相對(duì)較弱。二、填空題1.Model-View-Template解析:Django的設(shè)計(jì)哲學(xué)遵循MVT模式,將應(yīng)用分為數(shù)據(jù)模型(Model)、視圖邏輯(View)和模板渲染(Template)。2.Flask(__name__)解析:這是創(chuàng)建Flask應(yīng)用實(shí)例的標(biāo)準(zhǔn)方式,`__name__`參數(shù)幫助Flask確定資源(如模板、靜態(tài)文件)的相對(duì)路徑。3.validates()解析:雖然Django表單驗(yàn)證更常用`Form`類(lèi)的`is_valid()`方法,但在某些ORM場(chǎng)景或自定義驗(yàn)證中,可能會(huì)直接使用SQLAlchemy的`validates()`裝飾器或類(lèi)似機(jī)制。4.{{variable}}解析:這是Django模板語(yǔ)言中用于輸出變量值的語(yǔ)法。5.request解析:Flask的`request`對(duì)象包含了所有傳入請(qǐng)求的信息,如數(shù)據(jù)、參數(shù)、頭等。6.!=解析:`!=`是Python中用于判斷兩個(gè)值是否不等于的邏輯運(yùn)算符。7.unittest解析:`unittest`是Python官方的單元測(cè)試框架,Django的`django.test.TestCase`是基于`unittest`擴(kuò)展的,提供了更多Django特定測(cè)試功能。Flask推薦使用`flask.untest`模塊(注意:`flask.test`是Flask自身測(cè)試相關(guān)的工具集,單元測(cè)試通常用`unittest`)。8.Session解析:會(huì)話(Session)機(jī)制用于在服務(wù)器端存儲(chǔ)用戶特定的數(shù)據(jù),以便在多個(gè)請(qǐng)求之間保持狀態(tài)。9.GET,POST解析:Web表單通常通過(guò)GET請(qǐng)求獲取數(shù)據(jù)(通常顯示在URL中)或通過(guò)POST請(qǐng)求提交數(shù)據(jù)(數(shù)據(jù)在請(qǐng)求體中)。視圖函數(shù)需要根據(jù)`request.method`判斷處理哪種請(qǐng)求。10.Truthiness解析:`assert`語(yǔ)句用于斷言表達(dá)式為真(即"True"在Python中)。它常用于單元測(cè)試中驗(yàn)證代碼執(zhí)行結(jié)果是否符合預(yù)期,即檢查表達(dá)式的“真值性”(Truthiness)。三、簡(jiǎn)答題1.答:*模型(Model):負(fù)責(zé)定義數(shù)據(jù)結(jié)構(gòu)(通過(guò)類(lèi)和字段),與數(shù)據(jù)庫(kù)表進(jìn)行映射,處理數(shù)據(jù)的持久化、驗(yàn)證和查詢。它代表應(yīng)用的狀態(tài)和業(yè)務(wù)規(guī)則。*視圖(View):負(fù)責(zé)處理用戶請(qǐng)求,執(zhí)行業(yè)務(wù)邏輯(如調(diào)用模型方法),并決定使用哪個(gè)模板來(lái)渲染響應(yīng)。它是應(yīng)用的核心控制器。*模板(Template):負(fù)責(zé)定義用戶界面的結(jié)構(gòu)和呈現(xiàn)方式,負(fù)責(zé)數(shù)據(jù)的展示。它通常包含靜態(tài)標(biāo)記和模板標(biāo)簽/變量,用于渲染最終的HTML(或其他格式)輸出給用戶。解析:MVT模式的核心在于分離關(guān)注點(diǎn):模型關(guān)注數(shù)據(jù),視圖關(guān)注邏輯和流程,模板關(guān)注表現(xiàn)。這有助于提高代碼的可維護(hù)性、可重用性和可測(cè)試性。2.答:*ORM(Object-RelationalMapping):是一種編程技術(shù),它將關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)映射為面向?qū)ο缶幊陶Z(yǔ)言中的對(duì)象。開(kāi)發(fā)者可以使用面向?qū)ο蟮姆绞絹?lái)操作數(shù)據(jù)庫(kù),而不需要編寫(xiě)復(fù)雜的SQL語(yǔ)句。*優(yōu)勢(shì):*開(kāi)發(fā)效率:簡(jiǎn)化數(shù)據(jù)庫(kù)操作,減少編寫(xiě)和維護(hù)SQL代碼的工作量。*數(shù)據(jù)庫(kù)無(wú)關(guān)性:可以使用統(tǒng)一的接口訪問(wèn)不同的關(guān)系數(shù)據(jù)庫(kù)(如PostgreSQL,MySQL,SQLite),便于切換數(shù)據(jù)庫(kù)。*面向?qū)ο笏季S:使數(shù)據(jù)庫(kù)操作更符合開(kāi)發(fā)者的編程習(xí)慣,易于理解和維護(hù)。*抽象層次:提供了更高層次的數(shù)據(jù)庫(kù)抽象,隱藏了底層SQL的復(fù)雜性。解析:ORM是現(xiàn)代Web開(kāi)發(fā)的重要工具,它通過(guò)抽象層簡(jiǎn)化了與數(shù)據(jù)庫(kù)的交互,讓開(kāi)發(fā)者更專(zhuān)注于業(yè)務(wù)邏輯。3.答:*藍(lán)圖(Blueprint):是Flask中用于組織大型應(yīng)用程序的一種方式。它允許你定義一組路由、視圖函數(shù)、模板和靜態(tài)文件,然后稍后將這個(gè)藍(lán)圖注冊(cè)到Flask應(yīng)用實(shí)例中。*好處:*組織性:可以將相關(guān)的路由和視圖邏輯分組管理,使大型應(yīng)用結(jié)構(gòu)更清晰。*可重用性:可以將一個(gè)藍(lán)圖作為模塊在不同的應(yīng)用中重用。*延遲注冊(cè):藍(lán)圖可以在創(chuàng)建應(yīng)用實(shí)例后,根據(jù)需要決定是否注冊(cè),增加了應(yīng)用的靈活性。*應(yīng)用擴(kuò)展:便于擴(kuò)展應(yīng)用功能,可以將不同的功能模塊作為藍(lán)圖添加。解析:藍(lán)圖是Flask中實(shí)現(xiàn)模塊化設(shè)計(jì)的重要機(jī)制,有助于管理復(fù)雜應(yīng)用的代碼結(jié)構(gòu)。4.答:*CSRF(Cross-SiteRequestForgery)攻擊:是一種攻擊手段,攻擊者誘導(dǎo)已經(jīng)通過(guò)認(rèn)證的網(wǎng)站用戶,執(zhí)行非用戶意圖的操作。攻擊者通常在用戶已登錄的瀏覽器中,構(gòu)造一個(gè)請(qǐng)求,利用用戶當(dāng)前的會(huì)話(Session)或認(rèn)證令牌,讓服務(wù)器執(zhí)行該請(qǐng)求。*防范方法:*使用CSRF令牌:在表單中包含一個(gè)由服務(wù)器生成、且每個(gè)會(huì)話/請(qǐng)求唯一的令牌,客戶端提交表單時(shí)必須攜帶該令牌,服務(wù)器收到請(qǐng)求后進(jìn)行驗(yàn)證。這是最常用且有效的方法。*檢查Referer標(biāo)頭:服務(wù)器可以檢查HTTP請(qǐng)求的`Referer`標(biāo)頭,確認(rèn)請(qǐng)求是否來(lái)自可信的來(lái)源(即用戶的瀏覽器是否真的來(lái)自本站)。*SameSiteCookie屬性:為會(huì)話Cookie設(shè)置`SameSite`屬性(如`Strict`或`Lax`),可以阻止瀏覽器在跨站請(qǐng)求時(shí)發(fā)送Cookie。*避免使用GET請(qǐng)求處理敏感操作:CSRF主要影響GET請(qǐng)求,應(yīng)使用POST請(qǐng)求處理敏感操作,并配合CSRF防護(hù)。解析:CSRF攻擊利用了用戶信任的會(huì)話,防范的關(guān)鍵在于確保用戶發(fā)起的請(qǐng)求都是其真實(shí)意圖,常用的手段是CSRF令牌。四、閱讀理解題1.答:該應(yīng)用創(chuàng)建了`User`數(shù)據(jù)庫(kù)模型。該模型包含`id`(整數(shù)類(lèi)型,主鍵),`username`(字符串類(lèi)型,最大長(zhǎng)度80,唯一,不能為空),`email`(字符串類(lèi)型,最大長(zhǎng)度120,唯一,不能為空)這三個(gè)字段。解析:通過(guò)查看`User`類(lèi)繼承自`db.Model`并定義的字段`db.Column`,可以確定模型名稱和其包含的字段名稱、類(lèi)型及約束。2.答:`/users`路由處理POST類(lèi)型的HTTP請(qǐng)求。它期望接收J(rèn)SON格式的請(qǐng)求體數(shù)據(jù),包含`username`和`email`字段。如果請(qǐng)求體數(shù)據(jù)不符合要求(即沒(méi)有`username`或`email`),會(huì)返回狀態(tài)碼400(BadRequest)和包含錯(cuò)誤信息的JSON響應(yīng)。解析:從`@app.route('/users',methods=['POST'])`注解可知方法類(lèi)型為POST。從`request.get_json()`和`data.get('username')`、`data.get('email')`可知期望JSON格式數(shù)據(jù)。從`returnjsonify({"error":"Usernameandemailarerequired"}),400`可知錯(cuò)誤響應(yīng)和狀態(tài)碼。3.答:`/users/<int:user_id>`路由處理GET類(lèi)型的HTTP請(qǐng)求(雖然未顯式聲明,但Flask默認(rèn)路由不指定方法時(shí)處理所有方法,但通常用于展示信息,GET是標(biāo)準(zhǔn)方式)。當(dāng)訪問(wèn)一個(gè)不存在的用戶ID時(shí),會(huì)返回狀態(tài)碼404(NotFound)和包含錯(cuò)誤信息的JSON響應(yīng),錯(cuò)誤信息為`"Usernotfound"`。解析:從路由路徑`<int:user_id>`和函數(shù)名`get_user`(通常用于獲取信息)推斷處理GET請(qǐng)求。從`user=User.query.get(user_id)`和后續(xù)的`ifnotuser:`判斷可知,如果根據(jù)ID查不到用戶對(duì)象,則認(rèn)為是404NotFound錯(cuò)誤。五、編程題(注:此處提供代碼片段,而非完整項(xiàng)目結(jié)構(gòu),符合題目要求)```python#models.py(在myapp目錄下)fromdjango.dbimportmodelsfromdjango.contrib.auth.modelsimportUserclassArticle(models.Model):title=models.CharField(max_length=200)content=models.TextField()created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)author=models.ForeignKey(User,on_delete=models.CASCADE,related_name='articles')def__str__(self):returnself.title#views.py(在myapp目錄下)fromdjango.shortcutsimportrender,get_object_or_404from.modelsimportArticledeflist_articles(request):articles=Article.objects.all().order_by('-created_at')returnrender(request,'myapp/list_articles.html',{'articles':articles})defview_article(request,article_id):article=get_object_or_404(Article,id=article_id)returnrender(request,'myapp/view_article.html',{'article':article})#urls.py(在myapp目錄下)fromdjango.urlsimportpathfrom.importviewsurlpatterns=[path('articles/',views.list_articles,name='list_articles'),path('articles/<int:article_id>/',views.view_article,name='view_article'),]#templates/myapp/list_articles.html{%forarticleinarticles%}<h3>{{article.title}}</h3><p>Writtenby:{{article.author.username}}</p><ahref="{%url'view_article'article.id%}">Readmore</a>{%empty%}<p>Noarticlesavailable.</p>{%endfor%}#templates/myapp/view_article.html{{article.title|title}}<br><p>By:{{article.author.username}}<br>Created:{{article.created_at}}<br>Updated:{{article.updated_at}}<br><br>{{article.content|safe}}</code>解析:根據(jù)要求,定義了Article模型包含所需字段及關(guān)系。實(shí)現(xiàn)了兩個(gè)視圖函數(shù):`list_articles`查詢所有文章并按創(chuàng)建時(shí)間降序排序,傳遞給模板;`view_article`根據(jù)ID查詢指定文章,若不存在則返回404(使用`get_object_or_404`),傳遞給模板。配置了相應(yīng)的URL模式。模板`list_articles.html`遍歷文章列表并顯示標(biāo)題、作者和查看鏈接;`view_article.html`顯示文章的詳細(xì)信息,使用`|title`對(duì)標(biāo)題進(jìn)行首字母大寫(xiě)處理,`|safe`用于安全地輸出內(nèi)容(假設(shè)內(nèi)容已清洗)。```六、調(diào)試題```pythonfromflaskimportFlask,g,requestfromflask_sqlalchemyimportSQLAlchemyapp=Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///test.db'db=SQLAlchemy(app)classUser(db.Model):id=db.Column(db.Integer,primary_key=True)username=

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論