国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Flask入門教程實例:搭建一個靜態博客

Flask入門教程實例:搭建一個靜態博客

2020-05-24 10:53vpsee Python

這篇文章主要介紹了Flask入門教程實例:搭建一個靜態博客,本文主要介紹flask框架的環境配置以及一個靜態博客胡搭建實例,需要的朋友可以參考下

現在流行的靜態博客/網站生成工具有很多,比如 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 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 用來存放我們靜態博客(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 = '.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 搞的事情),在現代社會,我們使用模版引擎,Flask 已經自動配置好了 Jinja2 模版,使用方法 render_template() 來渲染模版就可以了。Flask 會默認在 templates 目錄里中尋找模版,我們只需要創建幾個模版文件就可以了,這里我們創建 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 文檔,所以我們把靜態博客的內容都放在這個目錄里:

復制代碼 代碼如下:


$ 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

 

Flask入門教程實例:搭建一個靜態博客

靜態化

到目前為止,上面的博客運行良好,但是有個問題,這個博客還不是 “靜態” 的,沒有生成任何 html 文件,不能直接放到 nginx/apache 這樣的 web 服務器下用。所以我們需要另一個 Flask 模塊 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.argv) > 1 and sys.argv[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

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 午夜资源| 日韩综合网 | 涩涩视频在线免费看 | 能直接看的av网站 | 精品在线 | 国产黄色av | 精品福利一区二区三区免费视频 | 亚洲国产人午在线一二区 | 亚洲精品在线视频 | 精品一区二区三区视频 | 欧美成人二区 | 亚洲一区在线播放 | 欧美午夜在线观看 | 日韩在线播放视频 | 精品视频在线一区 | 国产精品午夜电影 | 亚洲精品一区二区三区在线播放 | 自拍亚洲| 玖玖综合网 | 国产一区二区三区久久 | 91精品国产综合久久福利软件 | 日本在线不卡视频 | 91成人黄色 | 日韩欧美天堂 | 日本一区二区三区免费观看 | 国产精品高潮呻吟久久 | 综合精品 | 99精品欧美一区二区蜜桃免费 | 国产成人精品一区二 | 日韩一级免费观看 | 国产免费av网站 | 免费午夜电影 | 久久精品成人一区二区三区蜜臀 | 亚洲欧美日韩精品久久亚洲区 | 99久久99久久久精品色圆 | 久久最新 | 亚洲一区二区三 | 日韩视频精品 | 国产精品剧情一区二区三区 | 国产美女一区二区 | 欧美成人a∨高清免费观看 国产99久久 |