如何修复请求中的“TypeError:'dict'object is not callable”(TypeError:'dict'对象不可调用)

2024-03-28 10:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

联系人.py

def index():
  data = request.form.to_dict()
  send_email(data)
  return "Success!"

发送电子邮件()

^{pr2}$

我知道它与send_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 -

Tags: inpyselfappflaskdatarequestlib
1条回答
网友
1楼 · 发布于 2024-03-28 10:28:44

您错误地使用了api参数。您希望将用户名和密码组合作为元组传递给

auth=("api", API_KEY),

MailgunAPI确实是requires you to pass in the API key as a Basic Auth password,但是要使用auth关键字参数发送基本身份验证头,您可以传入一个^{} instance or a tuple

Making requests with HTTP Basic Auth is very simple:

>>> from requests.auth import HTTPBasicAuth
>>> requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
<Response [200]>

In fact, HTTP Basic Auth is so common that Requests provides a handy shorthand for using it:

>>> requests.get('https://api.github.com/user', auth=('user', 'pass'))
<Response [200]>

Providing the credentials in a tuple like this is exactly the same as the HTTPBasicAuth example above.

相关问题 更多 >