Hexo博客标签管理系统

  1. 项目简介
  2. 项目思路
  3. 用到的知识点
  4. 开发日记
    1. 2019.4.27
    2. 2019.5.3
    3. 2019.5.5
    4. 2019.5.6
    5. 2019.5.7

项目简介

使用原生python编写

项目地址:https://github.com/r0co/HexoBlogManageSystem

做这玩意完全是为了熟悉python,项目实用性还有待考量。。。。

项目思路

1.扫描source/_post文件夹中的.md文件,获取它们的属性(例如tagscategories等)

2.将所有文件的属性存储在数据库中

3.用户可以自行更改数据库中各字段的值,这些值将会在第4步中用到

4.系统根据当前数据库中的值来改变source/_post中对应.md的各项属性,从而达成更改标签、分类的目的

用到的知识点

1.正则表达式(re库)

2.文件的相关操作(os,shutil,getopt)

3.类的相关概念

4.python3连接数据库(pymysql)

开发日记

2019.4.27

不管是走渗透测试路线还是安全开发亦或是安全研究路线,Python都是必须学会的语言之一。我认为学习一门编程语言最快也最稳妥的方法就是在大概看一本书之后上手做项目,在做项目的过程中就会知道自己的不足。这时候再回过头来看书就会更有兴趣一点,也就能学的更快。

第一次接触Python是在大一上的时候,当时一边看北理的Python教程一边敲代码。因为是照抄视频上的代码,所以也没怎么记住python到底怎么用。打ctf的时候也是百度网上的代码,缝缝补补+看wp就拼凑出了exp,所以到现在也没怎么会用python。正好最近感觉我博客的标签还有分类太鸡儿乱了,手动用Hexo-admin整理又感觉太麻烦,逼格又低,所以想着能不能自己做一个管理系统,正好也练练python。

刚开始做的时候是想着用面向过程的风格来写这个系统的,但是。。。。这写起来也太麻烦了!!!想了下还是面向对象吧,面向过程真的。。。写写小脚本还差不多

2019.5.3

1.可以使用shutil库来进行各种文件操作:
(更多内容参见:https://www.cnblogs.com/zhangxinqi/p/8038479.html

# 拷贝文件
shutil.copy('test.txt','test.txt.bak')

当然,使用os库也可以,不过感觉太麻烦,还是shutil比较简便

2.使用replace替换字符串内容

str = "lalalaabc"
old = "abc"
new = "r0co"
str.replace(old, new)  # lalalar0co

以后写东西一定要提前规划好

边想边写极易造成函数功能混乱的情况

说一句极其装13的话就是

一定要高内聚,低耦合。。。

2019.5.5

这么多天了,也算是做完了主要功能。目前自用的话一点问题都没有——当然,也只是自用而已。作为我第一个自主规划的项目,怎么能只止步于此呢?接下来的日子将着手与UI的编写。

今天的内容是命令行参数的处理

  1. 获取命令行参数

我使用getopt来达成该目的

资料来源:
https://www.runoob.com/python3/python3-command-line-arguments.html

# test.py
import sys
import getopt

opts, args = getopt.getopt(sys.argv[1:], "ha:b:", ["Alice=", "Bob="])
print(opts)
print(args)

之后使用如下命令执行该脚本

python3 test.py -a aaa -b bbb
python3 test.py --Alice aaa --Bob bbb

结果如下

很容易能看出来,getopt方法返回两个值——匹配到的值和未匹配的值。我们暂时只需要匹配到的值。

  1. 短格式与长格式的统一

需要注意的是,getopt只会严格按照给出的格式来解析参数,而不理解哪个短格式与长格式相等。为了达成我们的目的我们只需要将长格式与短格式按相同方法处理即可,举例如下:

if got_param in ("-h", "--help"):
    dosomething
  1. 异常处理

可使用getopt.GetoptError

触发异常条件:选项需要的参数为空时触发

(资料中原话为:”在没有找到参数列表,或选项的需要的参数为空时会触发该异常.”,但在我测试时发现没有参数列表不会报错,当然也可能是我测试方法的问题,暂时先这么写吧)

# test.py
import sys
import getopt

try:
    opts, args = getopt.getopt(sys.argv[1:], "ha:b:", ["Alice=", "Bob="])
except getopt.GetoptError:
    print("Get Error!")

结果如图

2019.5.6

今天进行UI与各种方法的整合

整合的时候发现

之前写的都什么破玩意,耦合度贼高,真滴是code like shit。。。

或许以后该先写UI,后写函数?

2019.5.7

就剩最后的overwrite功能了

成长的过程就是不断发现自己之前有多智障的过程

为什么我非要把原文件特定位置的字符串替换成别的

直接根据md文件特定的格式自己构造不就好了

这样一来还可以自行添加tags、categories,丰富了程序功能

(一万年后)

开!发!完!毕!

撒花


如果我的文章能帮到您的话我会很开心.如需转载记得注明出处:)
目录