跳转到主要内容

草莓 + Django 的电话号码集成

项目描述

strawberry-django-phonenumber

build status

简介

GraphQL电话号码类型,与Strawberry Django集成。如果您使用djangostrawberrydjango-phonenumber-field,则此库适用于您。

支持

  • Python 3.9+ (可能也支持更早版本,需要测试)
  • Django 3+
  • strawberry-graphql-django 0.17+
  • django-phonenumber-field 7+

以下是它的工作方式。自动获取此查询

query User {
  phoneNumber {
    ...phoneNumberFragment
  }
}

fragment phoneNumberFragment on PhoneNumber {
    asInternational  # +1 415-418-3420
    asNational  # (415) 418-3420
    asE164
    asRfc3966
    countryCode  # 1
    nationalNumber
    extension
    rawInput
}

使用此代码

# yourapp/models.py
from django.contrib.auth.models import AbstractUser
from phonenumber_field.modelfields import PhoneNumberField


class User(AbstractUser):
    phone_number = PhoneNumberField(blank=True)

# yourapp/graphql/types.py
from typing import Optional, cast

import strawberry
import strawberry_django
from strawberry.types import Info
from strawberry_django_phonenumber import PhoneNumber

from yourapp import models



@strawberry_django.type(models.User)
class User(strawberry.relay.Node):
    """GraphQL type for the User model."""

    @strawberry_django.field
    async def phone_number(root, info: Info) -> Optional[PhoneNumber]:
        if not root.phone_number:
            return None
        return cast(PhoneNumber, root.phone_number)

# yourapp/graphql/__init__.py
from typing import Optional

import strawberry
import strawberry_django
from asgiref.sync import sync_to_async
from strawberry.types import Info

from .types import User


@sync_to_async
def aget_user_from_request(request):
    return request.user if bool(request.user) else None


@strawberry.type
class Queries:
    @strawberry_django.field
    async def me(self, info: Info) -> Optional[User]:
        user = await aget_user_from_request(info.context.request)
        return user


schema = strawberry.Schema(query=Queries)

# yourapp/urls.py

from django.urls import path
from django.views.decorators.csrf import csrf_exempt
from strawberry.django.views import AsyncGraphQLView

from .graphql import schema

urlpatterns = [
    path(
        "graphql/",
        csrf_exempt(
            AsyncGraphQLView.as_view(
                schema=schema,
                graphiql=True,
            )
        ),
    ),
]

安装

pip install strawberry-django-phonenumber

变更日志

0.2.0

- Remove psycopg2-binary dependency, allow psycopg>=3

0.1.0

- Initial release

贡献

运行测试

poetry run pytest

这就是目前的过程。请打开一个pull request或issue。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源代码发行版

strawberry_django_phonenumber-0.2.0.tar.gz (3.3 kB 查看哈希值)

上传时间 源代码

构建版本

strawberry_django_phonenumber-0.2.0-py3-none-any.whl (4.3 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面