自己动手写个微型 CSDN 吧,还能实现网页版 Blink,No.1

网友投稿 505 2022-05-30

橡皮擦,一个逗趣的互联网高级网虫。新的系列,让我们一起进入 Django 世界。

十九、微微型 CSDN 项目

Django 框架的学习之旅还在继续,预计再有 10 篇以上才可以封笔,果然框架系列专栏是最难写的。

接下来的几篇博客将基于 Django 框架完成一个微型的 CSDN 博客项目,要实现的核心功能是发布博客以及发布 Blink,还会实现博客中的评论与友情链接功能。

该项目特别适合作为大学期末项目,如果你看到了本项目,要好好把本项目制作过程学习完毕,对你非常有帮助。

简单拆解该项目模块:

用户模块;

文章与分类模块;

Blink 模块;

菜单模块;

友情链接模块;

评论模块。

19.1 补充知识之 Django 后台模型方法篇

在上一篇博客中介绍了 Django 的后台模型属性,本篇博客涉及的项目开始前,需要先把后台模型方法补充完整。

19.1.1 save_model 方法

重写该方法得到的结果就是保存数据时,可以在数据入库前进行细节处理。

方法原型如下:

def save_model(self, request, obj, form, change): """ Given a model instance save it to the database. """ obj.save()

其中 request 是 HttpRequest 实例,obj 是模型实例,form 表单传递进来的实例,change 是布尔值,用来标记是新增数据还是更新数据。

def save_model(self, request, obj, form, change): print(form) obj.name = "xxx" super().save_model(request, obj, form, change)

上述代码不管前台传递过来的是何值,最终 name 字段得到都是 xxx,同时输出 form 得到如下内容:

可以看到这里是填写的表单内容与 HTML 标签。

19.1.2 delete_model 方法

重写该方法可以在进行删除操作的时候,处理一些细节。

方法原型如下:

def delete_model(self, request, obj): """ Given a model instance delete it from the database. """ obj.delete()

该方法的调用依旧采用 super().delete_model() 。

19.1.3 其余简单方法

get_readonly_fields 方法

返回一组只读字段。

get_autocomplete_fields

返回一组自动完成字段,与 autocomplete_fields 使用方法一致。

get_prepopulated_fields

返回一组自动填充字段。

get_list_display

返回表格字段,与 list_display 一致。

get_list_display_links

返回一组超链接显示的字段。

get_fields

返回一组字段,与 fields 一致。

其余更多方法不再进行罗列说明,除了官方手册可以进行学习以外,还可以打开 Django 文件夹下 admin 目录中的 options.py 文件,里面有这些方法的原型。

纯粹学习 API 是没有办法掌握 Django 中所有内容的的,还是要把他们应用到项目中。

19.2 微型 CSDN 初始化

准备工作与复习工作完成之后,就可以对微型 CSDN 项目进行初始化操作了,创建项目,创建 APP。

django-admin startproject my_csdn cd my_csdn python manage.py startapp csdn

接下来在 csdn 文件夹中创建一个 templates 目录文件,然后在该目录中再嵌套一个 csdn 目录。

按照常见项目结构,在创建一个前端文件夹和一个后端文件夹,分别是 frontend 和 backend。

相同目录再创建一个 common.html 文件,该文件用于存放前后端通用的页面代码。

最终得到的目录结构如下:

在 common.html 中输入如下代码,重点关注 block 部分。

{% load static %} {% block title %}{% endblock%}