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

本篇结束

猜你喜欢

转载自blog.csdn.net/weixin_42042680/article/details/82781681
今日推荐