Python GraphQL:[Errno 111]连接被拒绝 描述
我正在尝试为一个具有不同类型用户(司机、客户、系统管理员和授权人)的交通系统构建一个API。为此,我创建了一个Python GraphQL:[Errno 111]连接被拒绝 描述,python,django,graphql,django-graphql-jwt,Python,Django,Graphql,Django Graphql Jwt,我正在尝试为一个具有不同类型用户(司机、客户、系统管理员和授权人)的交通系统构建一个API。为此,我创建了一个AbstractUser,并为上述所有不同的用户使用继承关系。 关于将JWT添加到模型中,我已经阅读了,但是每当我想要创建一个新用户时,我都会遇到如下错误: mutation { register( email: "new_user@email.com", username: "new_user", password1:
AbstractUser
,并为上述所有不同的用户使用继承关系。
关于将JWT添加到模型中,我已经阅读了,但是每当我想要创建一个新用户时,我都会遇到如下错误:
mutation {
register(
email: "new_user@email.com",
username: "new_user",
password1: "supersecretpassword",
password2: "supersecretpassword",
) {
success,
errors,
token,
refreshToken
}
}
复制步骤
从django.contrib.auth.models导入AbstractUser
#在这里创建您的模型。
类Usermodel(AbstractUser,models.Model):
电话号码=models.CharField(
最大长度=11,
空白=真,
详细名称=“电话号码”
)
USERNAME_FIELD=“USERNAME”#例如:“用户名”、“电子邮件”
EMAIL_FIELD=“EMAIL”#例如:“EMAIL”、“primary_EMAIL”
定义(自我):
返回self.username
类驱动程序(Usermodel、models.Model):
national_id=models.CharField(
最大长度=10,
空白=真,
详细名称=“国家ID”
)
profile\u picture=models.ImageField(
空白=真,
空=真
)
状态_选项=[
('1','Free'),
(“2”,“忙”)
]
驱动程序状态=models.CharField(
最大长度=1,
选择=状态\选择
)
额定值=models.FloatField(
默认值=-1
)
排名=models.IntegerField(
默认值=-1
)
类元:
详细名称='驱动程序'
详细名称复数='Drivers'
类授权人(Usermodel、models.Model):
类元:
详细名称='授权人'
详细名称复数=‘授权人’
类客户(Usermodel、models.Model):
类元:
详细名称='客户'
详细名称复数='客户'
类管理员(Usermodel、models.Model):
类元:
详细的\u name='Administrator'
详细的\u名称\u复数='Administrators'
导入石墨烯
从graphene导入突变、ObjectType、InputObjectType
from.models导入驱动程序、授权人、客户、管理员
从graphene_django.types导入djangObjectType
类DriverType(DjangObjectType):
类元:
型号=驱动器
类AuthorizerType(DjangObjectType):
类元:
模型=授权人
类查询(对象类型):
驱动器=石墨烯。字段(
DriverType,
id=graphene.id()
)
授权人=石墨烯字段(
授权类型,
id=graphene.id()
)
所有驱动程序=graphene.List(DriverType)
所有授权人=graphene.List(AuthorizerType)
def解析所有驱动程序(自身、信息、**kwargs):
返回Driver.objects.all()
def解析驱动程序(自身、信息、**kwargs):
id=kwargs.get('id')
如果id不是无:
返回Driver.objects.get(pk=id)
def解析授权人(自我、信息、**kwargs):
id=kwargs.get('id')
如果id不是无:
返回Driver.objects.get(pk=id)
def解析所有授权人(自我、信息、**kwargs):
返回Authorizer.objects.all()
类DriverInput(InputObject类型):
first_name=graphene.String()
last_name=graphene.String()
email=graphene.String()
用户名=graphene.String()
phone_no=graphene.String()
national_id=graphene.String()
密码=graphene.String()
类authorinInput(InputObject类型):
first_name=graphene.String()
last_name=graphene.String()
email=graphene.String()
用户名=graphene.String()
phone_no=graphene.String()
密码=graphene.String()
类CreateDriver(变异):
类参数:
驱动程序数据=驱动程序输入()
driver=石墨烯字段(DriverType)
def突变(自身、信息、驱动程序数据=无):
司机(
first\u name=驱动程序数据。first\u name,
last\u name=驱动程序数据。last\u name,
电子邮件=驱动程序\u data.email,
username=driver\u data.username,
电话号码=司机号码。电话号码,
national_id=驾驶员数据。national_id,
密码=驱动程序\数据。密码
)
driver.save()
返回CreateDriver(
司机
)
类更新驱动程序(变异):
类参数:
id=graphene.id()
驱动程序数据=驱动程序输入()
driver=石墨烯字段(DriverType)
def突变(自身、信息、id、驱动程序数据=无):
#TODO:id不存在时的错误处理
driver=driver.objects.get(pk=id)
driver.first\u name=driver\u data.first\u name
driver.last\u name=driver\u data.last\u name
driver.email=driver\u data.email
driver.username=driver\u data.username
driver.phone\u no=driver\u data.phone\u no
driver.national\u id=driver\u data.national\u id
driver.password=driver\u data.password
driver.save()
返回更新的驱动程序(驱动程序=驱动程序)
类authorinInput(InputObject类型):
first_name=graphene.String()
last_name=graphene.String()
email=graphene.String()
用户名=graphene.String()
phone_no=graphene.String()
密码=graphene.String()
类别CreateAuthorizer(变异):
类参数:
授权人_data=authorinput()
授权人=石墨烯字段(授权输入)
def变异(自身、信息、授权人数据=无):
授权人(
firstname=授权人\数据。firstname,
last_name=授权人_数据。last_name,
email=授权人_data.email,
用户名=授权人_data.username,
电话号码=授权人号码。电话号码,
password=授权人\u data.password
)
授权人保存()
返回CreateAuthorizer(authorizer=authorizer)
类UpdateAuthorizer(变异):
类参数:
id=graphene.id()
授权人_data=authorinput()
授权人=石墨烯字段(授权人)
aniso8601==7.0.0
asgiref==3.2.10
Django==3.0.8
django-filter==2.3.0
django-graphql-auth==0.3.11
django-graphql-jwt==0.3.0
graphene==2.1.8
graphene-django==2.12.1
graphql-core==2.3.2
graphql-relay==2.0.1
Pillow==7.2.0
pkg-resources==0.0.0
promise==2.3
PyJWT==1.7.1
pytz==2020.1
Rx==1.6.1
singledispatch==3.4.0.3
six==1.15.0
sqlparse==0.3.1
Unidecode==1.1.1
# ...
# Application definition
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
# Package apps
"corsheaders",
"graphene_django",
"graphql_jwt.refresh_token.apps.RefreshTokenConfig",
"graphql_auth",
"django_filters",
# Created apps
"users", # or whatever the name of the app is with your custom users model
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"corsheaders.middleware.CorsMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
ROOT_URLCONF = "<project_name>.urls"
# TEMPLATES = ...
# WSGI_APPLICATION = ...
# DATABASES = ...
# Ensure that custom user is set
AUTH_USER_MODEL = "users.CustomUser"
# AUTH_PASSWORD_VALIDATORS = ...
# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/
# ...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/
# ...
GRAPHENE = {
"SCHEMA": "backend.schema.schema",
"MIDDLEWARE": ["graphql_jwt.middleware.JSONWebTokenMiddleware",],
}
AUTHENTICATION_BACKENDS = [
"graphql_jwt.backends.JSONWebTokenBackend",
"django.contrib.auth.backends.ModelBackend",
"graphql_auth.backends.GraphQLAuthBackend",
]
GRAPHQL_JWT = {
"JWT_VERIFY_EXPIRATION": True,
"JWT_LONG_RUNNING_REFRESH_TOKEN": True,
}
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
class CustomUser(AbstractUser):
...
luck_number = models.IntegerField()
...
# Rest of your settings ...
GRAPHQL_AUTH = {}
GRAPHQL_AUTH = {
REGISTER_MUTATION_FIELDS = {
"email": "String",
"username": "String",
"luck_number": "Int",
}
}