温馨提示: 豌豆仅提供国内节点,不提供境外节点,不能用于任何非法用途,不能访问境外网站及跨境联网。

批量获取IP

搭建一个好用的Flask Restful框架,项目结构

发布时间:
  • 用这个结构写的一个项目。整理好就发布出来。教程很简单。现在后端已经开发完成了。打算先把后端放出来,前端页面正在写。
  • 项目是多端的。即:1后端 + 1 PC + 1小程序,这些我都慢慢的开源出来,分享给大家
  • 技术栈:Flask、Vue、Docker

如果让我在Django和Flask中选框架,我会选用Flask

框架我喜欢用Flask的原因很简单,就是我可以自由发挥。我可以控制。就是这么简单,可能我对Django理解的不好,不过在实际开发上,还是Flask对我帮助很大,让我对Python理解的更多点,下面我分享一个很简单的,也是我现在用的项目结构

一个好用的Flask项目结构,我会把所用的方法组建出来

我来简要说下我想组织的结构样子吧:docker + 蓝图 + rest

为什么要用docker?因为目前在学习这个,而且发现这个节约部署成本,很好用!!。当然我主要还是为了学习加深理解,至于蓝图和rest就不介绍了,

好了废话不多说我直接上目录样式给大家看下是什么样的。

整体结构图图

apps是我用来做版本控制的

apps版本控制

图片上common/flask_app/script这三个文件夹是用来封装一些好用的方法,后期我会慢慢添加进去,我会以另一种方式,为大家展示出来。在写文章的时候也是进步,你学会了并不一定能写出来,写出来了才是自己的学到的。我很喜欢这样的话。

app.py

建立一个空白文件夹(我这里是Flask-Api)和一个app,对的就是这么简单粗暴!!这也是我喜欢用的原因。

from flask import Flask
flask_app = Flask(__name__)

@flask_app .route('/hello')
def hello():
   #万能的hello world
    return 'hello world!'

if __name__ == '__main__':
    flask_app.run()
  • 一个简单的app就定义好了,这个只是初始状态后面我会增加别的内容,例如加上gevent。
  • 好吧现在我们可以尝试python app.py看看运行效果。这里我就不打开了。没多大意思。
  • 下一步我我将开始把flask-restful 加入上去
from flask import Flask
from flask_restful import Api, Resource


flask_app = Flask(__name__)

app = Api(flask_app)


class Hello(Resource):
    def get(self):
        return 'hello world!'


app.add_resource(Hello, '/hello')

if __name__ == '__main__':
    flask_app.run()
  • 第一步算是搭建完成了,这里使用了即插式视图管理,以前我喜欢用flask推荐的route,但是现在发现没有这个好用好管理。这个也是我喜欢flask之一,当然每个人都有没个人书写的方式

拆分代码

这一部分我将把代码分开,毕竟app.py只是一个启动文件,不能把代码写在一个文件

  • 在apps中新建v1
  • 在v1中创建py文件
  • 在v1中的init写入路由
  • 在apps中init写入注册蓝图(其实完全可以把init看做是一个管理中心)


    v1文件
  • flask_restful 注册需要app在官方案例中是要才可以注册的,那么现在不开文件了。也是同样的,我们可以写一个方法作为传递(蓝图也是这么实现的,其实只要想明白他们是怎么运行的,你就可以随意拆解)
#在v1中创建test
from flask_restful import Resource

class Hello(Resource):
   def get(self):
        return 'hello world!'
#在v1中init
from flask_restful import Api
from apps.v1.test import HelloWorld

def register_views(app):
    api = Api(app)
    api.add_resource(HelloWorld, '/hello', endpoint="hello")
# 现在的app.py是这样的
from flask import Flask
from apps.v1 import register_views

flask_app = Flask(__name__)

def init_app(app):
    register_views(app)

init_app(flask_app)

if __name__ == '__main__':
    flask_app.run()

好了,到现在这一步仅官方rest就写完了,其实之前我就用这个,但是总是感觉少了点什么.
蓝图,相信用过的人都喜欢用,下面代码我就把蓝图加上,

#在v1中init
from flask import Blueprint
from flask_restful import Api
from apps.v1.test import HelloWorld

def register_views(app):
    api = Api(app)
    api.add_resource(HelloWorld, '/hello', endpoint="hello")

def create_blueprint_v1():
    """
    注册蓝图->v1版本
    """
    bp_v1 = Blueprint('v1', __name__)
    register_views(bp_v1)
    return bp_v1
#在apps中init
from apps.v1 import create_blueprint_v1

def register_blueprints(app):
    # 注册版本
    app.register_blueprint(create_blueprint_v1(), url_prefix='/v1')
# 现在的app.py是这样的
from flask import Flask
from apps import register_blueprints

flask_app = Flask(__name__)

def init_app(app):
    register_blueprints(app)

init_app(flask_app)

if __name__ == '__main__':
    flask_app.run()

好了,至此我想写的东西基础已经写完了,是不是感觉就是在init中写方法,我自己就是把他们认为管子,在init中传递app,到最后只要汇总就可以正常运行了。

后面,我会把数据库加入(这些我都理解成包,需要什么功能,就加),但是目前不会加入,所用的场景现在还没涉及到数据库,就没必要填加一些没有的东西,这篇文章就是为了把这个基础结构给搭建好,现在搭建好了,就准备下一篇文章了,Docker构建镜像,上传到服务器

其实我喜欢这种堆积木的感觉,只要找到相应的方法什么,没有什么是做不了的


相关文章


告别单调工作系列——利用python拯救漂亮妹子 Python 之父谈放弃 Python:我对核心成员们失望至极! Python 爬取了 121.3 万条大众点评,告诉你哪里的小龙虾才是一绝! 三分钟让你读懂AI和BigData产业趋势 从零实现百度指数爬虫~ 人工智能时代,应该这样学python! 有不少有趣的发现,用Python分析了20万场吃鸡数据 python——python3.6环境搭建

上一篇:机器学习 Day 3 | Multiple Linear Regression
下一篇:用Python代码来下载任意指定网易云歌曲(超详细版)