自己動(dòng)手寫個(gè)微型 CSDN 吧,還能實(shí)現(xiàn)網(wǎng)頁(yè)版 Blink,No.1
橡皮擦,一個(gè)逗趣的互聯(lián)網(wǎng)高級(jí)網(wǎng)蟲。新的系列,讓我們一起進(jìn)入 Django 世界。
十九、微微型 CSDN 項(xiàng)目
Django 框架的學(xué)習(xí)之旅還在繼續(xù),預(yù)計(jì)再有 10 篇以上才可以封筆,果然框架系列專欄是最難寫的。
接下來(lái)的幾篇博客將基于 Django 框架完成一個(gè)微型的 CSDN 博客項(xiàng)目,要實(shí)現(xiàn)的核心功能是發(fā)布博客以及發(fā)布 Blink,還會(huì)實(shí)現(xiàn)博客中的評(píng)論與友情鏈接功能。
該項(xiàng)目特別適合作為大學(xué)期末項(xiàng)目,如果你看到了本項(xiàng)目,要好好把本項(xiàng)目制作過(guò)程學(xué)習(xí)完畢,對(duì)你非常有幫助。
簡(jiǎn)單拆解該項(xiàng)目模塊:
用戶模塊;
文章與分類模塊;
Blink 模塊;
菜單模塊;
友情鏈接模塊;
評(píng)論模塊。
19.1 補(bǔ)充知識(shí)之 Django 后臺(tái)模型方法篇
在上一篇博客中介紹了 Django 的后臺(tái)模型屬性,本篇博客涉及的項(xiàng)目開(kāi)始前,需要先把后臺(tái)模型方法補(bǔ)充完整。
19.1.1 save_model 方法
重寫該方法得到的結(jié)果就是保存數(shù)據(jù)時(shí),可以在數(shù)據(jù)入庫(kù)前進(jìn)行細(xì)節(jié)處理。
方法原型如下:
def save_model(self, request, obj, form, change): """ Given a model instance save it to the database. """ obj.save()
其中 request 是 HttpRequest 實(shí)例,obj 是模型實(shí)例,form 表單傳遞進(jìn)來(lái)的實(shí)例,change 是布爾值,用來(lái)標(biāo)記是新增數(shù)據(jù)還是更新數(shù)據(jù)。
def save_model(self, request, obj, form, change): print(form) obj.name = "xxx" super().save_model(request, obj, form, change)
上述代碼不管前臺(tái)傳遞過(guò)來(lái)的是何值,最終 name 字段得到都是 xxx,同時(shí)輸出 form 得到如下內(nèi)容:
可以看到這里是填寫的表單內(nèi)容與 HTML 標(biāo)簽。
19.1.2 delete_model 方法
重寫該方法可以在進(jìn)行刪除操作的時(shí)候,處理一些細(xì)節(jié)。
方法原型如下:
def delete_model(self, request, obj): """ Given a model instance delete it from the database. """ obj.delete()
該方法的調(diào)用依舊采用 super().delete_model() 。
19.1.3 其余簡(jiǎn)單方法
get_readonly_fields 方法
返回一組只讀字段。
get_autocomplete_fields
返回一組自動(dòng)完成字段,與 autocomplete_fields 使用方法一致。
get_prepopulated_fields
返回一組自動(dòng)填充字段。
get_list_display
返回表格字段,與 list_display 一致。
get_list_display_links
返回一組超鏈接顯示的字段。
get_fields
返回一組字段,與 fields 一致。
其余更多方法不再進(jìn)行羅列說(shuō)明,除了官方手冊(cè)可以進(jìn)行學(xué)習(xí)以外,還可以打開(kāi) Django 文件夾下 admin 目錄中的 options.py 文件,里面有這些方法的原型。
純粹學(xué)習(xí) API 是沒(méi)有辦法掌握 Django 中所有內(nèi)容的的,還是要把他們應(yīng)用到項(xiàng)目中。
19.2 微型 CSDN 初始化
準(zhǔn)備工作與復(fù)習(xí)工作完成之后,就可以對(duì)微型 CSDN 項(xiàng)目進(jìn)行初始化操作了,創(chuàng)建項(xiàng)目,創(chuàng)建 APP。
django-admin startproject my_csdn cd my_csdn python manage.py startapp csdn
接下來(lái)在 csdn 文件夾中創(chuàng)建一個(gè) templates 目錄文件,然后在該目錄中再嵌套一個(gè) csdn 目錄。
按照常見(jiàn)項(xiàng)目結(jié)構(gòu),在創(chuàng)建一個(gè)前端文件夾和一個(gè)后端文件夾,分別是 frontend 和 backend。
相同目錄再創(chuàng)建一個(gè) common.html 文件,該文件用于存放前后端通用的頁(yè)面代碼。
最終得到的目錄結(jié)構(gòu)如下:
在 common.html 中輸入如下代碼,重點(diǎn)關(guān)注 block 部分。
{% load static %}