Flask+Vue快速打造個人網站(二)
阿新 • • 發佈:2018-12-10
Flask+Vue快速打造個人網站(二)
2018.9.17 23:09
後端
後端框架使用flask考慮的是前後端分離,可以快速開發API,還有就是以前寫的一些程式碼直接複用
在介面這塊其實都差不多,主要來講專案的模組化劃分
目錄
模組化專案
是為了使程式碼更加清晰、可複用、低耦合,與django不同的是,前期使用flask時在github擼了很多demo,發現大部分專案結構都不同,各有各的分法。
# 模組化想法
models資料模型、routes全域性路由、config全域性配置、 一個啟動檔案、一個app初始化檔案、utils外部方法包
這塊有個坑就是互相引用的問題,尤其是在models裡 A檔案importB B檔案又import A,就會引起這個問題,
最好的做法是__init__檔案作為中間檔案放置公共方法
模組化劃分好之後,就是一些外部庫的用法
- Flask-admin
- flask-migrate
- Flask-BabelEx
- Flask-Cors
- Flask-login
- Flask-restful
- Flask-script
- Flask-sqlalchemy
- blueprint
需求一:原始介面都是一個方法上面一個路由,@app.route()這樣,多個api多個頁面時全域性檢視路由就很不方便,需要把路由都放在一塊與介面分離開來
routes.py
路由頁面
from flask import Blueprint
from flask_restful import Api
from admins import Index
# 當需要flask_restful寫介面時,Blueprint應該怎麼引入就成了問題
# 例項化藍圖,路由字首為/api
blue = Blueprint('api', __name__, url_prefix='/api')
docs = Api(blue)
# 路由註冊
docs.add_resource(Index, '/', endpoint="index")
# 新增路由時只需
docs.add_resource(API類名, '路由地址', 端點)
api頁面
from flask_restful import Resource
# restfulAPI繼承Resource類
class Index(Resource):
def __init__(self):
# ...
def get(self):
#...
def post(self):
# ...
models頁面
from admins import db
class Video(db.Model):
__tablename__ = "video"
id = db.Column(db.Integer, unique=True, primary_key=True)
video_url = db.Column(db.String(100))
desc = db.Column(db.String(80))
time_long = db.Column(db.Integer)
small_img = db.Column(db.String(100))
watch = db.Column(db.Integer, default=0)
def __repr__(self):
return "<Video %r>" % self.id
這樣路由檢視就方便多了
需求二:models遷移資料,修改model欄位可以隨時更新遷移 用到了flask-migrate
"""
系統入口檔案,
例項化app
新增shell指令碼
"""
from flask_script import Manager, Server
from flask_migrate import Migrate, MigrateCommand
from app import create_app
# 為了避免重複引用,我將db放在了admins.py中
from admins import db, AdminUser
# 將所有的model都引進來
from pictures.models import *
app = create_app('dev')
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command("runserver",
Server(host='0.0.0.0',
port=5000,
))
manager.add_command("db", MigrateCommand)
if __name__ == '__main__':
manager.run()
在admins目錄下的__init__.py
檔案
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
本篇結束