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大法好

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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