注册过程中dJango rest api中的ConnectionRefusedError
Posted
技术标签:
【中文标题】注册过程中dJango rest api中的ConnectionRefusedError【英文标题】:ConnectionRefusedError in dJango rest api while registration process 【发布时间】:2017-12-13 20:12:57 【问题描述】:注册用户时出现ConnectionRefusedError错误,
在数据库中添加了基本信息,但密码字段为空,其他数据库字段提交请查找以下错误和我们的类代码,
类
class ProfessionalRegistrationSerializer(serializers.HyperlinkedModelSerializer):
password = serializers.CharField(max_length=20, write_only=True)
email = serializers.EmailField()
first_name = serializers.CharField(max_length=30)
last_name = serializers.CharField(max_length=30)
class Meta:
model = User
fields = ('url', 'id', 'first_name', 'last_name', 'email', 'password')
def validate_email(self, value):
from validate_email_address import validate_email
if User.all_objects.filter(email=value.lower()).exists():
raise serializers.ValidationError('User with this email already exists.')
return value.lower()
def create(self, validated_data):
password = validated_data.pop('password')
email = validated_data.pop('email')
user = User.objects.create(
username=email.lower(),
email=email.lower(),
role_id=1,
**validated_data)
user.set_password(password)
user.save()
return user
错误
ConnectionRefusedError 在 /api/v1/register/professional/ [Errno 111] 连接被拒绝 请求方法:POST 请求网址:http://127.0.0.1:8000/api/v1/register/professional/ Django 版本:1.8.14 异常类型:ConnectionRefusedError 异常值: [Errno 111] 连接被拒绝 异常位置:create_connection 中的 /usr/lib/python3.5/socket.py,第 702 行 Python 可执行文件:/home/project_backend/env/bin/python Python版本:3.5.2 Python 路径: ['/home/project_backend', '/home/project_backend/env/lib/python35.zip', '/home/project_backend/env/lib/python3.5', '/home/project_backend/env/lib/python3.5/plat-x86_64-linux-gnu', '/home/project_backend/env/lib/python3.5/lib-dynload', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/home/project_backend/env/lib/python3.5/site-packages', '/home/project_backend/env/lib/python3.5/site-packages/setuptools-36.0.1-py3.5.egg']
追溯
File "/home/project_backend/env/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response
132.response = Wrapped_callback(request, *callback_args, **callback_kwargs) 文件 "/home/project_backend/env/lib/python3.5/site-packages/django/views/decorators/csrf.py" 在 Wrapped_view 58. 返回 view_func(*args, **kwargs) 视图中的文件“/home/project_backend/env/lib/python3.5/site-packages/django/views/generic/base.py” 71. return self.dispatch(request, *args, **kwargs) 调度中的文件“/home/project_backend/env/lib/python3.5/site-packages/rest_framework/views.py” 464. 响应 = self.handle_exception(exc) 调度中的文件“/home/project_backend/env/lib/python3.5/site-packages/rest_framework/views.py” 461. 响应 = 处理程序(请求,*args,**kwargs) 帖子中的文件“/home/project_backend/filmup/apps/registrations/views.py” 53. 用户 = 序列化程序.save(work_status=user_type) 保存文件“/home/project_backend/env/lib/python3.5/site-packages/rest_framework/serializers.py” 175. self.instance = self.create(validated_data) 创建文件“/home/project_backend/project/apps/registrations/serializers.py” 157. **验证数据) manager_method 中的文件“/home/project_backend/env/lib/python3.5/site-packages/django/db/models/manager.py” 127. return getattr(self.get_queryset(), name)(*args, **kwargs) 创建文件“/home/project_backend/env/lib/python3.5/site-packages/django/db/models/query.py” 348. obj.save(force_insert=True, using=self.db) 保存文件“/home/project_backend/project/libs/accounts/models.py” 217. super().save(*args, **kwargs) 保存文件“/home/project_backend/env/lib/python3.5/site-packages/django/db/models/base.py” 734. force_update=force_update, update_fields=update_fields) save_base 中的文件“/home/project_backend/env/lib/python3.5/site-packages/django/db/models/base.py” 771. update_fields=update_fields,原始=原始,使用=使用) 发送中的文件“/home/project_backend/env/lib/python3.5/site-packages/django/dispatch/dispatcher.py” 189.响应=接收者(信号=自我,发送者=发送者,**命名) create_user_setting 中的文件“/home/project_backend/filmup/libs/accounts/signals.py” 19. create_ejabberd_user(实例) create_ejabberd_user 中的文件“/home/project_backend/project/libs/accounts/signals.py” 11. EjabberdUser.objects.create(username=str(user.id), password=str(token.key)) 创建文件“/home/project_backend/project/libs/accounts/models.py” 73. ctl.register(user=kwargs['username'], 密码=kwargs['password']) 寄存器中的文件“/home/project_backend/project/libs/ejabberdctl.py” 54.'密码':密码) ctl 中的文件“/home/project_backend/project/libs/ejabberdctl.py” 32. return fn(self.params, payload) 调用中的文件“/usr/lib/python3.5/xmlrpc/client.py” 1092. 返回 self.__send(self.__name, args) __request 中的文件“/usr/lib/python3.5/xmlrpc/client.py” 1432.详细=自我.__详细 请求中的文件“/usr/lib/python3.5/xmlrpc/client.py” 1134. return self.single_request(主机,处理程序,request_body,详细) single_request 中的文件“/usr/lib/python3.5/xmlrpc/client.py” 1146. http_conn = self.send_request(主机,处理程序,request_body,详细) send_request 中的文件“/usr/lib/python3.5/xmlrpc/client.py” 1259. self.send_content(连接,request_body) send_content 中的文件“/usr/lib/python3.5/xmlrpc/client.py” 1289.connection.endheaders(request_body) endheaders 中的文件“/usr/lib/python3.5/http/client.py” 1102. self._send_output(message_body) _send_output 中的文件“/usr/lib/python3.5/http/client.py” 934. self.send(msg) 发送中的文件“/usr/lib/python3.5/http/client.py” 877. self.connect() 连接中的文件“/usr/lib/python3.5/http/client.py” 849. (self.host,self.port), self.timeout, self.source_address) create_connection 中的文件“/usr/lib/python3.5/socket.py” 711.引发错误 create_connection 中的文件“/usr/lib/python3.5/socket.py” 702. sock.connect(sa)
【问题讨论】:
完整回溯将有助于找出这里缺少的内容。您显示的代码没有理由这样做。 我投票结束这个问题,因为它是关于未提及的第三方网络服务。 请指出调用的是哪个第三方api? 回溯代码很难让人读懂,但您可以看到几个“xmlrpc/client.py”,这意味着您正在调用第 3 方 XMLRPC 服务器。 我是 Django 的新手,我不知道它是如何调用的。当我在 post 方法上调用注册 api 时,除了密码和 user = User.objects.create( username=email.lower(), email=email.lower(), role_id=1, **validated_data) 之后,所有数据都被保存此脚本在“用户”中没有返回任何内容 【参考方案1】:我遇到了同样的错误,这可能是由于电子邮件验证。我在我的 setting.py 文件中添加了以下代码,现在身份验证工作正常
ACCOUNT_EMAIL_VERIFICATION = 'none'
ACCOUNT_AUTHENTICATION_METHOD = 'username'
ACCOUNT_EMAIL_REQUIRED = False
【讨论】:
【参考方案2】:您对无法访问/未配置/未运行的远程服务器执行调用。
这不是 Django 或 DRF 的问题。
【讨论】:
您想指出远程调用脚本的位置和部分吗?以上是关于注册过程中dJango rest api中的ConnectionRefusedError的主要内容,如果未能解决你的问题,请参考以下文章
如何保护 Django Rest Framework 中注册和登录的 API?
如何在 Django 和 Python 中使用 JWT(JSON Web 令牌)来创建用于注册和登录的 REST API
如何修复在 Django Rest Framework 中使用 REST API 登录时出现的 CSRF 错误?