2017-08-17 15 views
0
Graphene Python

、どの一つは上のクッキーを設定するHttpResponseオブジェクトへのアクセスがない場合schema.pyでCookieの設定について行けば?Graphene Pythonの突然変異でクッキーを設定するには?

私の現在の実装ではdata.operationNameを引くことにより、GraphQLViewの発送方法をオーバーライドすることでクッキーを設定することです。これには、クッキーの設定が必要な操作名/突然変異のハードコーディングが含まれます。 views.pyで

class PrivateGraphQLView(GraphQLView): 
    data = self.parse_body(request) 
    operation_name = data.get('operationName') 
    # hard-coding === not pretty. 
    if operation_name in ['loginUser', 'createUser']: 
     ... 
     response.set_cookie(...) 
    return response 

は、特定のグラフェンPythonの変異のためにクッキーを設定するクリーンな方法はありますか?

答えて

0

は、ミドルウェア経由でクッキーを設定巻き上げます。カスタムgraphqlビュー、views.py

class CookieMiddleware(object): 

    def resolve(self, next, root, args, context, info): 
     """ 
     Set cookies based on the name/type of the GraphQL operation 
     """ 

     # set cookie here and pass to dispatch method later to set in response 
     ... 

、クッキーを読んで、それを設定するには、発送方法をオーバーライドします。

class MyCustomGraphQLView(GraphQLView): 

    def dispatch(self, request, *args, **kwargs): 
     response = super(MyCustomGraphQLView, self).dispatch(request, *args, **kwargs) 
     # Set response cookies defined in middleware 
     if response.status_code == 200: 
      try: 
       response_cookies = getattr(request, CookieMiddleware.MIDDLEWARE_COOKIES) 
      except: 
       pass 
      else: 
       for cookie in response_cookies: 
        response.set_cookie(cookie.get('key'), cookie.get('value'), **cookie.get('kwargs')) 
     return response 
関連する問題