Flask入門教程例項 搭建乙個靜態部落格

2022-09-27 08:45:20 字數 4315 閱讀 8795

現在流行的靜態部落格/**生成工具有很多,比如 jekyll, pelican, middleman, hyde 等等,staticgen 列出了目前最流行的一些靜態**生成工具。

我們的內部工具由 python/flask/mongodb 搭建,現在需要加上文件功能,寫作格式是 markdown,不想把文件放到資料庫裡,也不想再弄一套靜態部落格工具來管理文件,於是找到了 flask-flatpages 這個好用的 flask 模組。熟悉 flask 的同學花幾分鐘的時間就可以用搭建乙個簡單部落格,加上 bootstrap 的幫助,不到一小時內就可以用 flask-flatpages 弄個像模像樣的**出來。

建立開發環境

首先我們需要 pip,在 mac 上最簡單的安裝辦法是:

複製** **如下:

$ sudo easy_install pip

$ sudo easy_install virtualenv

如果你在 mac 上用 homebrew 包管理工具的話的話,也可以用 brew 公升級 python 和安裝 pip:

複製** **如下:

$ brew update

$ brew install python

建立乙個 blog 目錄、生成 python 獨立虛擬環境並在這個環境裡安裝需要的 flask, flask-flatpages 模組:

複製** **如下:

$ mkdir blog

$ cd blo

$ virtualenv flask

new python executable in flask/bin/python

installing setuptools, pip...done.

$ flask/bin/pip install flask

$ flask/bin/pip install flask-flatpages

在 blog 目錄下我們分別新建幾個目錄:static 用來存放 css/js 等檔案,templates 用來存放 flask 要用的 jinja2 模版,pages 用來存放我們靜態部落格(markdown 格式):

複製** **如下:

$ mkdir -p app/static app/templates app/pages

程式主程式 blog.py 的功能是,匯入必要的模組、配置 flask-flatpages 模組需要的引數、建立 flask 應用、寫幾個 url 路由函式,最後執行這個應用:

複製** **如下:

$ vi app/blog.py

#!flask/bin/python

from flask import flask, render_template

from flask_flatpages import flatpages

debug = true

flatpages_auto_reload = debug

flatpages_extension = lwdgbwdlcn'.md'

app = flask(__name__)

app.config.from_object(__name__)

flatpages = flatpages(app)

@app.route('/')

def index():

pages = (p for p in flatpages if 'date' in p.meta)

return render_template('index.html', pages=pages)

@app.route('/pages//')

def page(path):

page = flatpages.get_or_404(path)

return render_template('page.html', page=page)

if __name__ == '__main__':

app.run(port=8000)

模版在 python 中直接生成 html 很繁瑣並不好玩(那是上個世紀90年代的 php 搞的事情),在現代社會,我們使用模版引擎,flask 已經自動配置好了 jinja2 模版,使用方法 render_template() 來渲染模版就可以了。flask 會預設在 templates 目錄裡中尋找模版,我們只需要建立幾個模版檔案就可以了,這裡我們建立 base.html, index.html 和 page.html.

複製** **如下:

$ vi app/templates/base.html

vpsee.com sta程式設計客棧tic blog

**裡 extends 「base.html」 的意思是從 base.html 裡繼承基本的 「骨架」。

複製** **如下:

$ vi app/templates/index.html

複製** **如下:

$ vi app/templates/page.html

}flask-flatpages 模組會預設從 pages 目錄裡尋找 .md 結尾的 markdown 文件,所以我們把靜態部落格的內容都放在這個目錄裡:

複製** **如下:

$ vi app/pages/hello-world.md

title: hello world

date: 2014-10-14

tags: [general, blog]

**hello world**!

$ vi app/pages/test-flatpages.md

title: test flask flatpages

date: 2014-10-15

tags: [python, flask]

test [flask-flatpages](

執行基本搞定,執行看看效果吧:

複製** **如下:

$ flask/bin/python app/blog.py

* running on

* restarting with reloader

靜態化到目前為止,上面的部落格執行良好,但是有個問題,這個部落格還不是 「靜態」 的,沒有生成任何 html 檔案,不能直接放到 nginx/apache 這樣的 web 伺服器下用。所以我們需要另乙個 flalwdgbwdlcnsk 模組 frozen-flask 的幫助。

安裝 frozen-flask:

複製** **如下:

$ flask/bin/pip install frozen-flask

修改 blog.py,匯入 flask-frozen 模組,初始化 freezer,使用 freezer.freeze() 生成靜態 html:

複製** **如下:

$ vi app/blog.py

...from flask_flatpages import flatpages

from flask_frozen import freezer

import sys

...flatpages = flatpages(app)

freezer = freezer(app)

...if __name__ == '__main__':

if len(sys.ar**) > 1 and sys.ar**[1] == "build":

freezer.freeze()

else:

app.run(port=8000)

執行 blog.py build 後就在 app 目錄下生成 build 目錄,build 目錄裡面就是我們要的 html 靜態檔案:

複製** **如下:

$ flask/bin/python app/blog.py build

$ ls app/

blog.py   build     pages     static    templates

更清晰的目錄結構如下:

複製** **如下:

$ tree app

app├── blog.py

├── build

│   ├── index.html

│   └── pages

│       ├── hello-world

│       │   └── index.html

│       └── test-flatpages

│           └── index.html

├── pages

│   ├── hello-world.md

│   └── test-flatpages.md

├── static

└── templates

├── base.html

├── index.html

└── page.html

本文位址:

Flask入門教程

目錄 1 flask 概述 2 flask 安裝 3 flask 應用 4 flask 路由 5 flask 變數規則 6 flask url構建 7 flask http方法 8 flask 模板 9 flask 靜態檔案 10 flask request物件 11 flask 將表單資料傳送到模...

flask 入門教程之一

python flask requests 通過命令安裝 pip install flask 乙個最小的 flask 應用看起來會是這樣 from flask import flask def hello world return hello world if name main 通過命令輸入 py...

Flask入門教程(1) 定義Flask

本系列文章僅為入門教程,入門舉例 1.匯入flask擴充套件 from flask import flask,escape,url for 2.建立flask 應用程式例項 需要傳入 name 作用是為了確定資源所在的目錄 3.定義路由及檢視函式 flask中定義路由是通過裝飾器實現的 defind...