网站LOGO
博客 | 棋の小站
页面加载中
2月21日
网站LOGO 博客 | 棋の小站
记录学习,心得,状态,生活。
菜单
  • 热评
    用户的头像
    首次访问
    上次留言
    累计留言
    我的等级
    我的角色
    打赏二维码
    打赏博主
    一个星期,网站重构计划
    点击复制本页信息
    微信扫一扫
    文章二维码
    文章图片 文章标题
    创建时间
  • 一 言
    确认删除此评论么? 确认
  • 本弹窗介绍内容来自,本网站不对其中内容负责。
    按住ctrl可打开默认菜单

    一个星期,网站重构计划

    · 原创 ·
    闲聊杂谈 · 闲谈
    共 4379 字 · 约 9 分钟 · 705

    文章
    摘要

    作者在过去一个星期内进行了网站重构计划,并分享了已经完成的工作和未来的计划。主要改动包括将所有功能整合到一个域名下,使用Flask+SQLAlchemy+MySQL作为后端框架,以及对安全性的增强措施。已实现的功能包括后台数据模型定义、数据库迁移工具的使用等。作者计划保留评论审核、图片上传至又拍云、博客结构等功能,并计划去除一些功能和重新设计页面。未来打算新增功能包括邮箱订阅和个人注册。

    一个星期前我曾在我的博客内发布了一个目标:重构自己的网站,目前这个计划也在进行中了。由于好久不接触前端,也正在复习和学习新知识,所以也一直没什么进展,不过没什么进展不代表没进展。此文分享一下自己做了什么工作以及计划是什么。

    首先最大的改动就是我打算将我所有已有的功能都整合到一个域名中,这样就不需要搭建多个后台,一个后台就可以管理全部站点,而且每个页面都不需要单独设计,套用即可。

    然后就是网站功能。我的各个网站功能应该都不会阉割,有必要的我还是会留下来。至于页面,我不想花费太多时间从零写一个页面,因此我在网上找了两个模板,一个后台的一个前台的。

    其实前端实现没什么难度,主要难在后端。现存的网站里有很多功能我都想复刻,但以前从未尝试过:

    • 文章编辑时粘贴图片。即剪贴板里的最新内容是一张图片,在文章编辑器里粘贴时Typecho的UpyunFile会自动将文件上传至又拍云存储内,并在文本框内粘贴链接。
    • 音乐播放。要使用metingAPI,说实话我不太想用php版本的MetingAPI,但我没找到有Python版本的,这个还是看情况。
    • Markdown编辑器。Markdown编辑器肯定是有的,但是它的样式实现却是个难题。当然最笨拙的方法就是覆盖掉已有的CSS样式,或干脆删掉原有的CSS样式,重新创建一个,因为挨个研究生成的HTML代码的格式也很浪费时间。
    • 各种安全问题。比如评论里是否有XSS攻击、后台登录后获取到的Cookie有没有被加密、后台API会不会检测到非预期的请求。

    最后就是说说已经实现的功能吧,这七天也干了一些事情。

    后端框架已经确定就是用Flask+SQLAlchemy+MySQL。这三个语法都超级简单,不需要什么复杂的知识,使用好AI、官方文档、搜索引擎,加上现在PyCharm有很智能的AI自动补全和通义灵码,大大减少了工作量。通义灵码还可以为我生成测试数据,以使我方便地找出预料外的错误。

    后台是使用SQLAlchemy定义的数据模型,所以我只需要将精力放在定义数据模型即可,不需要执行繁琐的SQL语句,也不需要自己封装ORM。

    数据模型需要更改时,数据库可能会存在已有数据,若删除所有表再重建则数据会丢失,SQLAlchemy貌似也没有迁移功能。所以我选择使用Alembic工具迁移。我写了一个非常简单的迁移文件,只需要执行这个文件,Alembic就可以检测模型类的字段更改,并执行数据库迁移。实际上Alembic是使用SQLAlchemy的execute执行了数据库层面的alter语句,所以才不会影响到数据库内的数据。即使是一个小更改,如将一个字段的nullable从False设为True,Alembic也能检测到,还是很方便的。在开发过程中数据模型需要频繁更改,因此这个工作也是不可缺少。

    后台的安全校验现在很完善,并且已经过初步测试。现在主要是采取三个措施。(虽然在这里说可能会被攻击者注意到,但我觉得概率应该没那么大。)

    1. 站点初始化使用密码校验(未来会改,因为这个太低级)。即使是个人站点,源码不开源,也要有一个像样的开始仪式,这样才能让自己满意。站点初始化主要就是安装数据库和插入初始数据。就像Typecho一样,初始化站点时,Typecho会为我们添加一个默认文章、一个默认分类和一个评论。在我的初始化程序中也使用了这一点。由于Typecho在安装后会对install做一些处理以确保预期外的非法安装,我对我的安装程序也加了一个安装保护。现在仍属于开发期,我就给安装加了一个密码,管理员输入密码以后才能安装。
    2. Referer验证。熟悉Flask框架的开发者都知道,Flask是通过装饰器定义路由的。为配合Flask的特性,也为了简洁,我自己定义了一个装饰器,在需要进行Referer验证的函数前加上即可。加上Referer验证的目的是阻止其他非imqi1.com域名访问的,但Referer毕竟存在于Header中,攻击者仍然可以通过伪造请求头来伪造请求,因此还有一层防护。
    3. Token验证。这是目前最严格的安全验证。与Referer相同,Token也是通过装饰器使用。Token使用HS256算法加密,并只有管理员可获取。页面在请求时,必须附带Token,且Token必须有效且未过期(Token是有有效期的)。由于Token验证安全级别很高,且只有管理员才能获得,因此这一验证方式主要用在后台管理中。

    未来可能会使用更严厉的安全验证方式,比如在评论系统中加上一个Token,且时效会很短。相必最近各位都遭受了垃圾评论的困扰,所以这个大概率也是会加的。

    qi1.zone这个域名可能不会再运行下去(也有可能会托管至Vercel上,主要是因为现在的华为云服务器快过期了,qi1.zone在京东云那边现在已经备案完了,所以可能会接入到京东云)。全新的网站会托管到京东云上,imqi1.com现在已经在备案中了,预计新站点在2月初左右能上线。当然彼时上线的并不是最终版,可能界面会很拉跨、功能会很不全面,甚至不上线。

    接下来看看打算的东西吧。怕自己忘,所以单独写了一个。当然,可能不会完全按照下方这样做。

    未来打算保留的功能,即原网站有,新网站也会有的:

    • 评论审核,使用百度内容管理平台;
    • 仍使用又拍云存储图片,且保留原来方便的在文本框中粘贴图片就能自动上传至又拍云对应目录;
    • 博客的数据结构,指原有分类、标签,文章封面、摘要及其他必要字段;
    • 照片、音乐、日记、笔记等内容,都会合到一起。

    未来打算去除的功能,指原网站有,新网站没有的:

    • 博客的众多页面,如旅行、音乐、照片、豆瓣、steam等;
    • API管理。以后API皆为私人API,所有API都会加鉴权,且不会提供文档;
    • 小工具,如网站起始页、代码参考等。它们会可能继续留在qi1.zone域名内,但不会留在imqi1.com域名内,可能会使用云存储或Vercel等平台托管。
    • 云盘。云盘文件不再共享,云存储也会删除。

    未来打算大改的功能,即原网站有,新网站可能有,或以不同形态存在的:

    • 博客内的各种文章以后会按类别存在于新站点的不同处。现有文章大多数都为技术分享和社会思考,它们会变为新站点的两大分类。学习编程会迁移至笔记中,并和原云笔记内容合并。记录生活会迁移至新站点的分享中,并和记事本内的内容合并。博客内我认为的一些低质文章会翻新,如版本更迭较快的,我会按原教程下载新版,并酌情更改,届时文章的创建时间就是文章翻新的时间。有些我觉得实用性不大的低质文章或内容高度相似的文章会整合在一起,或是删除。也就是说,将来的站点将不再是一个纯粹的技术分享站,新站点的内容会更加清晰、更加优质、更加实用。你可以点击导航栏上方的按钮查看你想阅读的文字类型。比如你想找黑科技,那你就点击【实用教程】,这里面会分享一些软件啊、介绍一些实用技术。再比如你想看我拍摄的照片,那你就可以点击【照片展示】。
    • 原记事本内容太杂,也要拆分。和博客一样,会分成关于生活的、分享音乐的、分享照片的、分享文案的,都会和其他相关内容合并到一起。
    • 新站点的友链功能会重构。将来的友链将会带有强烈的个人主观倾向,具体体现在排名意图非常明显,会挑选一些非常优秀的、我经常看并且学习的博客放到首页。可不是你把我的站点放在首页我就把你的站点放在首页那样了,因为友链是互相学习的,那样做就违背了初衷。将来我也会单独使用一个线程管理友链,会有一个爬虫定期访问站点并随时调整站点的有效状态以保护我自己的站点(检测频率大概1小时一次)。若站点链接暂时无法访问会发邮件提醒博主,也会提醒对方及时排查原因并恢复站点。该爬虫也会设置一个单独的请求头,【User-Agent:IMQI1.com FriendLink Detector】之类的,各位开了反爬虫的可以设一下这个,或者告诉我不进行友链检测。新站点的友链分级也会更明显,届时所有优秀的友链都会加一个独一无二的标签,以方便来访者查阅自己需要的站点。(想得挺好,不过我也有实现它们的信心)

    未来打算新增的功能:

    • 邮箱订阅。未来博客推荐阅读的博客文章、推荐听的音乐、看的照片、优秀的文案等,会加上【推荐】标签,每周(可能)会定时向订阅者的邮箱推送我认为有价值,值得一读的个人原创文章。
    • 个人注册。当然不需要密码,也不需要各种繁琐的操作。由于现有的博客评论都是四要素:昵称、邮箱、站点和评论内容,每次评论时这些内容都需要访客主动填写。未来评论系统会保留这四个输入框,同时提供更加便捷的【登录】按钮。访客只需要在本站注册后,填写自己的昵称、链接并提交,信息就会存入站点的数据库内。下次评论前,只需要使用自己的邮箱登录,其他信息就可以无需手动填写。(特别提示:此功能我目前未打算和友链功能联动。)个人注册后,安全也是少不了的,将来站点可能会为访客注册和登录提供和后台管理相同安全级别的Token验证,让攻击者更难伪造你的真实身份。

    上面的都是我自己作的需求分析。实际上作为一名全栈工程师,以上工作只是小菜一碟。我会努力实现上面的功能的。希望我的这个新网站能在我的简历上贴上一句话:有一个自己独立运营、功能全面、内容丰富、技术成熟的前后端分离网站。

    将来网站正式运行的时候,qi1.zone可能就不再运行了,仅留作备份,待域名过期后这个网站也就不存在了。当然,qi1.zone现在还是会继续运行的,但可能更新不会很频繁,并且内容依旧很杂。(因为站点的功能就在这,这个就是博客,就是什么都写)

    将来的站点更偏离了博客,更加是一个综合性站点,包含个人主页、记事、技术、笔记都有,那样内容就更加聚合,分类更明显,读者也就更能找到自己要查找的东西。

    说句心里话,从大一开始刚入计算机,看到高年级学生做的网页,我羡慕不已。但我当时觉得,这种技术肯定特别难,我肯定学不会。再到大二,自己学习了一些前后端知识,能动手写出一些简单的网页,但看到大厂的网页(百度、腾讯),我还是觉得这目标离我太遥远。再到大三,偶然的机会,让我接触了云,我开始动手运营自己的网站。但我还是只会用别人的框架,并用我有限的知识让它变得更符合我自己想要的模样。到了现在,我突然发觉我有能力实现以前觉得遥不可及的目标(拥有一个真正属于自己的、全部都是自己编写的网站)了。这就是我在此立下誓言,并要努力实现它的原因。

    声明:本文由 (博主)原创,依据 CC-BY-NC-SA 4.0 许可协议 授权,转载请注明出处。

    还没有人喜爱这篇文章呢

    现在已有

    19

    条评论
    发一条!
    1. 头像
      云晓晨CatchYun
      • 等级:Lv.5
      • 角色:首页 · 好友
      • 在线:本月

      哇哦,牛蛙,期待你的新博客

      · · · 山东-东营
      1. 头像

        哈哈,谢谢,目前仍在开发中

        · · · 海外
    2. 头像
      时光日志
      • 等级:Lv.2
      • 角色:生活 · 好友
      • 在线:三月内

      佩服

      · · · 海外
      1. 头像

        😁

        · · · 海外
    3. 头像
      广树
      • 等级:Lv.1
      • 角色:访客
      • 在线:三月内

      正巧,我这边也刚好重构完博客,花了2个多月的时间,不仅框架全换,连数据库类型都换了。

      · · · 海外
      1. 头像
        广树

        自己开发的好处就是好多功能都可以定制。

        · · · 海外
        1. 头像
          广树
          • 等级:Lv.1
          • 角色:访客
          • 在线:三月内

          是的,现在就在疯狂定制

          · · · 海外
    4. 头像
      宇阳
      • 等级:Lv.2
      • 角色:访客
      • 在线:三月内

      从小就希望能够从0到1独立开发一款个人项目,因此我选择了走全栈这条路。目前断断续续开发1年有余,打算在今年七月之前发布

      · · · 海外
      1. 头像
        宇阳

        我的梦想就是当一名全栈工程师,现在越来越近了

        · · · 海外
    5. 头像
      Dabenshi
      • 等级:Lv.2
      • 角色:访客
      • 在线:三月内

      这工程不小啊

      · · · 北京-北京
      1. 头像
        Dabenshi

        是啊,工程不小

        · · · 海外
    6. 头像
      风记星辰
      • 等级:Lv.2
      • 角色:访客
      • 在线:三月内

      说的很对,其实前端实现没什么难度,主要难在后端。要说前端难就难在如何创意与设计,代码不难。

      · · · 辽宁-沈阳
      1. 头像

        创意的话现在网上有很多优秀的模板和设计,可以参考一下,独立思考的话还是很难的

        · · · 海外
    7. 头像
      obaby
      • 等级:Lv.4
      • 角色:综合 · 好友
      • 在线:本月

      加油

      · · · 山东-青岛
      1. 头像
        obaby

        谢谢小姐姐

        · · · 海外
    8. 头像
      TeacherDu
      • 等级:Lv.5
      • 角色:首页 · 好友
      • 在线:本月

      这是打算自己写框架了?

      · · · 北京-北京
      1. 头像
        TeacherDu

        是的

        · · · 海外
        1. 头像
          TeacherDu
          • 等级:Lv.5
          • 角色:首页 · 好友
          • 在线:本月

          进度如何?

          · · · 北京-北京
          1. 头像
            TeacherDu

            现在后端写的差不多了 但是页面没开始写

            · · · 辽宁-沈阳
    博客logo 博客 | 棋の小站 记录学习,心得,状态,生活。
    ICP 冀ICP备2023007665号

    🕛

    本站已运行 299 天 11 小时 30 分

    🌳

    建站:Typecho 主题:MyLife

    👁️

    今日访问量:1610 昨日访问量:1607
    棋の小站 © 2024.
    网站logo

    博客 | 棋の小站 记录学习,心得,状态,生活。
     
     
     
     
    壁纸