欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Flask入門教程實例:搭建一個靜態(tài)博客

 更新時間:2015年03月27日 10:30:56   作者:vpsee  
這篇文章主要介紹了Flask入門教程實例:搭建一個靜態(tài)博客,本文主要介紹flask框架的環(huán)境配置以及一個靜態(tài)博客胡搭建實例,需要的朋友可以參考下

現(xiàn)在流行的靜態(tài)博客/網站生成工具有很多,比如 Jekyll, Pelican, Middleman, Hyde 等等,StaticGen 列出了目前最流行的一些靜態(tài)網站生成工具。

我們的內部工具由 Python/Flask/MongoDB 搭建,現(xiàn)在需要加上文檔功能,寫作格式是 Markdown,不想把文檔放到數據庫里,也不想再弄一套靜態(tài)博客工具來管理文檔,于是找到了 Flask-FlatPages 這個好用的 Flask 模塊。熟悉 Flask 的同學花幾分鐘的時間就可以用搭建一個簡單博客,加上 Bootstrap 的幫助,不到一小時內就可以用 Flask-Flatpages 弄個像模像樣的網站出來。

創(chuàng)建開發(fā)環(huán)境

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

復制代碼 代碼如下:

$ sudo easy_install pip
$ sudo easy_install virtualenv

如果你在 Mac 上用 Homebrew 包管理工具的話的話,也可以用 brew 升級 Python 和安裝 pip:
復制代碼 代碼如下:

$ brew update
$ brew install python

創(chuàng)建一個 blog 目錄、生成 Python 獨立虛擬環(huán)境并在這個環(huán)境里安裝需要的 Flask, Flask-FlatPages 模塊:
復制代碼 代碼如下:

$ mkdir blog
$ cd blog

$ 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 用來存放我們靜態(tài)博客(Markdown 格式):
復制代碼 代碼如下:

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

程序

主程序 blog.py 的功能是,導入必要的模塊、配置 Flask-FlatPages 模塊需要的參數、創(chuàng)建 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 = '.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/<path:path>/')
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 搞的事情),在現(xiàn)代社會,我們使用模版引擎,F(xiàn)lask 已經自動配置好了 Jinja2 模版,使用方法 render_template() 來渲染模版就可以了。Flask 會默認在 templates 目錄里中尋找模版,我們只需要創(chuàng)建幾個模版文件就可以了,這里我們創(chuàng)建 base.html, index.html 和 page.html.

復制代碼 代碼如下:

$ vi app/templates/base.html
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>vpsee.com static blog</title>
</head>

<body>
    <h1><a href="{{ url_for("index") }}">vpsee.com blog</a></h1>
    {% block content %}
    {% endblock content %}
</body>
</html>


代碼里 extends “base.html” 的意思是從 base.html 里繼承基本的 “骨架”。
復制代碼 代碼如下:

$ vi app/templates/index.html
{% extends "base.html" %}

{% block content %}
    <h2>List of pages
    <ul>
        {% for page in pages %}
        <li>
            <a href="{{ url_for("page", path=page.path) }}">{{ page.title }}</a>
        </li>
        {% else %}
        <li>No post.</li>
        {% endfor %}
    </ul>
{% endblock content %}


復制代碼 代碼如下:

$ vi app/templates/page.html
{% extends "base.html" %}

{% block content %}
    <h2>{{ page.title }}</h2>
    {{ page.html|safe }}
{% endblock content %}


Flask-FlatPages 模塊會默認從 pages 目錄里尋找 .md 結尾的 Markdown 文檔,所以我們把靜態(tài)博客的內容都放在這個目錄里:
復制代碼 代碼如下:

$ 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](https://pythonhosted.org/Flask-FlatPages/)

運行

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

復制代碼 代碼如下:

$ flask/bin/python app/blog.py
 * Running on http://127.0.0.1:8000/
 * Restarting with reloader

靜態(tài)化

到目前為止,上面的博客運行良好,但是有個問題,這個博客還不是 “靜態(tài)” 的,沒有生成任何 html 文件,不能直接放到 nginx/apache 這樣的 web 服務器下用。所以我們需要另一個 Flask 模塊 Frozen-Flask 的幫助。

安裝 Frozen-Flask:

復制代碼 代碼如下:

$ flask/bin/pip install frozen-flask

修改 blog.py,導入 Flask-Frozen 模塊,初始化 Freezer,使用 freezer.freeze() 生成靜態(tài) 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.argv) > 1 and sys.argv[1] == "build":
        freezer.freeze()
    else:
        app.run(port=8000)

運行 blog.py build 后就在 app 目錄下生成 build 目錄,build 目錄里面就是我們要的 HTML 靜態(tài)文件:
復制代碼 代碼如下:

$ 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

相關文章

  • OpenCV實現(xiàn)人臉識別

    OpenCV實現(xiàn)人臉識別

    本文主要介紹了python使用opencv實現(xiàn)人臉識別的相關資料。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • keras模型可視化,層可視化及kernel可視化實例

    keras模型可視化,層可視化及kernel可視化實例

    今天小編就為大家分享一篇keras模型可視化,層可視化及kernel可視化實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python進程間通信方式

    Python進程間通信方式

    這篇文章主要介紹了Python進程間通信方式,進程彼此之間互相隔離,要實現(xiàn)進程間通信,主要通過隊列方式,下文更多詳細內容,需要的小伙伴可以參考一下
    2022-03-03
  • Tensorflow--取tensorf指定列的操作方式

    Tensorflow--取tensorf指定列的操作方式

    這篇文章主要介紹了Tensorflow--取tensorf指定列的操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 使用Python對Excel進行讀寫操作

    使用Python對Excel進行讀寫操作

    學習Python的過程中,我們會遇到Excel的讀寫問題。這時,我們可以使用xlwt模塊將數據寫入Excel表格中,使用xlrd模塊從Excel中讀取數據。下面我們介紹如何實現(xiàn)使用Python對Excel進行讀寫操作。
    2017-03-03
  • 在Python中用has_key()方法查找鍵是否存在的教程

    在Python中用has_key()方法查找鍵是否存在的教程

    這篇文章主要介紹了在Python中用has_key()方法查找鍵是否存在的教程,是Python入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • 淺談Python2、Python3相對路徑、絕對路徑導入方法

    淺談Python2、Python3相對路徑、絕對路徑導入方法

    今天小編就為大家分享一篇淺談Python2、Python3相對路徑、絕對路徑導入方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python實現(xiàn)將圖像轉換為ASCII字符圖

    Python實現(xiàn)將圖像轉換為ASCII字符圖

    使用Python進行圖像處理,非常快捷方便,往往簡短幾行代碼就可以實現(xiàn)功能強大的效果。在這篇文章中,我們將使用Python將圖像轉換為ASCII字符照,感興趣的可以了解一下
    2022-08-08
  • Python?中10進制數與16進制數相互轉換問題

    Python?中10進制數與16進制數相互轉換問題

    這篇文章主要介紹了Python中10進制數與16進制數相互轉換,在Python中,我們可以使用內置的hex()函數將10進制數轉換為16進制數,需要的朋友可以參考下
    2023-05-05
  • 在ipython notebook中使用argparse方式

    在ipython notebook中使用argparse方式

    這篇文章主要介紹了在ipython notebook中使用argparse方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04

最新評論