Flask开发接口(二)

Flask开发接口

在之前那篇直接操作数据库的基础上作出的改进,这个版本可能更加适合项目中的使用,同样实现俩个功能,增加和查询功能,基本机构如下:

操作步骤:

1.在app下,新建一个 __init__.py文件,这里是项目结构,在蓝本中定义路由地址

# coding=utf-8
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import config

import sys
reload(sys)
sys.setdefaultencoding(‘utf-8‘)

db = SQLAlchemy()

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    db.init_app(app)

    from .api_1_0 import api as api_1_0_blueprint
    app.register_blueprint(api_1_0_blueprint,url_prefix=‘/api/v1.0‘)

    return app

2.新建一个models.py,这里面是数据结构

# coding=utf-8
from datetime import datetime
from . import db
from app.exception import ValidationError
from flask import url_for

class Post(db.Model):
    __tablename__=‘posts‘
    id = db.Column(db.Integer,primary_key=True)
    body = db.Column(db.Text)
    timestamp = db.Column(db.DateTime,index=True,default=datetime.utcnow)

# 所有 url_for() 方法都指定了参数 _external=True,
# 这么做是为了生成完整的 URL,而不是生成传统 Web 程序中经常使用的
# 相对 URL。
    def to_json(self):
        json_post = {
            ‘url‘:url_for(‘api.get_post‘,id=self.id,_external=True),
            ‘body‘:self.body,
            ‘timestamp‘:self.timestamp
        }
        return json_post

# 因为id,和timestamp都是自动生成的,所以只需要传body的值即可
    @staticmethod
    def from_json(json_post):
        body = json_post.get(‘body‘)
        if body is None or body ==‘‘:
            raise ValidationError(u‘文章内容不能为空‘)
        return Post(body=body)

3. 新建一个api_1_0的文件夹,同时在文件夹下新建一个__init__.py的文件,这是api蓝本的构造文件

from flask import Blueprint

api = Blueprint(‘api‘,__name__)

from . import posts

4.      错误信息errors.py的定义,其中需要引用exception.py中定义的错误处理的调用

# coding=utf-8
from flask import jsonify
from . import api
from app.exception import  ValidationError
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8‘)

def bad_request(message):
    response = jsonify({‘错误‘:‘请求错误‘,‘信息‘:message})
    response.status_code = 400
    return response

# 程序需要向客户端提供适当的响应以处理这个异常。为了避免在视图函数中编写捕
# 获异常的代码, 我们可创建一个全局异常处理程序。
@api.errorhandler(ValidationError)
def validation_error(e):
    return bad_request(e.args[0])

5.      posts.py接口业务逻辑,查询与请求

# coding=utf-8
from flask import jsonify, request, g, url_for

from app.models import Post
from . import api
from .. import db

# 获取文章资源GET请求
@api.route(‘/posts/<int:id>‘)
def get_post(id):
    post = Post.query.get_or_404(id)
    return jsonify(post.to_json())

# 文章资源POST 插入请求
@api.route(‘/posts‘, methods=[‘POST‘])
def new_post():
    post = Post.from_json(request.json)
    db.session.add(post)
    db.session.commit()
    return jsonify(post.to_json()), 201,{‘Location‘: url_for(‘api.get_post‘, id=post.id, _external=True)}

6.    在更目录下增加项目的配置文件config.py

# coding=utf-8
import os
basedir = os.path.abspath(os.path.dirname(__file__))

class Config:

    @staticmethod
    def init_app(app):
        pass

class DevelopmentConfig(Config):
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = ‘sqlite:///D://py//flask-api//data-dev.sqlite‘

config = {
    ‘development‘: DevelopmentConfig,
    ‘default‘: DevelopmentConfig
}

7.       最后修改manage.py文件,这是项目的启动文件

# coding=utf-8
import os
from app import create_app, db
from app.models import Post
from flask_script import Manager, Shell
from flask_migrate import Migrate, MigrateCommand

app = create_app(os.getenv(‘FLASK_CONFIG‘) or ‘default‘)
manager = Manager(app)
migrate = Migrate(app, db)

def make_shell_context():
    return dict(app=app, db=db, Post=Post)

manager.add_command("shell", Shell(make_context=make_shell_context))
manager.add_command(‘db‘, MigrateCommand)

@app.route(‘/‘)
def hello():
    return ‘hello‘

if __name__ == ‘__main__‘:
    manager.run()

编程完成之后,可以使用flask-migrate实现数据的迁移,需要执行:

1.       python manage.py db init  --这个命令会创建migrations文件夹

2.       python manage.py db migrate –m “initial migration” ----migrate子命令用来创建迁移脚本

3.       python manage.py db upgrade   ---这个命令能把改动应用到数据库中

执行完上述三条命令之后,会生成data-dev.sqlite这个数据库,现在可以通过使用postman这个工具来请求接口了

1.       新增数据

2.  查询数据

时间: 2024-11-13 04:00:41

Flask开发接口(二)的相关文章

短信猫二次开发接口支持任何一种开发语言性能稳定

