产品,还是玩具? — Baby Press(缝合怪)

这算是给这个东西写的第二篇正式的文章,本来我的想法很简单,做一个简单的前后端分离的系统来完全替代wp的php渲染机制。

只是,在开发的过程中为了迎合wp的各种现有数据格式、插件、主题、shortcode等等,代码复杂度也在不断的提高。得益于ai的崛起,现在生成代码是真的简单方便,原来数个人的工作,现在一人就可以完成了。尽管哪怕没有ai,我自己也能全部搞定。ai在某些方便还是提高了输出效率,原本很多人不是全栈的,现在也给搞成了全干工程师,哪怕不会,也得硬着头皮上,去验证ai写的各种代码。

我一般不喜欢给ai太具体的描述,但是会给一个准确的描述,实现方法,实现路径,实现目标,所以多数时候ai呈现的代码质量尚可。然而,等到实际上线的时候发现还是一堆问题。

做完准备把wp的前端全部迁移到现在的baby press的前端,尝试部署之后出现了一系列问题,当然很多问题源自于测试不充分。为了解决两个系统的整合问题,需要大量的配置文件和代码。除了openresty的配置文件,前后端也生成了一堆默认的配置模板,当然,这些模板主要是为了提供一些自定义的功能,以及安全性提升加密等等。

这么复杂的系统,现在我觉得更像一个玩具,而不是产品,好的产品应该是简单易用,开箱可用的。

DJANGO_SECRET_KEY=dev-secret-key-change-me
DJANGO_DEBUG=1
DJANGO_ALLOWED_HOSTS=127.0.0.1,localhost
# 浏览器里「页面」的 origin(协议+域名+端口),须与前端访问地址一致;逗号分隔、勿加路径。
# 生产示例(Vue 部署在 i 子域、API 在 api 子域时,必须把 i 子域写进来,否则会 CORS 失败):
# CORS_ALLOWED_ORIGINS=http://127.0.0.1:5173,http://localhost:5173,http://i.zhongxiaojie.cn,https://i.zhongxiaojie.cn
CORS_ALLOWED_ORIGINS=http://127.0.0.1:5173,http://localhost:5173
# Django CSRF 信任来源(协议+域名+端口,逗号分隔;用于 /admin/login/ 等表单提交)
# 生产示例:CSRF_TRUSTED_ORIGINS=https://api.zhongxiaojie.cn,https://i.zhongxiaojie.cn
CSRF_TRUSTED_ORIGINS=http://127.0.0.1,http://localhost

# Django 缓存(评论 UA/IP 查询结果);推荐 Redis,例如 redis://127.0.0.1:6379/1
# 留空则使用 LocMem(仅开发、单进程)
# DJANGO_CACHE_REDIS_URL=redis://127.0.0.1:6379/1
#
# WordPress Object Cache Pro(可选):Django 直写评论后用于定向清理评论缓存。
# 请与 WordPress 端 WP_REDIS_CONFIG 的 host/db/prefix 保持一致。
# 例如 WP_REDIS_CONFIG 里 database=5,则这里应为 redis://127.0.0.1:6379/5
# WP_OBJECT_CACHE_REDIS_URL=redis://127.0.0.1:6379/<database>
# 注意:当前定向清理实现依赖 prefix,建议在 WP_REDIS_CONFIG 中显式配置 'prefix' => 'zhxj'
# WP_OBJECT_CACHE_REDIS_PREFIX=zhxj
# WP_OBJECT_CACHE_BLOG_ID=0

# Baby IP Lookup:本机 lookup-ua 与静态资源公网域名(PNG/SVG 补全)
# UA_LOOKUP_UPSTREAM_BASE_URL=http://127.0.0.1:18765
# UA_LOOKUP_PUBLIC_ASSETS_BASE_URL=https://ip.zhongxiaojie.cn
# UA_LOOKUP_DEFAULT_METHOD=ip2location
# UA_LOOKUP_CACHE_TTL=604800

