1. 程式人生 > >Python--Django開發速成(3)

Python--Django開發速成(3)

        本文主要講解在的Python--Django開發速成(2)基礎上新增部落格文章修改功能,主要思路如下:

(1)每個部落格都是有id的,id是由資料庫自動生成的,而id有一個特點,就是沒有0值。

(2)若要修改已有的文章,那麼可以讀取其id,從而後取其他內容。

(3)若要新建文章,則視id值為0,從而實現新建文章與編輯文章共用一個檢視html而不使程式出錯。

一、程式程式碼:

1、blog/views.py:

from django.shortcuts import render
from . import models

# Create your views here.

def index(request):
    articles=models.Article.objects.all()
    return render(request, 'blog/index.html',{'articles':articles})

def article_page(request,article_id):
    article=models.Article.objects.get(pk=article_id)
    return render(request,'blog/articlepage.html',{'article':article})


def edit_page(request,article_id):
    #若id值為0,不傳入文章資料,否則傳入
    if str(article_id)=='0':
        return render(request,'blog/editpage.html')
    article=models.Article.objects.get(pk=article_id)
    return render(request,'blog/editpage.html',{'article':article})

def edit_action(request):
    #獲得表單資料
    title=request.POST.get('title','TITLE')#'TITLE,預設值'
    content=request.POST.get('content','CONTENT')
    article_id=request.POST.get('article_id','0')
    #若id為0,則表示為新建的文章,建立新資料
    if article_id=='0':
        models.Article.objects.create(title=title, content=content)
        articles = models.Article.objects.all()
        return render(request, 'blog/index.html', {'articles': articles})
    #若id不為0,則儲存資料
    article=models.Article.objects.get(pk=article_id)
    article.title=title
    article.content=content
    article.save()
    return render(request,'blog/articlepage.html',{'article':article})

2、blog/urls.py:

from django.urls import path,re_path
from . import views
#此程式碼很重要,要與應用名稱一致
app_name = 'blog'

urlpatterns = [
    #通過正則表示式設定該應用的訪問url,此處還傳入了文章id
    #設定檢視的方法為views.article_page
    #設定url的name屬性以訪問到
    path('', views.index, name='index'),
    re_path(r'article/(?P<article_id>[0-9]+)$', views.article_page,name='article_page'),
    #設定編輯頁面的url,並傳入article_id
    re_path('edit/(?P<article_id>[0-9]+)$',views.edit_page,name='edit_page'),
    re_path('edit/action$',views.edit_action,name='edit_action'),
]

二、檢視程式碼:

 1、index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>
    {# 當新建文章時,視id為0#}
    <a href="{% url 'blog:edit_page' 0 %}">新文章</a>
</h1>

{# 迴圈資料庫獲取所有文章#}
{% for article in articles %}
    {# href格式,url app_name:url_name 引數 #}
    <a href="{% url 'blog:article_page' article.id %}">{{ article.title }}</a>
    <br/>
    
{% endfor %}

</body>
</html>

2、articlepage.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>articlepage</title>
</head>
<body>
{# 直接顯示後臺的資料變數 #}
<h1>{{ article.title }}</h1>
<br/>
<h3>{{ article.content }}</h3>
<br/><br/>

{# 修改文章時,傳入id並進入文章編輯頁面 #}
<a href="{% url 'blog:edit_page' article.id %}">修改文章</a>
</body>
</html>

3、editpage.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Edit Page</title>
</head>
<body>
<form action={% url 'blog:edit_action' %} method="post">
    {% csrf_token %} {# csrf標記 防範跨站請求偽造 #}
    {# 判斷,若id不為0,則將文章標題以及內容載入在頁面中 #}
    {% if article %}
        <input type="hidden" name="article_id" value="{{ article.id }}" />
        <label>文章標題
            <input type="text" name="title" value="{{ article.title }}"/>
        </label>
        <br/>
        <label>文章內容
            <input type="text" name="content" value="{{ article.content }}"/>
        </label>
        <br/>
    {# 判斷,若id為0,則不載入文章標題以及內容的值 #}
    {% else %}
        <input type="hidden" name="article_id" value="0" />
        <label>文章標題
            <input type="text" name="title"/>
        </label>
        <br/>
        <label>文章內容
            <input type="text" name="content"/>
        </label>
        <br/>
    {% endif %}
    <input type="submit" value="提交">

</form>

</body>
</html>

三、測試:

1、啟動cmd類工具,進入專案資料夾,輸入命令:

python manage.py runserver

2、開啟瀏覽器,輸入localhost:8000/blog,即可進入部落格介面:

3、點選新文章,即可新建文章,注意url最後是0:

4、點選某個文章標題,即可檢視文章內容:

5、再點選修改文章,即可對文章進行編輯,介面與新建文章相同,只不過文字會自動載入:

6、修改之後點選提交,即可儲存並重新進入文章詳情頁: