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. Spring Cloud04: RestTemplate的使用

    上一篇我们已经学会了如何创建一个服务提供者,那么这一篇我们来创建一个服务消费者,实现思路是先通过Spring boot搭建一个微服务应用,再通过Eureka Client把它注册到注册中心Eureka ...

  2. 菜鸟刷题路:剑指 Offer 05. 替换空格

    剑指 Offer 05. 替换空格 class Solution { public String replaceSpace(String s) { StringBuilder str = new St ...

  3. 三、Tomcat配置文件的介绍

    *允许直接复制另外多份完整的tomcat数据,修改配置保证不冲突,起多个tomcat,优点:其中一个tomcat挂了不影响其他网页 tomcat配置文件server.xml介绍 <Server& ...

  4. 【NX二次开发】调整视图大小

    调整视图大小 tag_t tagView; UF_VIEW_ask_work_view(&tagView); UF_VIEW_fit_view(tagView, 0.7);//if NULL_ ...

  5. 02:database 配置(可能出现严格模式配置问题)

    DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day42', 'USER': 'root', 'P ...

  6. DHCP:IP 并非与生俱来

    初识 DHCP 众所周知,因特网上的每台设备都规定了其全世界唯一的地址,也就是说 "IP 地址",正是由于有了 IP 地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从 ...

  7. Effective Fusion Factor in FPN for Tiny Object Detection

    微小目标检测的FPN有效融合因子 摘要:基于FPN的检测器在一般物体检测方面取得了显著的进步,例如MS COCO和PASCAL VOC.然而,这些检测器在某些应用场景中会失败,例如微小物体检测.在本文 ...

  8. Java8新特性代码示例(附注释)- 方法引用,Optional, Stream

    /** * java8中的函数式接口,java中规定:函数式接口必须只有一个抽象方法,可以有多个非抽象方法,同时,如果继承实现了 * Object中的方法,那么也是合法的 * <p> * ...

  9. 9.5、zabbix高级操作(2)

    4.zabbix的分布式监控: 使用zabbix-proxy主动方式(被动也可),使用zabbix-agent的主动方式(被动也可): Zabbix Server <- Zabbix Proxy ...

  10. 如何获取微信小程序for循环的index

    在微信小程序开发中,对于wx:for,可以使用wx:for-index="index"来获取数组中的元素的索引值(下标). <view class="item&qu ...