# WordPress database connection (MySQL/MariaDB)
WP_DB_NAME=wordpress
WP_DB_USER=root
WP_DB_PASSWORD=
WP_DB_HOST=127.0.0.1
WP_DB_PORT=3306

# WordPress table prefix, e.g. wp_ / wp123_
WP_TABLE_PREFIX=wp_

# 是否信任反代/CDN 转发头(CF-Connecting-IP / X-Real-IP / X-Forwarded-For),默认开启。
# - 生产推荐开启,并配置 TRUSTED_PROXY_IP_RANGES,只信任你的网关/CDN 回源 IP 段
# - 若 API 不会被公网直连,且 CDN 回源 IP 经常变:可保持开启并留空 TRUSTED_PROXY_IP_RANGES(有伪造风险)
TRUST_PROXY_HEADERS=1
# 反代终止 TLS(如 Nginx/Edge/CDN)时建议开启,配合 X-Forwarded-Proto 识别 https
SECURE_PROXY_SSL_HEADER_ENABLED=1

# 额外输出“真实 IP access log”(Daphne 的 access log 里显示的是 CDN 节点 IP)
# 打开后会在 stdout 输出形如:[realip] ip=... remote=... status=... GET /api/...
REAL_IP_ACCESS_LOG_ENABLED=0

# 受信任反向代理 / CDN 的 IP 段(CIDR,逗号分隔)。
# 仅当请求来源 REMOTE_ADDR 命中这些 IP 段时,后端才会信任 CF-Connecting-IP / X-Real-IP / X-Forwarded-For。
# - 本机 Nginx 反代:127.0.0.1/32,::1/128
# - 生产:把你的 Nginx/网关内网地址段、或 CDN 回源 IP 段加入这里
TRUSTED_PROXY_IP_RANGES=127.0.0.1/32,::1/128

# API 请求签名(HMAC + ts + nonce)——默认关闭
# 注意:这是“请求验签”,不是“返回加密”。建议仅在 HTTPS 下启用。
# API_SIGNING_ENABLED=1
# API_SIGNING_SECRET=change-me-long-random
# 允许客户端时间漂移(秒),超出即拒绝(防离线重放)
# API_SIGNING_TTL_SECONDS=60
# nonce 去重缓存 TTL(秒),建议 >= API_SIGNING_TTL_SECONDS
# API_SIGNING_NONCE_TTL_SECONDS=300
# 需要签名的路径前缀(逗号分隔)
# API_SIGNING_REQUIRED_PREFIXES=/api/
# 免签路径(逗号分隔,严格 path 匹配),例如健康检查:
# API_SIGNING_EXEMPT_PATHS=/api/health/,/api/ping/

# SMTP / Email backend (Django)
# 不配置则不会真的发出邮件(除非你使用本地控制台邮件后端等)。
# EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
# EMAIL_HOST=smtp.example.com
# EMAIL_PORT=587
# EMAIL_USE_TLS=1
# EMAIL_HOST_USER=your-account@example.com
# EMAIL_HOST_PASSWORD=your-app-password
# DEFAULT_FROM_EMAIL="obaby <no-reply@zhongxiaojie.cn>"
#
# 评论回复邮件通知(前台回复他人评论时)
# COMMENT_REPLY_NOTIFICATION_ENABLED=1
# COMMENT_REPLY_EMAIL_FROM="obaby <no-reply@zhongxiaojie.cn>"
# COMMENT_REPLY_EMAIL_HEADER_IMAGE_URL=https://zhongxiaojie.com/wp-content/uploads/2026/01/uugai.com_1661691241113463.png
# COMMENT_REPLY_EMAIL_HEADER_IMAGE_WIDTH=520
# COMMENT_REPLY_EMAIL_HEADER_IMAGE_HEIGHT=180
# COMMENT_REPLY_EMAIL_HEADER_ALT=obaby 𝐢‍𝐧⃝ void
# COMMENT_REPLY_EMAIL_FOOTER_LINE1=obaby 𝐢‍𝐧⃝ void
# COMMENT_REPLY_EMAIL_FOOTER_LINK_TEXT=oba.by
#
# 与 WordPress CREN 插件退订链接校验一致(取自 wp-config.php)
# WORDPRESS_AUTH_KEY=
# WORDPRESS_AUTH_SALT=
# 与 WordPress 登录 Cookie(wordpress_logged_in_*)校验一致(同样取自 wp-config.php)
# 推荐配置 LOGGED_IN_KEY / LOGGED_IN_SALT;留空时后端会回退到 AUTH_KEY / AUTH_SALT
# WORDPRESS_LOGGED_IN_KEY=
# WORDPRESS_LOGGED_IN_SALT=

