1. 程式人生 > >Flask+Vue快速打造個人網站(二)

Flask+Vue快速打造個人網站(二)

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()

本篇結束