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

資訊專欄INFORMATION COLUMN

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

terasum / 1220人閱讀

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

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

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

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

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

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

視圖函數

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

article/views.py

...

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

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

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

更新的視圖與創建文章非常相似,但又有點小區別:

文章的 id 作為參數傳遞進來了

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

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

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

編寫模板

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

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

templates/article/update.html

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

{% csrf_token %}
{% endblock content %}

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

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

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

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

總結

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

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

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

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

或Email私信我:dusaiphoto@foxmail.com

項目完整代碼:Django_blog_tutorial

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

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

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

相關文章

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

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

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

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

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

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

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

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

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

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

    Chaz 評論0 收藏0

發表評論

0條評論

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