自己动手写个微型 CSDN 吧,还能实现网页版 Blink,No.1
橡皮擦,一个逗趣的互联网高级网虫。新的系列,让我们一起进入 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 %}