成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

terasum / 1222人閱讀

摘要:目前為止我們已經完成了文章的新建刪除以及查看,還剩最后一項,即對已經完成的文章進行修改。總結至此我們就實現(xiàn)了一篇文章的增刪改查四個基礎功能,也算小有成就。有疑問請在杜賽的個人網(wǎng)站留言,我會盡快回復。

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

實際上修改文章與新建文章有點類似,不同的地方有兩點:

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

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

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

視圖函數(shù)

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

article/views.py

...

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

    # 獲取需要修改的具體文章對象
    article = ArticlePost.objects.get(id=id)
    # 判斷用戶是否為 POST 提交表單數(shù)據(jù)
    if request.method == "POST":
        # 將提交的數(shù)據(jù)賦值到表單實例中
        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("表單內容有誤,請重新填寫。")

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

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

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

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

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

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

編寫模板

模板文件就與創(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 %}

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

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

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 }} · 刪除文章 · 編輯文章

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

總結

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

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

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

有疑問請在杜賽的個人網(wǎng)站留言,我會盡快回復。

或Email私信我:[email protected]

項目完整代碼:Django_blog_tutorial

轉載請告知作者并注明出處。

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

轉載請注明本文地址:http://systransis.cn/yun/44838.html

相關文章

  • Django搭建個人博客文章標簽功能

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

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

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

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

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

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

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

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

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

    Chaz 評論0 收藏0

發(fā)表評論

0條評論

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