3

以下のコードで は、が Slack で実行されyour_methodたときに呼び出されますyour_command

from flask_slack import Slack
slack = Slack(app)
app.add_url_rule('/', view_func=slack.dispatch)
@slack.command('your_command', token='your_token',
           team_id='your_team_id', methods=['POST'])
def your_method(**kwargs):
 text = kwargs.get('text')
 return text

your_methodこのpythonプログラムの別の関数からこれを呼び出す方法。

例えば。

def print:
 a = your_method('hello','world')

これによりエラーが発生します=>

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
return func(**kwargs)
File "sample.py", line 197
a = your_method('hello','world')
TypeError: your_method() takes exactly 0 arguments (1 given)
4

2 に答える 2

2

署名に基づいて、tis 関数はキーワード引数のみを受け入れます。

def your_method(**kwargs):

位置引数で呼び出します。

your_method('hello', 'world')

署名を変更する必要があります

def your_method(*args, **kwargs)

またはそれを別の方法で呼びます

your_method(something='hello', something_else='world')
于 2016-01-21T14:06:29.603 に答える
1

これはできません。デコレータで装飾されたメソッドは、route渡された引数を受け入れることができません。ビュー関数の引数は、次のようにルート パラメーター用に予約されています。

@app.route('/user/<username>')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % username

@app.route('/post/<int:post_id>')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

さらに、Flask はこれらのメソッドを直接呼び出すことを望んでおらず、Flask からのリクエスト入力に応答してのみ実行されることを意図しています。

実行しようとしているロジックを別の関数に抽象化することをお勧めします。

于 2016-01-21T14:26:27.160 に答える