from flask import Flask,jsonify,make_response,abort,Response,request
from flask_restful import Api,Resource,reqparse
from flask_httpauth import HTTPBasicAuth
app = Flask(__name__)
api = Api(app=app)
auth = HTTPBasicAuth()
#认证通过
@auth.get_password
def get_password(username):
    if username == "Admin":
        return "admin"
#认证不通过的错误信息
@auth.error_handler
def authrized():
    return make_response(jsonify({'msg':'您好,请认证'}),401)
@app.errorhandler(404)
def not_found(error):
    return make_response(jsonify({"error":"请求页面不存在!"}),404)
@app.errorhandler(405)
def not_found(error):
    return make_response(jsonify({"error":"请求方式不对!"}),405)
books = [
    {'ID':1,'author':'Teacher','name':'Python','done':True},
    {'ID':2,'author':'Teacher','name':'Selenium','done':True},
    {'ID':3,'author':'Teacher','name':'Appium','done':False},
]
#查看全部书籍
@app.route('/v1/api/books',methods=['GET'])
@auth.login_required
def get_books():
    return jsonify({'data':books})
#添加部分书籍
@app.route('/v1/api/books',methods=['POST'])
@auth.login_required
def create_books():
    if not Response.json:
        abort (404)
    else:
        book = {
            'ID':books[-1]['ID']+1,
            'author':request.json.get('author'),
            'name':request.json.get('name'),
            'done':False
        }
        books.append(book)
        return jsonify({'msg':'添加书籍成功'})
#根据ID查询对应书籍
@app.route('/v1/api/book/<int:book_id>',methods=['GET'])
@auth.login_required
def get_book(book_id):
    book = list(filter(lambda t:t['ID']==book_id,books))
    if len(book) == 0:
        abort (404)
    else:
        return jsonify({'status':1001,'msg':'ok','data':book})
#根据ID删除对应书籍
@app.route('/v1/api/book/<int:book_id>',methods=['DELETE'])
@auth.login_required
def delete_book(book_id):
    book = list(filter(lambda t:t['ID']==book_id,books))
    print(book)
    if len(book)==0:
        abort (404)
    else:
        books.remove(book[0])
        return jsonify({'status':1002,'msg':'删除书籍成功','data':book})
#根据ID更新对应书籍
@app.route('/v1/api/book/<int:book_id>',methods=['PUT'])
@auth.login_required
def put_book(book_id):
    book = list(filter(lambda t:t['ID']==book_id,books))
    # print(book)
    if len(book)==0:
        abort (404)
    
    elif not Response.json:
        abort (404)
    elif 'author' not in request.json and 'name' not in request.json:
        abort (404)
    elif 'done' not in request.json and type(request.json['done'] is not bool):
        abort (404)
    
    else:
        book[-1]['author'] = request.json.get('author',book[-1]['author'])
        book[-1]['name'] = request.json.get('name',book[-1]['name'])
        book[-1]['done'] = request.json.get('done',book[-1]['done'])
        return jsonify({'status':1003,'msg':'更新书籍成功','data':book})
@app.route("/index")
@auth.login_required
def index():
    return jsonify({"status":0,"msg":"ok","data":{"name":"tea","age":22}})
class LoginView(Resource):
    # def get(self):
    #     parser = reqparse.RequestParser()
    #     return jsonify({'status':0,'msg':'ok','data':parser.parse_args()})
    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('username',type=str,help='账号不能为空',required=True)
        parser.add_argument('password',type=str,help='密码不能为空',required=True)
        parser.add_argument('age',type=int,help='年龄必须是整型')
        return jsonify({'status':0,'msg':'ok','data':parser.parse_args()})
# 添加路由
api.add_resource(LoginView,'/login',endpoint='login')
# @app.route("/login",methods=['GET'])
# def login():
#     parser = reqparse.RequestParser()
#     parser.add_argument('username',type=str,help='账号不能为空',required=True)
#     parser.add_argument('password',type=str,help='密码不能为空',required=True)
#     return jsonify({'status':0,'msg':'ok','data':parser.parse_args()})
if __name__ == "__main__":
    app.run(debug=True)
 
 
 
 
 
 
from flask import Flask,jsonify,make_response,abort,Response,request
from flask_restful import Api,Resource,reqparse
from flask_httpauth import HTTPBasicAuth
app = Flask(__name__)
api = Api(app=app)
auth = HTTPBasicAuth()
#认证通过
@auth.get_password
def get_password(username):
    if username == "Admin":
        return "admin"
#认证不通过的错误信息
@auth.error_handler
def authrized():
    return make_response(jsonify({'msg':'您好,请认证'}),401)
@app.errorhandler(404)
def not_found(error):
    return make_response(jsonify({"error":"请求页面不存在!"}),404)
@app.errorhandler(405)
def not_found(error):
    return make_response(jsonify({"error":"请求方式不对!"}),405)
books = [
    {'ID':1,'author':'Teacher','name':'Python','done':True},
    {'ID':2,'author':'Teacher','name':'Selenium','done':True},
    {'ID':3,'author':'Teacher','name':'Appium','done':False},
]
class Books(Resource):
    #鉴权认证(登录)
    decorators = [auth.login_required]
    #查看全部书籍
    def get(self):
        return jsonify({'data':books})
    
    #添加部分书籍
    def post(self):
        if not Response.json:
            abort (404)
        else:
            book = {
                'ID':books[-1]['ID']+1,
                'author':request.json.get('author'),
                'name':request.json.get('name'),
                'done':False
            }
            books.append(book)
            return jsonify({'msg':'添加书籍成功'})
