国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Django搭建個人博客:完成修改文章功能

terasum / 1224人閱讀

摘要:目前為止我們已經(jīng)完成了文章的新建刪除以及查看,還剩最后一項(xiàng),即對已經(jīng)完成的文章進(jìn)行修改。總結(jié)至此我們就實(shí)現(xiàn)了一篇文章的增刪改查四個基礎(chǔ)功能,也算小有成就。有疑問請?jiān)诙刨惖膫€人網(wǎng)站留言,我會盡快回復(fù)。

目前為止我們已經(jīng)完成了文章的新建、刪除以及查看,還剩最后一項(xiàng),即對已經(jīng)完成的文章進(jìn)行修改。

實(shí)際上修改文章與新建文章有點(diǎn)類似,不同的地方有兩點(diǎn):

修改是在原有文章的基礎(chǔ)上,因此需要傳遞 id 指明具體需要修改的文章

加載頁面時需要將舊的內(nèi)容作為默認(rèn)值填寫到表單中,因此需要將文章對象傳遞到html

按照這個思路,接下來先寫視圖函數(shù)。

視圖函數(shù)

ariticle/views.py中增加修改文章的視圖函數(shù)article_update()

article/views.py

...

# 更新文章
def article_update(request, id):
    """
    更新文章的視圖函數(shù)
    通過POST方法提交表單,更新titile、body字段
    GET方法進(jìn)入初始表單頁面
    id: 文章的 id
    """

    # 獲取需要修改的具體文章對象
    article = ArticlePost.objects.get(id=id)
    # 判斷用戶是否為 POST 提交表單數(shù)據(jù)
    if request.method == "POST":
        # 將提交的數(shù)據(jù)賦值到表單實(shí)例中
        article_post_form = ArticlePostForm(data=request.POST)
        # 判斷提交的數(shù)據(jù)是否滿足模型的要求
        if article_post_form.is_valid():
            # 保存新寫入的 title、body 數(shù)據(jù)并保存
            article.title = request.POST["title"]
            article.body = request.POST["body"]
            article.save()
            # 完成后返回到修改后的文章中。需傳入文章的 id 值
            return redirect("article:article_detail", id=id)
        # 如果數(shù)據(jù)不合法,返回錯誤信息
        else:
            return HttpResponse("表單內(nèi)容有誤,請重新填寫。")

    # 如果用戶 GET 請求獲取數(shù)據(jù)
    else:
        # 創(chuàng)建表單類實(shí)例
        article_post_form = ArticlePostForm()
        # 賦值上下文,將 article 文章對象也傳遞進(jìn)去,以便提取舊的內(nèi)容
        context = { "article": article, "article_post_form": article_post_form }
        # 將響應(yīng)返回到模板中
        return render(request, "article/update.html", context)

更新的視圖與創(chuàng)建文章非常相似,但又有點(diǎn)小區(qū)別:

文章的 id 作為參數(shù)傳遞進(jìn)來了

用戶POST提交表單時沒有創(chuàng)建新的文章,而是在之前的文章中修改

redirect函數(shù)沒有返回文章列表,而是返回到修改后的文章頁面去了,因此需要同時把文章的id也打包傳遞進(jìn)去,這是url所規(guī)定的

GET獲取頁面時將article對象也傳遞到模板中去,以便后續(xù)的調(diào)用

編寫模板

模板文件就與創(chuàng)建文章的更像了,不過我們這里還是重新寫一遍。

新建templates/article/update.html并寫入:

templates/article/update.html

{% extends "base.html" %} {% load staticfiles %}
{% block title %} 更新文章 {% endblock title %}
{% block content %}

{% csrf_token %}
{% endblock content %}

在模板中,分別將文章舊的標(biāo)題和正文作為初始值,傳遞了進(jìn)去,其他就與新建文章的模板完全沒區(qū)別了。

有讀者可能就會問了,既然這兩個函數(shù)、模板都很相似,能不能合并成一個函數(shù)、模板呢?當(dāng)然是可以的,合并相同功能的函數(shù)可以讓代碼更加簡潔漂亮,也便于后期的維護(hù)。有興趣的讀者可以自己嘗試一下。

URL 和入口

接下來的套路都懂的,配置路由article/urls.py

article/urls.py

...

urlpatterns = [
    ...
    
    # 更新文章
    path("article-update//", views.article_update, name="article_update"),
]

在文章詳情頁面tempaltes/article/detail.html中添加修改文章的入口:

tempaltes/article/detail.html

...
作者:{{ article.author }} · 刪除文章 · 編輯文章

啟動服務(wù)器,可以看到修改文章的功能就實(shí)現(xiàn)了。同樣的,如有故障也不要著急,在Debug頁面尋找出錯的線索,求助網(wǎng)絡(luò)幫忙解決吧。

總結(jié)