此款短信猫二次开发接口基于数据库开发方式支持任一种开发语言对短信猫开发,兼容性强.开发简单方便.灵活.稳定.可以快速地使您的应用系统实现短信功能,多种接口方式供二次开发时选择,系统具备良好的可扩展性.企事业单位通过此款短信猫二次开发接口方式实现短信功能,既实现了资源的共享和有效使用,便于企业对进出信息的管理.监控和统计,同时为以后短信功能的扩展提供了便利. 短信猫二次开发接口软件运行界面如图: 在该方案中,考虑到银行是对信息安全性要求很高的行业,采用短信猫作为短信收发设备,避免了常用的通过移动互

多口短信猫设备及相应二次开发接口程序

多口短信猫是指具备同时插入多张SIM卡使用的短信猫设备,具备单口短信猫8-16倍的短信收发效率,可满足对短信发送.接收量大的客户的应用需求.同样,借助相应的短信猫开发接口程序可以将多口短信猫应用于其他系统.软件当中. 多口短信猫设备有: 8口多口短信猫池,支持同时插入8张SIM卡使用 16口多口短信猫池设备,采用独立电源,一根USB数据线连接 多口短信猫开发接口程序与单口短信猫开发有所不同,大多购买短信猫设备提供的DLL免费短信猫开发包仅支持单口短信猫设备,不支持多口短信猫,所以多口短信猫二次开

配送短信猫二次开发接口提供多种开发语言示例

免费配送的信猫二次开发接口提供有多种开发语言示例,如C#.C++.Delphi.PowerBuilder.VB.net.VC++.VisualBasic等多种开发示例方便程序开发人员开发调试.使用简单方便,将sms.dll文件拷贝到系统安装目录中的system32文件夹中,然后再根据以下接口函数说明和提供的例程源码开发,无需安装,免加密狗. 短信猫二次开发接口提供的开发语言示例有: 部分短信猫二次开发接口函数说明: 1.Sms_Connection(Com_Port As Integer,Com

邮件系统二次开发接口

邮件系统二次开发接口 TurboMail邮件服务器为企业提供大量的二次开发接口与其他业务平台进行集成或者定制邮件功能. 二次开发接口类型 TurboMail邮件系统提供全面的二次开发接口,分别有:java/ .net/ http/ webservice,企业或者集成商可以轻松制定集成方案. 1. 短信提醒功能,短信二次开发接口 TurboMail邮件系统支持短信提醒功能,企业可以使用TurboMail提供的短信二次开发接口,通过短信猫或者短信平台连接邮件服务器,实现短信通知邮件功能. 2. 彩信

flask开发问题小记

前因 最近在使用flask开发一个APP的后端时出现了一些小问题.我使用sqlalchemy建立了如下多对多关系: 中间表 user_manager_group = db.Table('manage_group', db.Column('user_id', db.Integer, db.ForeignKey('users.id')), db.Column('group_id', db.Integer, db.ForeignKey('groups.id')) ) 小组 class Group(db

flask开发restful api

在此之前,向大家说明的是,我们整个框架用的是flask + sqlalchemy + redis.如果没有开发过web,还是先去学习一下,这边只是介绍如果从开发web转换到开发移动端.如果flask还不是很熟悉,我建议先到这个网站简单学习一下,非常非常简单.http://dormousehole.readthedocs.org/en/latest/ 一直想写一些特别的东西,能让大家学习讨论的东西.但目前网上的很多博客,老么就按照官方文档照本宣读,要么直接搬代码,什么都不说明.我写这个系列的博客,

QT开发(二十)——QT对话框

QT开发(二十)--QT对话框 一.对话框简介 对话框是与用户进行简短交互的顶层窗口 QDialog是QT中所有对话框窗口的基类,QDialog继承于QWidget,是一种容器型的组件,是定制了窗口样式的特殊QWidget. QDialog作为一种专用的交互窗口,不能作为子部件嵌入其他容器中. 二.对话框类型 对话框类型分为模态对话框和非模态对话框. 1.模态对话框 模态对话框显示后无法与父窗口进行交互,是一种阻塞式的对话框,使用QDialog::exec()函数调用. 模态对话框一般在栈上创建

微信公众平台搭建与开发(二)开发模式的搭建和关键词回复

在第一部分介绍了编辑模式,但是编辑模式有较大局限性,下面主要开始介绍开发模式,这一部门先简单介绍下开发模式的环境搭建和关键词回复. 开发模式首先要有一个虚拟主机,本人使用的是新浪开发者平台的虚拟主机,使用云豆计算流量,若成为新浪开发者用户基本上就可以免费使用了,本人注册用户所赠送的云豆不知道能用多久.当然国内比较大还有就是百度开发者平台,注册后发现部署还没有新浪的方便,并且在BAE3.0以后好像也是要收费的.有兴趣的朋友可以研究下google的开发者平台,不知道是否要收费. 在注册新浪开发者平台

ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

转自:http://www.cnblogs.com/mzwhj/p/3592895.html 上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东西没有理由不支持. 附件的上传同样基于KindEditor实现,可以上传图片,flash,影音,文件等. 目录 ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一)