于是我用 Python 重写了那个上千 star 的“开源”简历模板 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
sinux
V2EX    分享创造

于是我用 Python 重写了那个上千 star 的“开源”简历模板

  •  5
     
  •   sinux 2015-12-03 19:07:39 +08:00 5628 次点击
    这是一个创建于 3601 天前的主题,其中的信息可能已经有所发展或是发生改变。

    DEMO 地址: [我是链接]( http:sinux.cc),阅读密码: 1234, 管理密码: abcd
    项目地址: https://github.com/shnode/Deerlet

    为什么不用 DeerResume

    DeerResume 是国内很火的一个“开源”简历模板。

    DeerResume 的前端很漂亮,但它远远称不上作者所说的“ DeerResume 作为一个开源软件”。因为简历一切数据都保存在 http://cvbox.sinaapp.com/ 这个 sae 的云端,是的,并且在 app.js 中:

    var baseurl = 'http://cvbox.sinaapp.com/'; // 使用 SAE 托管简历数据 // var baseurl = 'data.php'; // 使用本地文件托管简历数据,本地模式下,不支持在线编辑 

    我们不去猜测这么多保存在云端的简历会被拿去做什么,可能如作者所说只是做数据缓存。但是这个本地的 data.php 基本上没什么用处,在离线的情况下(本地调试),我甚至不能编辑,修改和查看我自己的简历, 因为它根本就不存在。

    而打印服务,也是放在作者的远端,依赖一个 http://pdf.ftqq.com/ 的链接,并提供下载服务。

    如果你用这个服务下载了 pdf 文件,那么这个文件的底端还有水印。

    这些理由已经足够让我不去使用它了,更不要说阅读密码和管理密码的传输方式,参见 issue

    Deerlet

    Deerlet 是一个开源在线简历模板,提供在线展示,在线编辑,下载 pdf 服务(无水印:),密码写死在后台配置文件并在 session 中保存和验证,不需要任何数据库。

    DEMO | 在线预览 (阅读密码: 1234, 管理密码: abcd )

    (resume.md 的基本模板仅作为参考)

    下载及部署

    ( Deerlet 只支持 Python3 )

    依赖 Python3 环境。

    克隆 Deerlet:

    git clone [email protected]:shnode/Deerlet.git && cd Deerlet/static && git clone https://github.com/pandao/editor.md.git 

    安装第三方包(最好在 virtualenv 中):

    pip install -r requirements.txt 

    安装 pdf 打印服务的依赖 wkhtmltopdf:

    osx/windows : 在 http://wkhtmltopdf.org/downloads.html 下载的对应版本并安装。 DEB 系 linux: sudo apt-get install wkhtmltopdf 其余 linux 查询相关包管理或去 http://wkhtmltopdf.org/downloads.html 下载. 

    如果下载之后仍然报错,请尝试重新编译 QT 和 wkhtmltopdf ,参见: 链接

    由于服务器中文字体不全的问题,请下载字体并更新缓存:

    sudo apt-get install fonts-wqy-microhei ttf-wqy-microhei fonts-wqy-zenhei ttf-wqy-zenhei fc-cache -f -v 

    运行:

    Python3 main.py open "http://127.0.0.1:5000" # 访问 http://127.0.0.1:5000 

    配置

    建议在使用之前,进行配置。配置集中在 Deerlet 的项目根目录下的 config.py 中:

    SECRET_KEY = os.environ.get('SECRET_KEY') or 'deerletisawesome' # Modify your SECRET KEY 建议足够复杂 TITLE = 'Deerlet' # 简历标题,例:马云的简历 SUB_TITLE = '基于 Python 的开源简历模板' # 简历子标题,一句话介绍自己,例:好的东西往往都是很难描述的。 READ_PASSWORD = '12345' # 简历浏览密码 ADMIN_PASSWORD = 'abcd' # 简历管理密码 BASE_DIR = basedir UPLOAD_FOLDER = basedir PDF_OPTIOnS= { 'page-size': 'Letter', 'margin-top': '0.75in', 'margin-right': '0.75in', 'margin-bottom': '0.75in', 'margin-left': '0.75in', 'encoding': "UTF-8", 'no-outline': None } # PDF 设置 

    在线编辑模式下,每 6 秒自动保存一次当前的文本(全文保存),如果你想修改这个数值,在 admin.html 的第 35 行进行修改:

    setInterval("saveToFile()", 6000); // 修改自动保存的时间 

    一切简历数据(除了标题)保存在 resume.md 中,如果喜欢,你也可以离线编辑,并且 copy 到任何地方。

    License

    GPLv2

    16 条回复    2015-12-31 16:52:58 +08:00
    hbkdsm
        1
    hbkdsm  
       2015-12-03 19:10:24 +08:00 via Android
    Interesting, 收藏了
    jimmy66
        2
    jimmy66  
       2015-12-03 19:33:24 +08:00
    Star ,非常感谢!
    unity0703
        3
    unity0703  
       2015-12-03 19:33:24 +08:00
    前排支持
    elya
        4
    elya  
       2015-12-03 20:35:00 +08:00 via iPhone
    非常好
    defunct9
        5
    defunct9  
       2015-12-03 20:51:13 +08:00 via iPhone
    xuzywozz
        6
    xuzywozz  
       2015-12-03 22:51:07 +08:00
    亦可赛艇
    sevncz
        7
    sevncz  
       2015-12-04 17:02:59 +08:00
    已 star
    Douglee
        8
    Douglee  
       2015-12-04 17:35:39 +08:00
    围观~
    nicegoing
        9
    nicegoing  
       2015-12-06 00:15:37 +08:00 via Android
    这什么鹿的模板非常丑。打印出来好难看,很后悔当初花了点时间在上面。我实在不明白为什么这么多跟风的。还有,真的有模仿的必要?就是些 md 语法而已。
    Raynor41
        10
    Raynor41  
       2015-12-08 00:08:53 +08:00
    鼓励,已经 star
    GNiux
        11
    GNiux  
    /div>   2015-12-30 17:45:04 +08:00
    按照 README.md 写的步骤安装相应应用 /依赖后,在执行

    > sudo python3 main.py
    出现:
    > Traceback (most recent call last):
    File "main.py", line 6, in
    from flask import Flask
    ImportError: No module named 'flask'

    求解答。谢谢!

    本机: Ubuntu 14.04
    sinux
        12
    sinux  
    OP
       2015-12-30 23:40:48 +08:00
    @GNiux (不需要用 sudo 的)这个是没找到 flask ,先 pip freeze 确定一下当前环境是否有 flask
    GNiux
        13
    GNiux  
       2015-12-31 12:27:19 +08:00
    @sinux
    已查看,安装了呢:
    > Flask==0.10.1
    > Flask-Markdown==0.3

    奇怪,我用:> python3.4 main.py; 或 python3.3 main.py ;或 python3 main.py 都是同样错误。
    但 > python2.7 main.py 则出现:

    > UnicodeDecodeError

    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
    Traceback (most recent call last)

    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__

    return self.wsgi_app(environ, start_response)

    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app

    respOnse= self.make_response(self.handle_exception(e))

    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception

    reraise(exc_type, exc_value, tb)

    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app

    respOnse= self.full_dispatch_request()

    不好意思, python 不是很熟,正在学习中……谢过
    sinux
        14
    sinux  
    OP
       2015-12-31 14:35:01 +08:00   1
    @GNiux 不知道你有没有用虚拟环境。如果没用,可能包是装在 Python2 的环境中。
    blade254353074
        15
    blade254353074  
       2015-12-31 14:56:18 +08:00
    @sinux 厉害
    GNiux
        16
    GNiux  
       2015-12-31 16:52:58 +08:00
    @sinux
    没用虚拟环境。。再试试。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5543 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 09:02 PVG 17:02 LAX 02:02 JFK 05:02
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86