1. 程式人生 > >個人部落格小案例(純Django搭建)

個人部落格小案例(純Django搭建)

在看這篇文章的時候,必須有django基礎,如果沒有點選訪問

一、環境配置

新建專案並做配置專案建立,建立APP並註冊

建立模板並配置相應的路徑,點選下載模板,配置方法點選訪問

建立靜態檔案並配置,點選訪問

配置資料庫,點選訪問

目錄結構如下

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

def test(request):
‘’‘
部落格的測試的檢視函式
’‘’
    return HttpResponse('部落格的測試頁')

執行效果

部落格發文涉及文章標題和內容,所以建立模型類

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)

繼續原來的對映檔案

 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,現在分析需求

可以整理如下條例

三、實現功能

 1.index

修改demo_index.html 的a標籤

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

即可實現主頁的所有的功能

2.add

 建立的檢視函式進行修改,這裡的釋出部落格按鈕是提交form表單,所以修改之前的模型類,將title屬性增加引數 blank=True 

然後重新生成對映檔案

可以看到,這裡的文章標題的id=title,文章內容id=context

要獲取提交的表單內容,則要修改檢視,以傳參的方式將其傳遞進來並接收

 就可以寫個樣一個判斷

    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,發現成功的接收到了自己想要的東西

注意:

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

整個函式的程式碼就變成了這樣

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')

現在拿到了資料,下一步就是資料入庫,對django操作資料庫不懂的,可以參考模型

這裡用create方法

只需要在拿到資料之後 Blog.objects.create(title=title,context=context) 即可

這裡準備幾篇文章,以供測試

水調歌頭
明月幾時有?把酒問青天。不知天上宮闕,今夕是何年。我欲乘風歸去,又恐瓊樓玉宇,高處不勝寒。起舞弄清影,何似在人間?轉朱閣,低綺戶,照無眠。不應有恨,何事長向別時圓?人有悲歡離合,月有陰晴圓缺,此事古難全。但願人長久,千里共嬋娟。

卜算子·詠梅
驛外斷橋邊,寂寞開無主。已是黃昏獨自愁,更著風和雨。 無意苦爭春,一任群芳妒。零落成泥碾作塵,只有香如故。

聲聲慢
尋尋覓覓,冷冷清清,悽悽慘慘慼戚。乍暖還寒時候,最難將息。三杯兩盞淡酒,怎敵他、晚來風急?雁過也,正傷心,卻是舊時相識。滿地黃花堆積。憔悴損,如今有誰堪摘?守著窗兒,獨自怎生得黑?梧桐更兼細雨,到黃昏、點點滴滴。這次第,怎一個愁字了得!

武陵春
風住塵香花已盡,日晚倦梳頭。物是人非事事休,欲語淚先流。聞說雙溪春尚好,也擬泛輕舟。只恐雙溪舴艋舟,載不動許多愁。
測試文章

 檢視效果

 

ok文章新增功能完成

3.list

思路:首先從資料庫拿到資料 ,然後渲染到模板上

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

在這裡需要將查到的Queryset物件傳到模板,然後遍歷,所以模板上需要改動tr標籤,將其放置在for迴圈

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

效果:

 還有個需求,要求點選文章標題就能進入對應的詳情頁

思路:獲取點選時對應的ID,將這個id接收,然後查詢該文章,渲染出來

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

4.detail

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

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

檢視函式裡查詢資料庫

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

模板修改只需要修改文章標題和內容的一塊區域

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

看下效果

詳情頁到這裡就完成,現在只需要將url繫結到列表頁即可

直接修改demo_list.html,在編輯的a標籤連線上修改

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

檢視效果

這裡還有刪除的按鈕,現在實現刪除

思路:獲取id,查詢資料庫,刪除

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

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

然後建立一個檢視函式

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

函式邏輯很簡單,獲取文章,刪除文章

修改模板

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

但是這裡同時發現一個問題,就是刪除之後,頁面並沒有重新整理,繼續點選則會報錯,所以這裡可以定義一個頁面重定向

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'), 

然後檢視函式

 

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()獲取,再返回回去

繼續修改edit.html檔案,其實就是demo_add.html檔案,將其更名修改即可

    <form action="" method="POST"> {% csrf_token %}
        標題<input type="text" autocomplete="off" id="title"
                 placeholder="請輸入標題" name='title' value="{{ blog.title }}"> <br> <br><br>
        內容 <textarea name="content" id="content"
                     placeholder="請輸入內容" cols="30" rows="10">{{ blog.context }}</textarea>
        <button type="submit">釋出部落格</button>
    </form>

效果

至此,簡單的部落格就搭建完成了,其他的功能將會在後續的學習中逐步新增

以後的django基礎文章也會圍繞這個案例展開討論

本文為素心原創,轉載請註明出處