Python--Flask 开发Android API接口

1. Flask介绍

Flask是一个使用 Python 编写的轻量级 Web 应用框架,使用简单操作方便,很适合开发轻量级的API接口,让Android程序员从此不再去问后台要测试接口了。

2. 简单使用

1.安装
pip3 install Falsk
2.使用

from flask import Flask

#初始化
app = Flask(__name__)

#路由
@app.route('/')
def gello_world():
    return 'Hello Flask'

if __name__ == '__main__':
    #开启service
    app.run()

运行这个python文件变启动了服务,默认8080端口

3. 项目实战

实战目标:实现一个注册登陆的接口,JSON格式

1.准备数据库相关

字段 长度 说明
id bigint 自增长主键ID
user varchar 用户名
psw varchar 用户密码
registerTime timestamp 注册时间
phone varchar 手机号码

2.db.py
数据库使用的是sqlalchemy

# -*- coding:utf-8 -*-
from operator import or_
from sqlalchemy import create_engine, Table, MetaData
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, mapper
from sqlalchemy.pool import NullPool
import traceback
'''
解决中文乱码
1.create_engine中添加charset=utf8,encoding='utf-8'
2.表中添加__table_args__ = {
        "mysql_charset": "utf8"
    }
'''
# 获取实体数据库连接
engine = create_engine('mysql+pymysql://root:1234@127.0.0.1:3306/python?charset=utf8',
                       encoding='utf-8',
                       echo=False,
                       poolclass=NullPool)

metadata = MetaData(engine)

# 反射全库 开始
metadata.reflect(bind=engine)
print('获取所有表名:', metadata.tables.keys())
# 反射全库 结束

Base = automap_base()

Base.prepare(engine, reflect=True)
print('获取所有对象名:', Base.classes.keys())

db_session = sessionmaker(bind=engine)

def login(user_name, user_psw):
    '''
    登陆
    :param user_name: 
    :param user_psw: 
    :return: 
    '''
    session = db_session()
    db_user = Base.classes.user
    try:
        user = session.query(db_user).filter(
            db_user.user == user_name,
            db_user.psw == user_psw).one()
        return user
    except BaseException:
        message = traceback.format_exc()
        if not message.__contains__('No row was found for one()'):
            #无此用户信息
            print(message)
        session.close()
        return None

def register(user_name, user_psw, user_phone):
    '''
    注册
    :param user_name: 
    :param user_psw: 
    :param user_phone: 
    :return: 
    '''
    session = db_session()
    db_user = Base.classes.user
    count = session.query(db_user).filter(
        or_(db_user.phone == user_phone,
            db_user.user == user_name)
    ).count()
    if int(count) > 0:
        return False
    user = db_user(user=user_name, psw=user_psw, phone=user_phone)
    session.add(user)
    session.commit()
    session.close()
    return True

3.servier.py

# 简单的flask接口服务

from flask import Flask, request, jsonify
import sys
import threading
import time

import db
from util import is_phone_num

server = Flask(__name__)

@server.route('/test/login', methods=['GET', 'POST'])
def login():
    print(threading.current_thread().name)
    username = request.values.get("username")
    psw = request.values.get('psw')
    if not username or not psw:
        return jsonify({'code': 400, 'msg': '参数缺省'})
    user = db2.login(username, psw)
    if user:
        res = {'code': 200, 'msg': '登录成功', 'user': {
            'username': user.user,
            'phone': user.phone,
            'registerTime': str(user.registerTime)
        }}
    else:
        res = {'code': 400, 'msg': '账号或密码错误'}
    return jsonify(res)

@server.route('/test/register', methods=['GET', 'POST'])
def register():
    username = request.values.get("username")
    psw = request.values.get('psw')
    phone = request.values.get('phone')
    if not username or not psw or not phone:
        return jsonify({'code': 400, 'msg': '参数缺省'})
    if not is_phone_num(phone):
        return jsonify({'code': 400, 'msg': '手机号非法'})
    success = db2.register(username, psw, phone)
    return jsonify(
        {'code': 200 if success else 400, 'msg': '尊敬的{},恭喜您注册成功'.format(username) if success else '用户信息已被注册'})

if __name__ == '__main__':
    server.run(
        port=8889, #自定义端口
        debug=True,#是否开启debug模式
        host='192.168.0.105',#指定host
        threaded=True#是否开启多线程
    )

4.接口

◣
Path:
http://192.168.0.105:8889/test/register?username=TangRen&psw=m123456&phone=18600000000
{
    "code": 200,
    "msg": "尊敬的TangRen,恭喜您注册成功"
}

◣
Path:
http://192.168.0.105:8889/test/login?username=TangRen&psw=m123456
{
    "code": 200,
    "msg": "登录成功",
    "user": {
        "phone": "18600000000",
        "registerTime": "2019-06-24 22:11:46",
        "username": "TangRen"
    }
}

4. 总结

Python大法好

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,948评论 1 3
  • FLASK框架 简介: flask是一个非常小的python web框架 只提供了一个强劲的核心 其它都...
    riverstation阅读 2,014评论 2 38
  • 笔记 RESTful架构风格概述 RESTful架构风格 RESTful架构风格最初由Roy T. Fieldin...
    plutoese阅读 12,563评论 3 58
  • 你是否为此烦恼? 不催很多遍,孩子不会开始写作业 开始写了,一个小时,几个字 睡觉时间到了,离不开电视屏幕 磨蹭常...
    团的花园阅读 198评论 0 0
  • 星星因向往太阳而丧失光芒 露水因渴望光芒而消耗殆尽 像蜡烛燃烧自己 像飞蛾扑向火焰 白日的梦 夜晚来凑
    文长清阅读 182评论 1 4