# 服务器状态小组件:统计磁盘路径(Linux "/";Windows "C:\\")
# SERVER_PROBE_DISK_PATH=/

#  列表头像:Gravatar 兼容镜像根(路径同 /avatar/{md5}?s=&d=),默认 gg.lang.bi
# GRAVATAR_AVATAR_BASE_URL=https://gg.lang.bi

# 侧边栏「近期文章」:正文无图时的缩略图回退地址
# SIDEBAR_RECENT_POST_FALLBACK_IMAGE_URL=https://zhongxiaojie.cn/wp-content/uploads/2026/01/...

# 评论反垃圾分类(可选;不配置则不调服务、新评论直接通过)
# BABY_ANTI_SPAM_CLASSIFY_URL=http://192.168.1.8:8765/v1/classify
# BABY_ANTI_SPAM_SECRET=change-me-long-random
# BABY_ANTI_SPAM_TIMEOUT=3

# 同一邮箱+IP 对同一篇文章连续提交的最短间隔(秒,0 关闭,最大 120);依赖 Django cache
# COMMENT_SUBMIT_COOLDOWN_SECONDS=0

# 前台文章评论列表分页(GET /api/wp/posts/:id/comments/):按一级评论(线程)分页,每页含该层全部回复;不传 page 时默认最后一页(最新线程)
# WP_COMMENTS_PER_PAGE=50
# 客户端 ?per_page= 的上限(不超过 500)
# WP_COMMENTS_MAX_PER_PAGE=200
# 顶层线程展示:desc=递减(最新在上,默认);asc=递增(最新在下)
# WP_COMMENTS_ORDER=desc

# Nginx FastCGI 缓存:评论审核通过(comment_approved=1)后清理文章页、首页(可选分类页)
# 与 WordPress 插件「Nginx FastCGI Cache Purge on Comment」类似:HTTP GET {站点}/purge{路径}
# NGINX_CACHE_PURGE_ENABLED=1
# NGINX_PURGE_PUBLIC_BASE_URL=https://你的域名
# NGINX_PURGE_TIMEOUT=2
# NGINX_PURGE_SSL_VERIFY=1
# NGINX_PURGE_CATEGORIES=1
# NGINX_CACHE_FILES_PATH=/var/cache/nginx/allinone

