注册过程中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-rest-auth自带登录注册api

如何在 Django 和 Python 中使用 JWT(JSON Web 令牌)来创建用于注册和登录的 REST API

如何修复在 Django Rest Framework 中使用 REST API 登录时出现的 CSRF 错误?

如何在 Django Rest Framework 中散列 Django 用户密码?

Django Rest Framework:在 ViewSet 中注册多个序列化程序