代码之家  ›  专栏  ›  技术社区  ›  Devesh Agrawal

AssertionError:如果未提供终结点,则应为view func-python

  •  0
  • Devesh Agrawal  · 技术社区  · 4 年前

    试图用 需要\u字段 装饰工。这就是实现。

    import functools
    from flask import request, jsonify
    
    def requires_fields(fields):
        required_fields = set(fields)
    
        def wrapper(func):
            @functools.wraps(func)
            def decorated(*args, **kwargs):
                current_fields = set(request.get_json().keys())
                missing_fields = required_fields - current_fields
                if missing_fields:
                    return jsonify({'error': 'missing fields', 'fields': list(missing_fields)}), 400  # Bad Request
                resp = func(*args, **kwargs)
                return resp
        return wrapper
    
    @app.route('/is_registered', methods=['POST'])
    @requires_fields(['mobile'])
    def is_registered():
        _json = request.get_json()
        keys = _json.keys()
        customer = Customer()
        registered = False
    
        response = verify_required_params(['mobile'], keys)
        if response:
            return response
    
        _mobile = _json['mobile']
    
        validated = validate_mobile(_mobile)
        cust, response_code = customer.get(_mobile)
        if cust is not None and cust['id']:
            registered = True
    
        if not validated:
            response = responses.get(MOBILE_NUMBER_NOT_VALID)
            return jsonify(response)
    
        if not registered:
            response = responses.get(MOBILE_NUMBER_NOT_REGISTERED)
            return jsonify(response)
    
        response = responses.get(MOBILE_NUMBER_REGISTERED)
        return jsonify(response)
    

    它给了我这个错误:

    assert view_func is not None, "expected view func if endpoint is not provided."
    AssertionError: expected view func if endpoint is not provided.
    

    1 回复  |  直到 4 年前
        1
  •  1
  •   Omar Aflak    4 年前

    你忘了还车 decorated wrapper 功能。

    当你这么做的时候 @wrapper 在函数顶部 test 例如,你基本上是在写作 test = wrapper(test) .

    如果不返回任何内容,则会出现错误。

    def requires_fields(fields):
        required_fields = set(fields)
        def wrapper(func):
            @functools.wraps(func)
            def decorated(*args, **kwargs):
                # ...
            return decorated # you are missing this
        return wrapper
    
    推荐文章