# Kama WP Smile:评论表情包资源(给前端下发,避免硬编码域名)
# 若留空,前端会回退使用自身默认/环境变量配置。
# SMILE_PACK_BASE_URL=https://zhongxiaojie.cn/wp-content/plugins/kama-wp-smile-packs/qip_dark_all/
# SMILE_PACK_EXT=gif
# SMILE_PACK_TOKENS=smile,sad,laugh,rofl,blum,kiss,yes,no,good,bad,unknw,sorry,pardon,wacko,acute,boast,boredom,dash,search,crazy,yess,cool,air_kiss,angel,bb,beach,aggressive,blush,bomb,bravo,buba,bye,cry,curtsey,dance,dash2,declare,diablo,don-t_mention,drinks,focus,fool,friends,gamer,give_rose,heart,help,hi,laugh1,mail,mda,mosking,music,negative,ok,popcorm,punish,rtfm,sarcastic,secret,shock,shout,thank_you,vava,victory,beee,big_boss,wink,yu,cray2,dash3,girl_pinkglassesf,girl_prepare_fish,locomotive,lazy2,agree,feminist,fuk,fuck,jester,hunter,moil,offtopic,paladin,shablon_01,spam,vinsent,warning,yahoo,superman,girl_witch,fans,beta,butcher,elf,first_move,gamer2,girl_cray2,girl_cray,girl_blum,girl_dance,girl_crazy,girl_haha,heat,hysteric,nhl_crach,nhl_fight,pig_ball,aikido,angry2,banned,alcoholic,bb2,flood,gamer3,girl_devil,flirt,girl_cray3,girl_drink,girl_hide,girl_hospital,girl_impossible,girl_in_love,girl_mad,girl_sad,girl_sigh,girl_smile,girl_to_take_umbrage,girl_wacko,lazy1,nono,man_in_love,party,scenic,queen,paint,crazy_pilot,dwarf,hang1,haha,grin,good3

好处呢,就是所有的系统配置基本都在这个配置文件中控制即可,无需去各种地方设置了,修改之后重启服务即可。

之所以说是玩具,其实我在wp之外添加了另外一个简单的管理后台,这也是为什么选了django 而没有直接用fastapi。

这个东西最初的目的也不是为了替换wp,所以很多功能也没必要再实现一遍了。基础的操作还是在wp的后台完成。

当然,做完折腾到零点多,补全了一些功能之后,最终还是上线了,这就是目前看到的页面效果,lighthouse测试:

ipv4测试:

ipv6测试:

对于wp的主题,也修改了下页面宽度,与现在的vue的页面宽度基本一致了:

http://zhongxiaojie.com

代码地址:

https://gitee.com/obaby/baby-press-public



闺蜜圈APP

You may also like

