石墨烯模式中的Django http请求

时间:2018-06-05 09:44:20

标签: django request schema django-sessions graphene-python

如何将http-request-session对象转换为石墨烯模式?

我已经在需要访问的请求会话中存储了som值。一种可能的解决方案是将session-id发送到前端,然后将其传递给post请求,但这似乎不是一个好的解决方案。

石墨烯有一个context_value,但我不明白我是如何工作的。

在我的Django视图中,我把它放在:

schema = graphene.Schema()
schema.execute('{ viewer }', context_value={'session': request.session})

在我的石墨烯模式中,如果我尝试按照教程(https://github.com/graphql-python/graphene/blob/master/docs/execution/execute.rst)中所描述的那样做,它会说

  

'WSGIRequest'对象没有属性'get'

class Query(graphene.ObjectType):
  viewer = graphene.Field(Viewer)

  def resolve_viewer(self, info):
    info.context.get('session')
    print(info.context.session.keys()) #an empty array
    return Viewer()

1 个答案:

答案 0 :(得分:1)

您可以使用info.context.session

在解决方法中访问Django session

例如

print("session:", info.context.session)
print("keys:", info.context.session.keys())

在我的解析器输出中

session: <django.contrib.sessions.backends.db.SessionStore object at 0x7fa98e6ddac8>
keys: dict_keys(['_auth_user_id', '_auth_user_backend', '_auth_user_hash'])

您可以检查调试的一些事项:

  1. 确保会话中间件已配置

  2. 如果您在Django中构建schema对象,则所需的格式为result = schema.execute(query, context_value=request) - 有关详细信息,请参阅我在GraphQL queries in Django returning None的答案

    < / LI>