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. Qt自定义信号槽的使用浅析+实例

    1. Qt中自定义信号槽的使用 Qt框架提供的信号槽在某些特定场景下是无法满足我们的项目需求的,因此我们还设计自己需要的的信号和槽,使用connect()对自定义的信号槽进行连接. 如果想要使用自定义 ...

  2. 性能工具之stress工具使用教程(带源码说明)

      stress是一个在linux下的压力测试小工具. 我看到有些人用这个工具来描述一些资源耗尽的场景,也有人用它来做混沌测试中.请使用者要注意,这个工具并不是模拟业务问题的,是模拟系统级问题的.所以 ...

  3. 微软发布了Visual Studio 2022 Preview 1 以及.NET 6 Preview 5

    Microsoft 今天宣布了Visual Studio 2022 的第一个预览版,并且同时也发布了.NET 6 Preview 5. https://devblogs.microsoft.com/v ...

  4. centos 7 iotop 安装

    安装指令:yum -y install iotop 指定查看aubunt 用户的读写状态:iotop -u aubunt -P -k -t 允许在非交互模式下每隔3秒刷新一次,只刷新6次:iotop ...

  5. echarts迁移图动态加载

    迁移图 获取迁移城市的经纬度 可以调用高德的接口,实现根据地名找寻经纬度的方法 #!/usr/bin/env python3 #-*- coding:utf-8 -*- ''' 利用高德地图api实现 ...

  6. 彻底解决Spring mvc中时间类型的转换和序列化问题

    在使用Spring mvc 进行开发时我们经常遇到前端传来的某种格式的时间字符串无法用java8时间包下的具体类型参数来直接接收.同时还有一系列的序列化 .反序列化问题,在返回前端带时间类型的同样会出 ...

  7. hackthebox TheNotebook

    前言 只拿到了user,提权没成功--有wp说是CVE-2019-5736,我没打成. 打点 nmap-sV -v -A 10.10.10.230 端口扫描结果: PORT STATE SERVICE ...

  8. google protobuf的原理和思路提炼

    之前其实已经用了5篇文章完整地分析了protobuf的原理.回过头去看,感觉一方面篇幅过大,另一方面过于追求细节和源码,对protobuf的初学者并不十分友好,因此这篇文章将会站在"了解.使 ...

  9. Ansible自动化运维应用实战

    实验环境 centos7.4 主机名称 IP 配置 用途 controlnode 172.16.1.120 1核/1G/60G ansible slavenode1 172.16.1.121 1核/1 ...

  10. flex mx:TabNavigator进行选项卡切换,需要进行交互时。发生Error #1009错误

    当需要进行 mx:TabNavigator选项卡进行切换时,需要进行交互,然后却报了"TypeError: Error #1009: 无法访问空对象引用的属性或方法."错误,产生这 ...