![Django自定义manage.py命令实现hexo博客迁移 Django自定义manage.py命令实现hexo博客迁移]()
实现了hexo的md文件格式解析,通过什么方式怎么来迁移hexo的博客到django的博客呢?开始想到的是通过Django的manage.py的shell命令,通过shell可以执行写好的python脚本进行hexo的md文件格式解析并入库。后来想想为啥不直接自定义一个manage.py的命令直接进行迁移呢?就如我们新建Django工程迁移数据库一样,执行python manage.py migrate来迁移数据库。我们可以定义python manage.py xxx来执行的迁移hexo博客。
自定义Django-admin命令分三步:创建management文件夹、编写命令代码、测试验证
一、创建management文件夹
自定义的Django-admin管理命令本质上是一个python脚本文件,它的存放路径必须遵循一定的规范,一般位于app/management/commands目录。整个文件夹的布局如下所示:
注意app要在setting中注册
在blog/management/commands包下面创建transblog.py文件
![Django自定义manage.py命令实现hexo博客迁移 Django自定义manage.py命令实现hexo博客迁移]()
这里有两个要注意的地方:
1、app要在setting中注册。如blog在setting中注册了所以可以在blog/management/commands包下面创建transblog.py文件,api和common都没有在setting中注册所以在这两个目录下创建的不会作为管理命令生效。
2、创建的management/commands是Python包,不是单纯的目录,区别就是目录里必须有init.py文件,空文件都可以。
二、编写命令代码
创建命令管理文件后就可以在该文件中编写命令代码了。
每一个自定义的管理命令本质是一个Command类, 它继承了Django的Basecommand或其子类, 主要通过重写handle()方法实现自己的业务逻辑代码,而add_arguments()则用于帮助处理命令行的参数,如果运行命令时不需要额外参数,可以不写这个方法。
transblog.py的参考代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
# -*- coding: utf-8 -*- """ :author: XieJava :url: http://ishareread.com :copyright: © 2021 XieJava <[email protected]> :license: MIT, see LICENSE for more details. """ import os
from blog.models import BlogPost,BlogCategory,Tag from utils.parseblog import parseblog from django.core.management.base import BaseCommand
class Command(BaseCommand): help='读取指定目录的.md文件解析至ishareblog'
def add_arguments(self, parser): parser.add_argument('--path',help='输入.md文件的目录') parser.add_argument('--file',help='输入.md文件的路径')
def handle(self, *args, **options): inputfile = input('请输入指定的目录路径或.md文件路径:') if inputfile.find('.md') > 0: self.transblogbyfile(inputfile) else: self.transblogbypath(inputfile) if options['path']: self.transblogbypath(options['path']) if options['file']: self.transblogbyfile(options['file'])
'''读取目录解析md文件并写入数据库''' def transblogbypath(self,filepath='',): try: files = os.listdir(filepath) for file in files: if file.find('.md') > 0: blog_file = os.path.join(filepath, file) self.transblogbyfile(blog_file) except FileNotFoundError as e: print('请确认输入是否正确。',e)
'''读取md文件入库''' def transblogbyfile(self,blogfile=''): blog_info = parseblog(blogfile) filename=os.path.basename(blogfile) #判断是否存在相同的title qs=BlogPost.objects.filter(title=blog_info['title']) if len(qs)==0: category = None tag_objs = [] if 'categories' in blog_info: categories=blog_info['categories'] if len(categories)>0: category_title = categories[0] category_qs=BlogCategory.objects.filter(title=category_title) if len(category_qs)>0: category=category_qs[0] if 'tags' in blog_info: tags=blog_info['tags'] for tag in tags: tag_obj,b=Tag.objects.get_or_create(tag=tag) print(tag_obj.id) tag_objs.append(tag_obj) blog = BlogPost() blog.title = blog_info['title'] blog.content = blog_info['content'] blog.isShow = 1 #默认显示 blog.summary=blog.content[0:200] #默认提取内容的前200个字作为摘要 blog.category=category blog.blogSource = filename blog.pubTime=blog_info['date'] blog.save() if len(tag_objs)>0: blog.tags.add(*tag_objs) print(filename + '读取解析入库成功!') else: print(blog_info['title']+'已经存在!')
|
代码很简单,就是根据读取命令行的参数,这个参数就是需要迁移hexo的.md文件的目录或文件路径,读取目录或文件路径进行文件的解析,并写入到数据库。
.md文件的解析参考:Python二十行代码实现hexo的md文件格式解析
三、测试验证
命令代码写完后就可以进行测试了。
在命令行输入python manage.py
可以看到自定义的transblog已经加入到管理命令了
![Django自定义manage.py命令实现hexo博客迁移 Django自定义manage.py命令实现hexo博客迁移]()
输入 python manage.py transblog -h
会提示命令的参数和用法:
![Django自定义manage.py命令实现hexo博客迁移 Django自定义manage.py命令实现hexo博客迁移]()
如执行 python manage.py transblog
会提示”请输入指定的目录路径或.md文件路径:”
1 2
|
(venv) PS D:Pythonstudypythonprojectishareblogishareblog> python manage.py transblog 请输入指定的目录路径或.md文件路径:
|
我们输入需要迁移的.md文件或路径
如:E:CloudStationpersonalxiejavablogmyhexomyblogsource_posts2022-07-27-Python二十行代码实现hexo的md文件格式解析.md
不出意外的情况下控制台会打印“XXXX.md读取解析入库成功!”的信息
![Django自定义manage.py命令实现hexo博客迁移 Django自定义manage.py命令实现hexo博客迁移]()
访问博客,可以看到文章已经迁移过来了
![Django自定义manage.py命令实现hexo博客迁移 Django自定义manage.py命令实现hexo博客迁移]()
全部代码仓库:https://gitee.com/ishareblog/ishareblog
作者博客:http://xiejava.ishareread.com/
“fullbug”微信公众号
关注微信公众号,一起学习、成长!
原文始发于微信公众号(fullbug):Django自定义manage.py命令实现hexo博客迁移
评论