zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    js中常见事件
    第六周
    石家庄地铁售票系统
    第五周
    第四周
    html总结2
    返回一个整数数组中最大子数组的和(续)
    第九周总结
    团队冲刺第五天-KeepRunningAPP
    团队冲刺第四天-KeepRunningAPP
  • 原文地址:https://www.cnblogs.com/bill2014/p/12298413.html
Copyright © 2011-2022 走看看