# django-charge-blog **Repository Path**: huang_zhi_xin/django-charge-blog ## Basic Information - **Project Name**: django-charge-blog - **Description**: 个人博客、记账小程序 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-12-26 - **Last Updated**: 2024-12-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # django-charge-blog #### 介绍 django-charge-blog 包含了网页端的个人博客和工具箱功能、微信小程序端的个人记账、生活动态和相册功能。 #### 软件架构 #### 1、重写serpy,提高 DRF中的序列化性能 > https://mp.weixin.qq.com/s/38RvBJLWoUgpME75fiuTyw #### 2、使用Dynaconf 动态配置环境 > https://mp.weixin.qq.com/s/t_XmdCyPOGcdJenb571hdQ #### 3、使用nplusone,优化n+1 查询问题 > https://mp.weixin.qq.com/s/J9apIL6K1WRfwdXT5SlbUQ #### 4、采用S3储存 > https://mp.weixin.qq.com/s/T6u9c1TfnivZ9_HOsk3hYg #### 5、使用django-denorm-iplweb,进行非规范化数据库设计 > https://mp.weixin.qq.com/s/0mbNcN8EVykxXg9Rlf_JGw ```python from denorm import CountField from django.db import models class Album(models.Model): picture_count = CountField('picture_set') ``` #### 6、使用工厂方法优化支付宝、微信账单导入 > https://mp.weixin.qq.com/s/zDTYyye9XE1HSQ-qx9Mspw ```python import bill_import from inspect import getmembers, isclass, isabstract def _create_class_map(): class_list = [] concrete_classes = getmembers(bill_import, lambda m: isclass(m) and not isabstract(m) and issubclass(m, bill_import.BillCsvImport)) for class_name, concrete_class in concrete_classes: class_list.append(dict(class_name=class_name, concrete_class=concrete_class)) return class_list ``` #### 7、付宝、微信账单导入时进行批量创建 > https://mp.weixin.qq.com/s/4uYmg1FAT-n3ptrvGXJH9Q ```python class BulkCreateListSerializer(serializers.ListSerializer): def create(self, validated_data): result = super(BulkCreateListSerializer, self).create(validated_data) try: self.child.Meta.model.objects.bulk_create(result) except IntegrityError as e: raise ValidationError(e) # 批量创建后的操作 return result class ExpenseImportSerializer(serializers.ModelSerializer): ... def create(self, validated_data): instance = Expense(**validated_data) if isinstance(self._kwargs['data'], dict): # 字典为单个创建, 批量创建为list instance.save() return instance class Meta: ... list_serializer_class = BulkCreateListSerializer ``` #### 8、使用django-mptt,对目录数据在数据库中使用层级结构进行存储 > https://mp.weixin.qq.com/s/qBdFFIAwI0d36hcpQcyxUA #### 安装教程 1. xk-backend 新建.secrets.yaml文件,配置数据库信息 ```shell development: DEBUG: false # Security SECRET_KEY: 'django-insecure-g*m*_$28*#xkkt+fvh^u6f*n3e0c=b)gz@80%vdk3=)mbc!=4b' # S3 如果使用对象存储时配置 # AWS_ACCESS_KEY_ID: '' # AWS_SECRET_ACCESS_KEY: '' # AWS_STORAGE_BUCKET_NAME: 'xk-' # AWS_S3_REGION_NAME: '' STATIC_URL: '/static/' MIDDLEWARE: - debug_toolbar.middleware.DebugToolbarMiddleware # - core.drf.middleware.SQLPrintingMiddleware # - core.drf.middleware.SqlPrintingMiddleware - dynaconf_merge_unique INSTALLED_APPS: - debug_toolbar # django-debug-toolbar - dynaconf_merge_unique # Database DATABASES: default: ENGINE: django.db.backends.postgresql HOST: 127.0.0.1 PORT: 5432 NAME: db_name USER: db_user PASSWORD: db_password CONN_MAX_AGE: 500 ``` 或者使用docker运行 ```shell docker-compose -f docker-compose-staging.yaml up -d --build ``` 执行初始化数据命令 ```shell python3 manage.py initdata -all ``` 2. small-love ```shell 在`utils/request.js`文件中配置服务器路径和静态文件路径 export const BASE_URL = 'http://192.168.0.108:8200/api' export const DOMAIN_NAME = 'http://192.168.0.108:8200' ``` #### 页面展示 ##### **xk-backend** Demo地址:https://yunixiangsui.cn/ ![img_1.png](images/xk-backend/80727d68265a120db79f55fb1508260.jpg) ![img_1.png](images/xk-backend/a531247bf127d6c906ecca6386e66bc.jpg) ![img_1.png](images/xk-backend/85d08bbde53d5a8c84a43828c58750c.jpg) ![img_1.png](images/xk-backend/ebac06996ce2049891691c29ed9a11a.jpg) ##### **small-love** ![Demo](images/small-love/gh_9ac0aad4a0a4_430.jpg) ![img_1.png](images/small-love/1d458c0606d49286faf986d31a7fbe3.jpg) ![img_1.png](images/small-love/5bca21ec040882d1124aaf8f12992a3.jpg) ![img_1.png](images/small-love/5dd4cf2869a0f36fadda3c14ddc79cf.jpg) ![img_1.png](images/small-love/8eb33ad8fc3a7545a5eeccf3d4522f0.jpg) ![img_1.png](images/small-love/06f732c6d8318430dd99ead6e5a30cf.jpg) ![img_1.png](images/small-love/ef7f675a68b32d2c94fb70e3fcd5456.jpg)