Python “如何修复”;类型错误:';dict';对象不可调用";请求中

Python “如何修复”;类型错误:';dict';对象不可调用";请求中,python,python-3.x,python-requests,mailgun,Python,Python 3.x,Python Requests,Mailgun,我的目标是使用Mailgun发送电子邮件。我使用Flask调用它,使用请求库: contact.py def index(): data = request.form.to_dict() send_email(data) return "Success!" 发送电子邮件() 我知道这与send\u email()功能有关,但我目前正忙于解决这个问题 编辑:以下是完整的回溯: Traceback (most recent call last): File "/usr/lib/p

我的目标是使用Mailgun发送电子邮件。我使用Flask调用它,使用
请求
库:

contact.py

def index():
  data = request.form.to_dict()
  send_email(data)
  return "Success!"
发送电子邮件()

我知道这与
send\u email()
功能有关,但我目前正忙于解决这个问题


编辑:以下是完整的回溯:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python3/dist-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "contact.py", line 9, in index
    send_email(data)
  File "/home/david-hermes/Desktop/Projects/frontend/web/single-page-resume/send_email.py", line 44, in send_email
    data=data,
  File "/usr/lib/python3/dist-packages/requests/api.py", line 112, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 494, in request
    prep = self.prepare_request(req)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 437, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "/usr/lib/python3/dist-packages/requests/models.py", line 309, in prepare
    self.prepare_auth(auth, url)
  File "/usr/lib/python3/dist-packages/requests/models.py", line 540, in prepare_auth
    r = auth(self)
TypeError: 'dict' object is not callable
127.0.0.1 - - [31/Jan/2019 21:01:28] "POST / HTTP/1.1" 500 -

您错误地使用了
api
参数。您希望以元组形式传入用户名和密码组合:

Mailgun API确实存在,但要使用
auth
关键字参数发送基本身份验证标头,您可以传入:

使用HTTP Basic Auth发出请求非常简单:

>>> from requests.auth import HTTPBasicAuth
>>> requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
<Response [200]>
>>from requests.auth import HTTPBasicAuth
>>>请求。获取('https://api.github.com/user,auth=HTTPBasicAuth('user','pass'))
事实上,HTTP Basic Auth非常常见,请求为使用它提供了方便的速记:

>>> requests.get('https://api.github.com/user', auth=('user', 'pass'))
<Response [200]>
>>请求。获取('https://api.github.com/user,auth=('user','pass'))
在这样的元组中提供凭据与上面的
HTTPBasicAuth
示例完全相同

对,所以
auth={“api”:api_KEY}
是字典。那是因为这个。
>>> from requests.auth import HTTPBasicAuth
>>> requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
<Response [200]>
>>> requests.get('https://api.github.com/user', auth=('user', 'pass'))
<Response [200]>