class Book(Resource):
    #鉴权认证(登录)
    decorators = [auth.login_required]
    #根据ID查询对应书籍
    def get(self,book_id):
        book = list(filter(lambda t:t['ID']==book_id,books))
        if len(book) == 0:
            abort (404)
        else:
            return jsonify({'status':1001,'msg':'ok','data':book})
    #根据ID删除对应书籍
    def delete(self,book_id):
        book = list(filter(lambda t:t['ID']==book_id,books))
        if len(book)==0:
            abort (404)
        else:
            books.remove(book[0])
            return jsonify({'status':1002,'msg':'删除书籍成功','data':book})
    #根据ID更新对应书籍
    def put(self,book_id):
        book = list(filter(lambda t:t['ID']==book_id,books))
        if len(book)==0:
            abort (404)
        
        elif not Response.json:
            abort (404)
        elif 'author' not in request.json and 'name' not in request.json:
            abort (404)
        elif 'done' not in request.json and type(request.json['done'] is not bool):
            abort (404)
    
        else:
            book[-1]['author'] = request.json.get('author',book[-1]['author'])
            book[-1]['name'] = request.json.get('name',book[-1]['name'])
            book[-1]['done'] = request.json.get('done',book[-1]['done'])
            return jsonify({'status':1003,'msg':'更新书籍成功','data':book})
api.add_resource(Books,'/v1/api/books')
api.add_resource(Book,'/v1/api/book/<int:book_id>')
   
if __name__ == "__main__":
    app.run(debug=True)

python + flask轻量级框架的更多相关文章

  1. 初步了解学习flask轻量级框架,

    关于flask我有话说 flask作为一个轻量级框架,它里面有好多扩展包需要下载,比较麻烦,而且有的时候flask需要在虚拟环境下运行,但是他的优点还是有滴 ,只要是用过Django的人,都会觉得fl ...

  2. Python Flask Web 框架入门

    Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...

  3. 比我的脸还干的gan货——Python Flask Web 框架入门

    Flask是一个轻量级的基于Python的web框架. 本文适合有一定HTML.Python.网络基础的同学阅读. 1. 简介 这份文档中的代码使用 Python 3 运行.是的,所以读者需要自己在电 ...

  4. python Flask restful框架

    框架地址:https://github.com/flask-restful/flask-restful 文档:http://flask-restful.readthedocs.io/en/0.3.5/ ...

  5. python Flask web框架

    目录: --> Flask --> 配置文件 --> 配置文件解析 --> 配置文件导入 --> 路由 --> 路由参数 --> 常用路由匹配 --> ...

  6. flask轻量级框架入门

    # -*- encoding: utf-8 -*- #导入Flask类, 导入重定向,url_for是简易寻址跳转, from flask import Flask,redirect,url_for, ...

  7. Python Flask 实现移动端应用接口(API)

    引言 目前,Web 应用已形成一种趋势:业务逻辑被越来越多地移到客户端,逐渐完善为一种称为富互联网应用(RIA,rich Internet application)的架构.在 RIA 中,服务器的主要 ...

  8. Python 【web框架】之Flask

    flask 是Python实现的轻量级web框架.没有表单,orm等,但扩展性很好.很多Python web开发者十分喜欢.本篇介绍flask的简单使用及其扩展. 文中示例源码已经传到github:h ...

  9. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

随机推荐

  1. 对端边缘云网络计算模式:透明计算、移动边缘计算、雾计算和Cloudlet

    对端边缘云网络计算模式:透明计算.移动边缘计算.雾计算和Cloudlet 概要 将数据发送到云端进行分析是过去几十年的一个突出趋势,推动了云计算成为主流计算范式.然而,物联网时代设备数量和数据流量的急 ...

  2. 基于TensorRT 3的自动驾驶快速INT8推理

    基于TensorRT 3的自动驾驶快速INT8推理 Fast INT8 Inference for Autonomous Vehicles with TensorRT 3 自主驾驶需要安全性,需要一种 ...

  3. Imec推出高性能芯片的低成本冷却解决方案

    Imec推出高性能芯片的低成本冷却解决方案 Imec unveils low-cost cooling solution for high-performance chips 3D打印冷却器优于传统解 ...

  4. 数据结构-几种Tree

    1.二叉查找树 或 二叉排序树 (BST) 性质:左子树的键值小于根的键值,右子树的键值大于根的键值. 2.平衡二叉树(AVL Tree) 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且 ...

  5. springboot——简单通过Map将错误提示输出到页面显示

    主要思路:在controller层我们将错误信息put进map中,然后通过视图解析器跳转到目标页面,在目标页面中在通过指定标签内的th:text将错误消息取出. 例: 1.编写controller代码 ...

  6. SpringBoot系列——admin服务监控

    前言 springboot项目部署起来后,如何实时监控项目的运行状况呢?本文记录使用springboot-admin对服务进行监控. springboot-admin介绍:https://codece ...

  7. 理解Spring:IOC的原理及手动实现

    Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架.也是几乎所有Java工作者必须要掌握的框架之一,其优秀的设计思想以及其代码实现上的艺术也是我们需要掌握的. ...

  8. 【模板】O(nlongn)求LIS

    合理运用单调性降低复杂度 平常用的都是O(n^2)的dp求LIS(最长不下降子序列)这里介绍O(nlogn)的算法 分析 对于可能出现的x<y<i且A[y]<A[x]<A[i] ...

  9. docker-compose 部署 Apollo 自定义环境

    Apollo 配置中心是什么: ​ Apollo是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性. ...

  10. Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇)

    Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇) 目录 Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇) 1 Optimizing Storage Layout f ...