此为历史版本和 IPFS 入口查阅区,回到作品页
Python 的輕鬆閲讀
IPFS 指纹 这是什么

作品指纹

Flask - 改寫自己的部落格

Python 的輕鬆閲讀
·
·

準備檔案以及資料夾

準備的資料夾如下:

\-
 |--- main.py
 |--- settings.py
 |--- ext.py
 |--- requirments.txt
 |--- app
      |--- models.py
      |--- views.py
 |--- static
      |--- css
      |--- js
      |--- images
      |--- etc...
 |--- templates
      |--- layouts
            |--- base.html

說明檔案內容

  • main.py - 主要使用 Flask 以及相關的引入settings.py - 存放 DB 連綫的資訊ext.py - 存放 SQLAlchemy,直接產生 db 的實例化app 底下的 models.py - 專門存放與實際的 DataBase 相符合的資訊
  • views.py - 使用 Blueprint 來作為分散 route 的方法

python 安裝的套件

從這個檔案下手 requirments.txt

flask[async] Flask-SQLAlchemy SQLAlchemy gunicorn colorama MarkupSafe greenlet Jinja2 Werkzeug pymysql blueprint unicorn

main.py

主要使用 Blueprint,將重要的 route 都放在 app 底下

這裏會動到部分是:

from app.views import view
app.register_blueprint(view)

看你要設定叫什麽,我是習慣用 views

這是完整 main.py 的內容

import os
import settings
import unicorn

from flask import Flask, session
# from flask_script import Manager
from ext import db
from datetime import timedelta

# 這裏會用到 Blueprint
from app.views import view

app = Flask(__name__)

# 將系統配置項 Config 類載入到 app
app.config.from_object(settings.Config)

# 使用 session 必要的配置
app.config['SECRET_KEY'] = "隨機產生一個數值"

# 這裏讓 session 存放 31 天,這就看你的專案的時間來制定
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=31)

# 通過db物件將app初始化
db.init_app(app)

# 將藍圖view註冊進app
app.register_blueprint(view)

# manager = Manager(app)

if __name__ == "__main__":
    app.run()

ext.py

這個只有放入 SQLAlchemy,並且將 db 給實例化

from flask_sqlalchemy import SQLAlchemy

# 實例化 db 物件
db = SQLAlchemy()

settings.py

這裏是 settings,主要是 main.py 裏面有一段 code

app.config.from_object(settings.Config)

讓 app 的 config 可以整個都載入,包含 db 的連綫資訊等等

class Config:
    # 設定mysql pymysql的連線
    
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root@localhost/blog'
    # 關閉資料追蹤
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    # 開啟提交
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True

app 底下的 models.py

這是資料庫的形成 models,先把 db 引入,在將 datetime 也引入就可以了

from ext import db
from datetime import date, datetime

以下是範例 Post

class Post(db.Model):
    __tablename__ = 'posts'
    id = db.Column(db.Integer, primary_key=True)
    category_id = db.Column(db.Integer)
    title = db.Column(db.String(255))
    content = db.Column(db.String)
    slug = db.Column(db.String(255))
    published = db.Column(db.Integer)
    views = db.Column(db.Integer)
    image = db.Column(db.String(255))
    created_at = db.Column(db.DateTime, default=datetime.now)
    updated_at = db.Column(db.DateTime, default=datetime.now,       onupdate=datetime.now) 

app 底下的 views.py

這個存放着樣板渲染產生網站的結果

from flask import Blueprint, request, jsonify, render_template, redirect, url_for, session
from app.models import Post, Category
from ext import db
from sqlalchemy import desc

# 建立 Blueprint view
view = Blueprint('view', __name__)

@view.route('/', methods=['GET'])
async def index():
    posts = Post.query.order_by(desc(Post.created_at)).all()
    return render_template('home/index.html', posts=posts)

然後 python main.py 就可以在 http://localhost:5000/ 看到結果了

python main.py

或者改用 gunicorn 跑也可以

# 預設 port 是 8000
# --reload 所有的 py 都會讓他重新執行
# --daemon 讓背景執行
gunicorn main:app --reload 或者 --daemon

# 如果你的 port 不同,參考一下配置
gunicorn main:app -b 127.0.0.1:6000 --reload 或者 --daemon

# 就會以 127.0.0.1:6000 去跑起來

這些都是 python 網頁的相關設置,Have a fun & coding

CC BY-NC-ND 2.0 授权