好哇网

通过Python让你快速上手网站模板开发教程(网站模板开发实例)

作者 2021-11-16 215

前言

前几天在进行项目开发的时候,发现用Flask写一些轻量化的Web程序还是比较合适的。其实在Flask家族中,为了能够更加方便地开发Restful风格的接口,Flask-restful是一个不错的选择。虽然Flask-restful提供了比较完整的官方文档,但是距离开发上线项目还是不是很方便,因此我写了一个Flask-restful的快速模板。

此项目采用Mysql作为持久层数据库,实现了一个资源的5个接口,满足基本的web开发需求。

项目地址

首先给出项目地址:Flask-restful-quick-start

通过Python让你快速上手网站模板开发教程(网站模板开发实例)-好哇网

image-20211113211211982.png

项目简介

首先是项目的文件结构。

<code>├── <span class="hljs-selector-tag">flask_app</span>
│   ├── <span class="hljs-selector-tag">common</span>
│   │   ├── __<span class="hljs-selector-tag">init__</span><span class="hljs-selector-class">.py</span>
│   │   └── <span class="hljs-selector-tag">utils</span><span class="hljs-selector-class">.py</span>
│   ├── <span class="hljs-selector-tag">user</span>
│   │   ├── __<span class="hljs-selector-tag">init__</span><span class="hljs-selector-class">.py</span>
│   │   ├── <span class="hljs-selector-tag">models</span><span class="hljs-selector-class">.py</span>
│   │   └── <span class="hljs-selector-tag">views</span><span class="hljs-selector-class">.py</span>
│   └── __<span class="hljs-selector-tag">init__</span><span class="hljs-selector-class">.py</span>
├── <span class="hljs-selector-tag">config</span><span class="hljs-selector-class">.py</span>
├── <span class="hljs-selector-tag">LICENSE</span>
├── <span class="hljs-selector-tag">main</span><span class="hljs-selector-class">.py</span>
└── <span class="hljs-selector-tag">requirements</span><span class="hljs-selector-class">.txt</span>
</code>

项目中采用了蓝图来划分功能块,方便划分项目模块,并且提升可维护性。

目前我认为这是一个相对比较科学的文件组织方案了。

Restful接口设计

基本的接口从两个路由进行接收

<code><span class="hljs-comment">======================================</span>
请求方法        路由              请求内容
POST        /userList           userInfo
GET         /userList           None
GET         /user               userId
PUT         /user               userInfo
DELETE      /user               userId
<span class="hljs-comment">======================================</span>
</code>

做一个简单的介绍就是增加资源和查询全部资源从资源列表接口走。

其他地带参数请求和修改、删除等从专门的资源接口走。

这样就能避免GET请求带参数和不带参数的问题了。

在项目中统一的处理能够提升可靠性,降低编码错误,我这里对两点进行了统一。

1、Sqlalchemy的Model层对象和dict之间的转换。

<code><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">row2dict</span><span class="hljs-params">(row)</span>:</span>
    <span class="hljs-string">"""
    参考文档 https://stackoverflow.com/questions/1958219/convert-sqlalchemy-row-object-to-python-dict
    将model转换为dict
    :param row: Sqlalchemy model
    :return: 输出的字典
    """</span>
    out_dict = {}
    <span class="hljs-keyword">for</span> column <span class="hljs-keyword">in</span> row.__table__.columns:
        out_dict[column.name] = str(getattr(row, column.name))
    <span class="hljs-keyword">return</span> out_dict

</code>

通过以上代码即可轻松地将model转换为dict的字典了。

2、统一的回复内容

<code><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">BaseResponse</span>:</span>
    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:
        <span class="hljs-keyword">self</span>.result_code_success = <span class="hljs-number">200</span>
        <span class="hljs-keyword">self</span>.result_code_fail = <span class="hljs-number">201</span>

    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">success</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, msg=<span class="hljs-string">"success"</span>, data={})</span></span>:
        result = {
            <span class="hljs-string">"code"</span>: <span class="hljs-keyword">self</span>.result_code_success,
            <span class="hljs-string">"message"</span>: msg,
            <span class="hljs-string">"data"</span>: data
        }
        <span class="hljs-keyword">return</span> jsonify(result)

    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">fail</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, msg=<span class="hljs-string">"fail"</span>, data={})</span></span>:
        result = {
            <span class="hljs-string">"code"</span>: <span class="hljs-keyword">self</span>.result_code_fail,
            <span class="hljs-string">"message"</span>: msg,
            <span class="hljs-string">"data"</span>: data
        }
        <span class="hljs-keyword">return</span> jsonify(result)
</code>

统一的回复内容包括了“成功”和“失败”两种情况,可自定义回复编码和内容。

启动项目

安装

首先克隆本项目

<code>$ git <span class="hljs-built_in">clone</span> git@github.com:Jarrettluo/flask-restful-quick-start.git

<span class="hljs-built_in">cd</span> flask-restful-quick-start
</code>

建议大家使用ide创建一个虚拟环境venv,避免项目使用的包与系统包不一致。

<code>$ pip install requirements.txt
</code>

最后启动项目,开始开发

<code>$ python run main.py
</code>

修改配置

在项目中的init.py中设置了连接数据库的各项参数,这些都是需要来自定义设置的。

<code>user = <span class="hljs-string">"root"</span>
password = <span class="hljs-string">"123456"</span>
database = <span class="hljs-string">"flask_quick"</span> <span class="hljs-comment"># 需要修改的内容</span>
app.config[<span class="hljs-string">"SQLALCHEMY_DATABASE_URI"</span>] = <span class="hljs-string">"mysql://%s:%s@localhost:3306/%s"</span> % (user, password, database)
</code>

在这里使用了MysqlDB,可以根据实际情况,进行修改。

同时也强烈建议大家将这些设置信息放到config.py文件中,这样方便统一修改。

在主程序中,防止了一个数据库初始化的方法,可以进行数据库的清空和创建。

<code><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">init_db</span><span class="hljs-params">()</span>:</span>
    <span class="hljs-comment"># 丢掉全部表</span>
    db.drop_all()
    <span class="hljs-comment"># 创建全部表</span>
    db.create_all()
</code>

快速开发

增加模块就只需要将现有的user模块复制以后进行修改即可。

在flask_app.__init.py中注册蓝图

<code><span class="hljs-keyword">from</span> flask_app.user <span class="hljs-keyword">import</span> user_blueprint
app.register_blueprint(user_blueprint, url_prefix=<span class="hljs-string">"/user"</span>)
</code>

在flask_app.user.__init.py中增加蓝图

<code>user_blueprint = Blueprint(<span class="hljs-string">"user_blueprint"</span>, __name__, url_prefix=<span class="hljs-string">"/user"</span>)
<span class="hljs-keyword">from</span> flask_app.user <span class="hljs-keyword">import</span> views
</code>

enjoy。

结尾

纯新手向的指导,更多的内容请参考Flask_restful的官方文档.

发表评论

好哇网,每天提供1000+次下载,做你身边靠谱的下载站!

立刻探索下载

留言咨询