使用flask写移动端API
环境 python 3.7
使用pip 安装falsk
pip3 install flask
#!flask/bin/python
from flask import Flask, jsonify, render_template, Request, Response
from flask import flask_bootstrap
from flask import g
import sqlite3
import time
import datetime import dbInit app = Flask(__name__) def connect_db():
conn = sqlite3.connect("testDB.db3",check_same_thread = False)
return conn conn = connect_db()
cursor = conn.cursor() #通过在before_request/teardown_request hook方法可以在每次请求连接开始之前和结束时候连接和断开数据库
@app.before_request
def before_request():
g.db = connect_db() @app.teardown_request
def teardown_request(exception):
if hasattr(g, 'db'):
g.db.close() #但是该方法的缺陷在于没有请求就没法连接数据库,所以如果要在脚本或者python的交互式终端中访问数据库需要这样做
with app.test_request_context():
app.preprocess_request()
#now you can use the g.db object
# dbInit.init_db() #缺点,不能离开请求上下文依赖,解决方法
def get_connection():
db = getattr(g, '_db', None)
if db is None:
db = g._db = connect_db()
return db
#缺点必须使用 db = get_connection() 而不是仅仅直接使用g.db 来访问数据库连接 def initSqliteBD():
connect_db()
createUserTable() def createUserTable():
cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
conn.commit() def deleteTable(tableName):
cursor.execute('delete table')
conn.commit() def insertAnUser(id, name):
cursor.execute('insert into user values(?,?)',(id,name))
conn.commit() def queryAllUser():
cursor.execute('select id, name from user')
conn.commit()
return cursor.fetchone() #===========page route==========
@app.route('/')
def index():
return "Hello, World!" @app.route('/index/<name>')
def home(name=None):
return render_template('index.html',name = name) @app.route('/register')
def regiser():
return render_template('register.html') #===========api route==========
@app.route('/todo/api/v1.0/user/register', methods=['GET'])
def createAnUser():
insertAnUser(1,'Jarvis')
return jsonify('ok') @app.route('/todo/api/v1.0/users',methods=['GET'])
def get_users():
# return jsonify({"users":users})
return jsonify(queryAllUser()) @app.route('/todo/api/v1.0/users/<string:userName>',methods=['GET'])
def get_user(userName):
users = [{"userName":"Jarvis","age":""},{"userName":"Mike","age":""}]
user = filter(lambda t: t[userName] == userName, users)
if len(user) == 0:
abort(404)
return jsonify({"task":task[0]}) if __name__ == '__main__':
app.run(debug=True)
initSqliteBD()
使用flask写移动端API的更多相关文章
- Python Flask 实现移动端应用接口(API)
引言 目前,Web 应用已形成一种趋势:业务逻辑被越来越多地移到客户端,逐渐完善为一种称为富互联网应用(RIA,rich Internet application)的架构.在 RIA 中,服务器的主要 ...
- 使用python的Flask实现一个RESTful API服务器端
使用python的Flask实现一个RESTful API服务器端 最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文 ...
- Identity4实现服务端+api资源控制+客户端请求
准备写一些关于Identity4相关的东西,最近也比较对这方面感兴趣.所有做个开篇笔记记录一下,以便督促自己下一个技术方案方向 已经写好的入门级别Identity4的服务+api资源访问控制和简单的客 ...
- JAVA通过http访问其他服务端API
项目要实现这么一个功能,用户通过点击按钮,通过axios来访问python的API(算法,java不好做)得到一个结果存储到数据库并且返回到页面. 但是python不是在tomcat上面运行的,所以不 ...
- CMDB学习之五服务端api
服务端api 对发送来的数据进行处理,并返回结果,首先要创建一个Django项目 第一步,就是写URL路由在分支中写url api 主路由 from django.conf.urls import u ...
- 移动端API架构 统一Proxy还是各自为政?
今天首先回答上一篇的问题: 为什么APP通过运营商接入网络,连通率会那么差? 1. 域名缓存问题 运营商的localdns会缓存域名的解析结果,不向权威DNS递归查询解析 为什么要这么干呢? 1)运营 ...
- .Net分布式异常报警系统-客户端及服务端API
客户端 客户端的作用就是捕获未处理异常, 发送异常到服务端. 关于捕获未处理异常的方法参考 http://www.cnblogs.com/youring2/archive/2012/04/25/246 ...
- 安卓推送——个推服务端api使用误区
首先你需要在个推开放着平台上注册你的应用,以及获得以下几个必要的值APPID |APPKEY | MASTERSECRET,本文假设你已经完成上述步骤以及完成客户端SDK的集成. 原理 个推服务端ap ...
- 服务端API 工作经验(没有工作的是体会不到的)
1.慢慢了解以下内容 [{xx:xxx,xx:xxx},{xx:xxx,xx:xxx},{xx:xxx,xx:xxx},]-- 数据 data 服务端API 状态代码(01代表成功) message ...
随机推荐
- 为何float有效位数为7位?
为何float有效位数为7位? 首先我们应该明确一点:C语言中,%f表示保留7位有效数字7位有效数字: 是指 整数部分 和小数部分一共7位 单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^ ...
- windows系统安装完后要做的事情
完成之后 1.netplwiz关闭开机输入密码 2.这台电脑右击->属性->高级系统设置->高级->性能设置->高级->虚拟内存: 把C盘设为无分页文件,选择一个大 ...
- 大数高精度计算库gmp简介
1.编译安装,我用的ubuntu18.04 $sudo apt-get install m4 //默认没安装,gmp用这个 $tar -jvxf gmp-.tar.bz2 //解压 $cd gmp- ...
- 全面理解Javascript闭包和闭包的几种写法及用途【转】
一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...
- 关于es6中的yield
<!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...
- CAD技巧之002——如何用Cass内插高程点或者说加密高程点
CAD技巧之002——如何用Cass内插高程点或者说加密高程点 很多同志如果遇到奇葩的Cass内插高程点或者说加密高程点,怎么办,一个个编辑?如果工作量很大,怎么办呢. 今天九天就教您一个好方法! 废 ...
- expect脚本同步文件 expect脚本指定host和要同步的文件 构建文件分发系统 批量远程执行命令
自动同步文件 #!/usr/bin/expect set " spawn rsync -av root@.txt /tmp/ expect { "yes/no" { se ...
- mysql wait_timeout 8小时问题解决,tomcat数据源的配置
异常报错: 2017-02-13 09:30:17.597 [startQuertz_Worker-6] ERROR com.autoyol.task.TransStatManageTask#exec ...
- 前端开发神级IDE-sublime text
汉化并自动带常用插件的版本下载地址:http://www.cr173.com/soft/55484.html 1.修改auto_complete快捷键:首选项>设置-默认>ctrl+f搜索 ...
- 关于rem适配的3种常用封装
在之前写了一篇关于rem适配的文章,但是没有给出具体的封装,那么今天这里给出常用的三种方法,分享出来供大家参考学习,下面话不多说了,来随着小编一起学习学习吧 一.rem1.js 第一种方法考虑了m端屏 ...