_                   _                             
            | |                 | |                            
 _ __  _   _| | _____  ___ _   _| | _____   ___ ___  _ __ ___  
| '_ \| | | | |/ / _ \/ __| | | | |/ / _ \ / __/ _ \| '_ ` _ \ 
| | | | |_| |   < (_) \__ \ |_| |   <  __/| (_| (_) | | | | | |
|_| |_|\__,_|_|\_\___/|___/\__,_|_|\_\___(_)___\___/|_| |_| |_|
                                                               
                                                               

ブログエンジン作った

Djangoでブログエンジン作った。これがそれ。
今のところまだ使う予定はないけど作り込んで行こうと思う。

特徴

Markdown Meta Dataによる記述

title: ブログエンジン作った
slug: my-blog-engine
published_at: 2016-11-06 17:00:00

Djangoでブログエンジン作った。これがそれ。
...

Herokuへのデプロイ

$ heroku create <your_blog_name>
$ git clone git@bitbucket.org:nukosuke/blog.git
$ cd blog/
$ git remote add heroku git@heroku.com:<your_blog_name>.git
$ git push heroku master

次の環境変数を設定する

記事管理画面

Djangoは最初から管理画面が用意されている。機能的にはこれを使えば記事の執筆、管理画面など作らなくてもいいが、複数ユーザで使用する場合に他の人の記事も編集できてしまうためよくない。そこで超雑な編集画面を作って[記事URL]/editでアクセスできるようにした。

https://gyazo.com/febf633927b14d117e6283df7e5c6b35

Markdown Dataによる記事データ

このブログエンジンでは新規作成・更新の際にメタデータを読んでそれぞれのカラムに保存している。

表示の際にはメタデータを削ぎ落としている

import re
META_RE = re.compile(r'^[ ]{0,3}(?P<key>[A-Za-z0-9_-]+):\s*(?P<value>.*)')
META_MORE_RE = re.compile(r'^[ ]{4,}(?P<value>.*)')

@register.filter
@stringfilter
def truncate_meta(body):
    """ Truncate Markdown Meta-Data. """
    lines = body.split('\n')

    while 1:
        line = lines.pop(0)
        if line.strip() == '':
            break # blank line - done
        m1 = META_RE.match(line)
        if m1:
            key = m1.group('key').lower().strip()
        else:
            m2 = META_MORE_RE.match(line)
            if not m2 or not key:
                lines.insert(0, line)
                break # no meta data - done
    return ''.join(lines)

TODO

リポジトリ

https://bitbucket.org/nukosuke/blog

ライセンス

MIT License

Copyright (c) 2016 nukosuke

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.