至此我們就實(shí)現(xiàn)了一篇文章的增、刪、改、查四個基礎(chǔ)功能,也算小有成就。

當(dāng)然還有很多進(jìn)階的功能可以去做,不過我們在這里先休息休息,來罐快樂水慶祝一下。

下一章開始解決更加燃眉之急的內(nèi)容:用戶管理。

有疑問請?jiān)诙刨惖膫€人網(wǎng)站留言,我會盡快回復(fù)。

或Email私信我:dusaiphoto@foxmail.com

項(xiàng)目完整代碼:Django_blog_tutorial

轉(zhuǎn)載請告知作者并注明出處。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/44838.html

相關(guān)文章

  • Django搭建個人博客文章標(biāo)簽功能

    摘要:每一篇文章的標(biāo)簽可能都不一樣,并且還可能擁有多個標(biāo)簽,這是與欄目功能不同的。列表中顯示標(biāo)簽雖然保存標(biāo)簽的功能已經(jīng)實(shí)現(xiàn)了,還得把它顯示出來才行。更多的用法請閱讀官方文檔總結(jié)本章學(xué)習(xí)了使用來完成標(biāo)簽功能。 標(biāo)簽是作者從文章中提取的核心詞匯,其他用戶可以通過標(biāo)簽快速了解文章的關(guān)注點(diǎn)。每一篇文章的標(biāo)簽可能都不一樣,并且還可能擁有多個標(biāo)簽,這是與欄目功能不同的。 好在標(biāo)簽功能也有優(yōu)秀的三方庫:D...

    Amio 評論0 收藏0
  • Django搭建個人博客:編寫博客文章的Model模型

    摘要:在里寫一個數(shù)據(jù)庫驅(qū)動的應(yīng)用的第一步是定義模型,也就是數(shù)據(jù)庫結(jié)構(gòu)設(shè)計和附加的其它元數(shù)據(jù)。模型元數(shù)據(jù)是任何不是字段的東西,例如排序選項(xiàng)數(shù)據(jù)庫表名單數(shù)和復(fù)數(shù)名稱和。 Django 框架主要關(guān)注的是模型(Model)、模板(Template)和視圖(Views),稱為MTV模式。 它們各自的職責(zé)如下: 層次 職責(zé) 模型(Model),即數(shù)據(jù)存取層 處理與數(shù)據(jù)相關(guān)的所有事務(wù): 如何存取...

    winterdawn 評論0 收藏0
  • Django搭建個人博客:簡單搜索博客文章

    摘要:更酷的是,我們希望搜索出來的文章也能夠按照時間熱度等各種方式進(jìn)行排序。若不為空,則檢索特定文章對象。總結(jié)本章完成了一個簡單的搜索功能,這對于個人博客來說應(yīng)該夠用了。 不管是最新文章列表也好、最熱文章列表也罷,都是把所有的文章數(shù)據(jù)全部展示給了用戶。 但是如果用戶只關(guān)心某些特定類型的文章,抽取全部數(shù)據(jù)就顯得既不方便、又不效率了。 因此,給用戶提供一個搜索功能,提供給用戶感興趣的幾篇文章,就...

    Alan 評論0 收藏0
  • Django搭建個人博客:創(chuàng)建并配置APP功能模塊

    摘要:創(chuàng)建在中的一個代表一個功能模塊。就是項(xiàng)目的基石,因此開發(fā)博客的第一步就是創(chuàng)建新的,用來實(shí)現(xiàn)跟文章相關(guān)的功能模塊。注意之后,的必須配置,否則會報錯。總結(jié)本章創(chuàng)建了博客文章功能的,學(xué)習(xí)了注冊并配置。 創(chuàng)建APP 在Django中的一個app代表一個功能模塊。開發(fā)者可以將不同功能的模塊放在不同的app中, 方便代碼的復(fù)用。app就是項(xiàng)目的基石,因此開發(fā)博客的第一步就是創(chuàng)建新的app,用來實(shí)現(xiàn)...

    沈儉 評論0 收藏0
  • Django搭建個人博客:編寫刪除文章功能

    摘要:既然有了寫文章的功能,那當(dāng)然也必須要有刪除文章的功能了。編寫基本功能有了之前的學(xué)習(xí)做鋪墊,刪除文章實(shí)現(xiàn)起來就比較簡單了。保存所有文件后刷新頁面,很好,達(dá)到了理想的效果總結(jié)本章新增了刪除博客文章的功能,并且使用了彈窗組件優(yōu)化了用戶體驗(yàn)。 既然有了寫文章的功能,那當(dāng)然也必須要有刪除文章的功能了。 編寫基本功能 有了之前的學(xué)習(xí)做鋪墊,刪除文章實(shí)現(xiàn)起來就比較簡單了。 首先增加一個視圖函數(shù): a...

    Chaz 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<