日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

个人博客小案例(纯Django搭建)

發(fā)布時間:2023/12/14 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 个人博客小案例(纯Django搭建) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在看這篇文章的時候,必須有django基礎(chǔ),如果沒有點(diǎn)擊訪問

一、環(huán)境配置

新建項(xiàng)目并做配置項(xiàng)目創(chuàng)建,創(chuàng)建APP并注冊

創(chuàng)建模板并配置相應(yīng)的路徑,點(diǎn)擊下載模板,配置方法點(diǎn)擊訪問

創(chuàng)建靜態(tài)文件并配置,點(diǎn)擊訪問

配置數(shù)據(jù)庫,點(diǎn)擊訪問

目錄結(jié)構(gòu)如下

配置blog的測試頁面,先測試是否正確配置

def test(request): ‘’‘ 博客的測試的視圖函數(shù) ’‘’return HttpResponse('博客的測試頁')

運(yùn)行效果

博客發(fā)文涉及文章標(biāo)題和內(nèi)容,所以創(chuàng)建模型類

class Blog(models.Model):title = models.CharField(max_length=100)context = models.TextField()def __str__(self):return 'Blog<title=%s,context=%s>'%(self.title,self.context)

繼續(xù)原來的映射文件

?makemigrations?和?migrate?

查看表

?

二、視圖

添加四個視圖,渲染模板

def index(request):return render(request,'blog/demo_index.html')def add(request):return render(request,'blog/demo_add.html')def list(request):return render(request,'blog/demo_list.html')def detail(request):return render(request,'blog/demo_detail.html')

配置路由

path('index/',index,name='blog_index'),path('add/',add,name='blog_add'),path('detail/',detail,name='blog_detail'),path('list/',list,name='blog_list')

查看效果

ok,現(xiàn)在分析需求

可以整理如下條例

三、實(shí)現(xiàn)功能

?1.index

修改demo_index.html 的a標(biāo)簽

<td><a href="{% url 'blog_add' %}">添加文章</a></td><td><a href="{% url 'blog_list' %}">文章列表</a></td>

即可實(shí)現(xiàn)主頁的所有的功能

2.add

?創(chuàng)建的視圖函數(shù)進(jìn)行修改,這里的發(fā)布博客按鈕是提交form表單,所以修改之前的模型類,將title屬性增加參數(shù)?blank=True?

然后重新生成映射文件

可以看到,這里的文章標(biāo)題的id=title,文章內(nèi)容id=context

要獲取提交的表單內(nèi)容,則要修改視圖,以傳參的方式將其傳遞進(jìn)來并接收

?就可以寫個樣一個判斷

if request.method == 'GET':return render(request,'blog/demo_add.html')elif request.method == 'POST':title = request.POST.get('title')context = request.POST.get('content')

打印一下title和content,發(fā)現(xiàn)成功的接收到了自己想要的東西

注意:

這里的requests.POST是一個QueryDict對象,類似字典,所以可以通過索引取值,拿到這里的title和content

整個函數(shù)的代碼就變成了這樣

def add(request):if request.method == 'GET':return render(request,'blog/demo_add.html')elif request.method == 'POST':title = request.POST.get('title')context = request.POST.get('content')return render(request,'blog/demo_add.html')

既然兩個分支條件都要渲染出這個模板,就可以修改

def add(request):if request.method == 'POST':title = request.POST.get('title')context = request.POST.get('content')return render(request,'blog/demo_add.html')

現(xiàn)在拿到了數(shù)據(jù),下一步就是數(shù)據(jù)入庫,對django操作數(shù)據(jù)庫不懂的,可以參考模型

這里用create方法

只需要在拿到數(shù)據(jù)之后?Blog.objects.create(title=title,context=context)?即可

這里準(zhǔn)備幾篇文章,以供測試

水調(diào)歌頭 明月幾時有?把酒問青天。不知天上宮闕,今夕是何年。我欲乘風(fēng)歸去,又恐瓊樓玉宇,高處不勝寒。起舞弄清影,何似在人間?轉(zhuǎn)朱閣,低綺戶,照無眠。不應(yīng)有恨,何事長向別時圓?人有悲歡離合,月有陰晴圓缺,此事古難全。但愿人長久,千里共嬋娟。卜算子·詠梅 驛外斷橋邊,寂寞開無主。已是黃昏獨(dú)自愁,更著風(fēng)和雨。 無意苦爭春,一任群芳妒。零落成泥碾作塵,只有香如故。聲聲慢 尋尋覓覓,冷冷清清,凄凄慘慘戚戚。乍暖還寒時候,最難將息。三杯兩盞淡酒,怎敵他、晚來風(fēng)急?雁過也,正傷心,卻是舊時相識。滿地黃花堆積。憔悴損,如今有誰堪摘?守著窗兒,獨(dú)自怎生得黑?梧桐更兼細(xì)雨,到黃昏、點(diǎn)點(diǎn)滴滴。這次第,怎一個愁字了得!武陵春 風(fēng)住塵香花已盡,日晚倦梳頭。物是人非事事休,欲語淚先流。聞?wù)f雙溪春尚好,也擬泛輕舟。只恐雙溪舴艋舟,載不動許多愁。 測試文章

