Python--Django開發速成(3)
阿新 • • 發佈:2018-12-20
本文主要講解在的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、修改之後點選提交,即可儲存並重新進入文章詳情頁: