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. Linux下Flash-LED的处理

    Linux下Flash-LED的处理 一些LED设备提供两种模式-torch和flash.在LED子系统中,LED类(参见Linux下的LED处理)和LED Flash类,分别支持这些模式.torch ...

  2. 基于TensorRT优化的Machine Translation

    基于TensorRT优化的Machine Translation 机器翻译系统用于将文本从一种语言翻译成另一种语言.递归神经网络(RNN)是机器翻译中最流行的深度学习解决方案之一. TensorRT机 ...

  3. 代码生成器:IDEA 强大的 Live Templates

    前言 Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量,logger或者bean等等.对于这种小范围的代码生成,我们可以利用 IDEA 提供的 Live Templates功能. ...

  4. Springboot自定义starter打印sql及其执行时间

    前面写到了通过实现mybatis提供的org.apache.ibatis.plugin.Interceptor接口实现了打印SQL执行时间,并格式化SQL及其参数,如果我们使用的是ssm还得再配置文件 ...

  5. 基于GIS的国土空间规划平台建设

    ​ 本期介绍基于地理信息平台的国土空间规划平台的规划辅助编制应用.在梳理国土空间规划科学流程的基础上,将规划编制各关键环节信息化.工具化.智能化:充分发挥清华同衡大数据与智能模型相结合的定量评估.精准 ...

  6. Golang超时机制--2秒内某个函数没被调用就认为超时

    Golang超时机制--2秒内某个函数没被调用就认为超时 需求描述 当一整套流程需要其他程序来调用函数完成时通常需要一个超时机制,防止别人程序故障不调你函数导致你的程序流程卡死 实现demo pack ...

  7. leetcode动态规划题目总结

    Hello everyone, I am a Chinese noob programmer. I have practiced questions on leetcode.com for 2 yea ...

  8. excel VBA构造函数就是这么简单

    Function test(a As Integer)'构造函数名字为test参数为a且为int型  If a >= 90 Then     Debug.Print "优秀" ...

  9. 陋居寡闻,初探Github CLI For Windows,开启命令行撸铁时代

    简介 gh is GitHub on the command line. It brings pull requests, issues, and other GitHub concepts to t ...

  10. 第2章:Kubernetes核心概念

    Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S. Kubernetes用于容器化应用程序的部署,扩展和管理,目标是让部署容器化应用简单高效. ...