?查看效果

?

ok文章添加功能完成

3.list

思路:首先從數(shù)據(jù)庫拿到數(shù)據(jù) ,然后渲染到模板上

def list(request):blogs = BlogMoudel.objects.all()return render(request,"blog/demo_list.html",context={'blog':blogs})

在這里需要將查到的Queryset對象傳到模板,然后遍歷,所以模板上需要改動tr標(biāo)簽,將其放置在for循環(huán)

{% for foo in blog %}<tr><th><a href="">{{ foo.title }}</a></th><th><a href="">編輯</a> | <a href="">刪除 </a></th></tr>{% endfor %}

效果:

?還有個需求,要求點(diǎn)擊文章標(biāo)題就能進(jìn)入對應(yīng)的詳情頁

思路:獲取點(diǎn)擊時對應(yīng)的ID,將這個id接收,然后查找該文章,渲染出來

所以這里首先需要做出詳情頁的功能

4.detail

分析進(jìn)入詳情頁的url,是需要有一個值來確定是哪一篇文章,所以可以在url里傳參

path('detail/<blog_id>',views.detail,name='blog_detail'),

視圖函數(shù)里查找數(shù)據(jù)庫

def detail(request,blog_id):blog = BlogMoudel.objects.get(id=blog_id) #查找指定id的文章return render(request,"blog/demo_detail.html",context={'blog':blog}) #將變量傳遞到模板

模板修改只需要修改文章標(biāo)題和內(nèi)容的一塊區(qū)域

{% block bodyblock %}<h1>{{ blog.title }}</h1>{{ blog.context }} {% endblock %}

看下效果

詳情頁到這里就完成,現(xiàn)在只需要將url綁定到列表頁即可

直接修改demo_list.html,在編輯的a標(biāo)簽連接上修改

<th><a href="{% url 'blog_detail' foo.id %}">{{ foo.title }}</a></th>

查看效果

這里還有刪除的按鈕,現(xiàn)在實(shí)現(xiàn)刪除

思路:獲取id,查找數(shù)據(jù)庫,刪除

同樣要知道需要刪除哪篇文章,需要傳參,定義一個刪除的url

?path('delete/<blog_id>/',views.delete,name='blog_delete'),?

然后創(chuàng)建一個視圖函數(shù)

def delete(request,blog_id):blog = BlogMoudel.objects.filter(id=blog_id)if blog:blog.delete()return HttpResponse('成功刪除')else:return HttpResponse('該文不存在')

函數(shù)邏輯很簡單,獲取文章,刪除文章

修改模板

<a href="{% url 'blog_delete' foo.id %}">刪除 </a>

但是這里同時發(fā)現(xiàn)一個問題,就是刪除之后,頁面并沒有刷新,繼續(xù)點(diǎn)擊則會報(bào)錯,所以這里可以定義一個頁面重定向

def delete(request,blog_id):blog = BlogMoudel.objects.filter(id=blog_id)if blog:blog.delete()redirect(reverse('blog_list'))else:return HttpResponse('該文不存在')

效果

最后有個編輯的頁面

5.edit

編輯功能類似增加,同樣是寫個url

?path('edit/<blog_id>/',views.edit,name='blog_edit'),?

然后視圖函數(shù)

?

def edit(request,blog_id):blog = BlogMoudel.objects.filter(id=blog_id).first()return render(request,'blog/demo_edit.html',context={'blog':blog})

?

邏輯很簡單,就是獲取文章,獲取的對象是一個Queryset對象,然后.first()獲取,再返回回去

繼續(xù)修改edit.html文件,其實(shí)就是demo_add.html文件,將其更名修改即可

<form action="" method="POST"> {% csrf_token %}標(biāo)題<input type="text" autocomplete="off" id="title"placeholder="請輸入標(biāo)題" name='title' value="{{ blog.title }}"> <br> <br><br>內(nèi)容 <textarea name="content" id="content"placeholder="請輸入內(nèi)容" cols="30" rows="10">{{ blog.context }}</textarea><button type="submit">發(fā)布博客</button></form>

效果

至此,簡單的博客就搭建完成了,其他的功能將會在后續(xù)的學(xué)習(xí)中逐步添加

以后的django基礎(chǔ)文章也會圍繞這個案例展開討論

本文為素心原創(chuàng),轉(zhuǎn)載請注明出處

轉(zhuǎn)載于:https://www.cnblogs.com/chancey/p/10254409.html

總結(jié)

以上是生活随笔為你收集整理的个人博客小案例(纯Django搭建)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。