32 comments

  1. Level 4
    Google Chrome 109.0.0.0 Google Chrome 109.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition cn中国–上海–上海 腾讯云 IPv4

    当然是obaby pro max ultra
    精品大宝贝

  2. Level 2
    Google Chrome 147.0.0.0 Google Chrome 147.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition cn中国–陕西省–咸阳市–杨陵区–中国电信–公众宽带 IPv6

    现在我看到的这个页面就是你的新前端生成的吗?感觉和原来没有丝毫区别,原来就很快,所以对速度感觉也不强。但佩服你们技术大佬,可以随心所欲的折腾。

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

      cn是前后端分离的,com是wp的系统,嘎嘎。
      基本是照着wp主题抄的

      1. Level 2
        Google Chrome 147.0.0.0 Google Chrome 147.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition cn中国–陕西省–咸阳市–杨陵区–中国电信–公众宽带 IPv6

        又多刷了几篇,果然很快。看能不能搞成一键部署,门槛低的话我们这些不懂技术的也能跟着沾光。

        1.  公主 Queen Queen 
          Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

          现在这个东西的主要问题在于nginx的配置,因为要多系统同一个域名,所以就有些麻烦。
          单独的前后端部署反而没那么麻烦。

  3. Level 1
    Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition cn中国–北京–北京 鹏博士BGP IPv4

    路过发现真的好厉害, 这个前端好快. 我之前一直对django有朴素的偏见(我错了).

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

      嘻嘻,其实python蛮不错的,我开发过一个系统,对接mq数据,3s一千条数据,直接往时序数据库扔,速度贼拉快,不丢包,超稳定。哈哈哈。
      现在系统资源占用率非常低,如果要高并发,多进程多线程都可,扩展性还是蛮强的。目前加了简单的防重放攻击,以及请求校验,不然应该还能再稍微快那么一丢丢。

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

      嗯嗯,主要是精简了很多东西,分离渲染比php的这种模板渲染效率应该是高一些,哪怕现在已经有静态缓存了。

      1. Level 4
        Google Chrome 147.0.0.0 Google Chrome 147.0.0.0 Windows 11 x64 Edition Windows 11 x64 Edition cn中国–江苏 移动 IPv4

        对这东西一知半解,PHP现在落后了吗?发现好多新项目都是基于Node.js、Tomcat的

        1.  公主 Queen Queen 
          Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

          流行趋势而已,没什么落伍不落伍,真正牛逼的都是直接改系统底层驱动解释器,例如facebook魔改的php。哈哈哈。
          现在只是node流行而已。
          就像当年阿里带火了java一样,没什么好不好的。只有合适不合适。

  4. Level 1
    Google Chrome 147.0.0.0 Google Chrome 147.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition cn中国–江苏省–南京市–溧水区–中国联通–3GNET网络 IPv6

    厉害了,比如说一个嵌套很深的子评论 如果递归查询子评论的话 条数太多是不是会把cpu干爆了。

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

      你可以试试,大概率不会,有redis缓存。哈哈哈

      1. Level 1
        Google Chrome 147.0.0.0 Google Chrome 147.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition cn中国–江苏省–南京市–溧水区–中国联通–3GNET网络 IPv6

        测试结果发你邮箱了!

        1.  公主 Queen Queen 
          Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

          哈?没收到啊,不要直接回复邮件,那就是用来发通知的。

  5.  Level 2
    Microsoft Edge 146.0.0.0 Microsoft Edge 146.0.0.0 Android 10 Android 10 cn中国–江西省–九江市–德安县–中国联通–3GNET网络 IPv6

    baby 你既然都重学wp渲染机制了,为什么不直接搞个新博客程序 smile

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

      因为我不想迁移数据,哈哈哈 rofl

    2.  Level 4
      Google Chrome 148.0.0.0 Google Chrome 148.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition cn中国–上海–上海–闵行区 电信 IPv4

      我也觉得,既然这样了,直接重新做一个,不是更好么?
      设计它数据库和WP保持一致,就可以直接导入了。

      1.  公主 Queen Queen 
        Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

        那不就是现在直接基于wp的数据库搞,哈哈哈。干嘛还要弄个一样的呢

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

      唉,也有失败的时候,快被华为折腾麻了。app发版连续折腾好几个月了,各种驳回。

      1.  Level 1
        Google Chrome 147.0.0.0 Google Chrome 147.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition cn中国–江苏–徐州 电信 IPv4

        我今天突发奇想,本来想把新写的博客发到很久没更新的微信公众号的,结果连续给我驳回了两次,说什么内容违反社区规定或者法律政策什么的,搞得我直接没心情了,不发了。像你这种各种驳回还有心气继续搞的心态,是真的强👍

        1.  公主 Queen Queen 
          Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

          没招,就是纯粹不服,驳回以前还有截图,现在截图都没了。
          我就找人工。

  6.  Level 4
    Google Chrome 148.0.0.0 Google Chrome 148.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition cn中国–上海–上海–闵行区 电信 IPv4

    我觉得,玩具和产品是相对而言的,要看你从什么角度去看待,用什么态度对待它。
    如果你是自己折腾的玩,单纯分享给广大网友体验一下,而不是把它做成一个可以赚钱的项目来经营和维护,那它就是玩具。
    如果你考虑把它商业化(哪怕本身免费版,但是通过其他方式去赚取其他来源的收入),觉得自己有义务去做好更新维护,并听取用户的建议和需求,进行更新。那它就是产品。

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

      收费服务不干,太繁琐了。搞不动。

  7. Level 3
    Microsoft Edge 146.0.0.0 Microsoft Edge 146.0.0.0 Android 10 Android 10 cn中国–安徽省–合肥市–蜀山区–中国电信–CTNET网络 IPv6

    感觉是很快,特别是评论提交秒提交

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

      这个东西比wp的ajax要快一些。并且所有的功能都是本地实现的,没有外部请求。

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–胶州市–中国联通–3GNET网络 IPv6

      哈哈哈,这比喻,就离谱

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注