• flask-restful


    from flask import Flask,jsonify,g
    #导入restful类库
    from flask_restful import Api,Resource
    from flask_httpauth import HTTPBasicAuth
    from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
    
    
    
    app = Flask(__name__)
    
    
    
    #创建认证对象
    auth = HTTPBasicAuth()
    
    #设置认证的回调函数,需要认证时自动回调,成功返回true,失败返回flase
    @auth.verify_password
    def verify_password(username_or_token,password):
        if username_or_token == 'bill' and password == '123456':
            return True
        else:
            if check_token(username_or_token):
                return True
            return False
    
    #认证的错误显示
    @auth.error_handler
    def unauthorized():
        return jsonify({'error':'认证失败'}),403
    
    #生成token
    app.config['SECRET_KEY'] = '123456'
    def generate_token(expires_in=3600):
        s = Serializer(app.config['SECRET_KEY'],expires_in=expires_in)
        return s.dumps({'username':'jerry','password':'123456'})
    
    #校验token
    def check_token(token):
        s = Serializer(app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except:
            return False
        g.username = data.get('username')
        return True
    
    #创建api对象
    api = Api(app)
    
    
    @app.route('/token')
    @auth.login_required
    def get_token():
        #return jsonify({'token':generate_token()})
        return generate_token()
    
    #创建资源,继承自Resource
    class UserAPI(Resource):
        def get(self,id):
            return {'User':'GET'}
        def put(self,id):
            return {'User':'PUT'}
        def delete(self,id):
            return {'User':'DELETE'}
    
    class UserListAPI(Resource):
        #添加认证(资源保护),最简单的认证,传输的时候不够安全
        decorators = [auth.login_required]
        def get(self):
            #return {'UserList':'GET'}
            return {'User': g.username}
        def post(self):
            return {'UserList':'POST'}
    
    
    #添加资源
    #参数:1、资源类名,2、路由地址,可以是多个路由,访问相同地址,3、端点
    api.add_resource(UserAPI,'/user/<int:id>',endpoint='user')
    api.add_resource(UserListAPI,'/user/',endpoint='users')
    
    
    
    
    if __name__ == '__main__':
        app.run(debug=True)
  • 相关阅读:
    java命名规范:注重细节
    撒旦法撒旦法三阿斯顿发暗室逢灯
    369绿色浏览器开发记录
    时间过得好快
    C++进程间通信(常用理解例子)-买票
    MFC常用 控制对话框透明属性函数
    DedeCms 建站随笔(一)
    个人作业收官——软件工程实践总结
    第三次作业——个人作业——软件产品案例分析
    UML用例图
  • 原文地址:https://www.cnblogs.com/bill2014/p/12298413.html
Copyright © 2020-2023  润新知