2015-09-25 2 views
0

мой views.py:Реализация пользовательского класса Response в ФПИ

class OptiResponse(Response): 
    def __init__(self, token=None, code=None, headers=None): 
     if code==0: 
      if token: 
       data = { 
        "status":{ 
         "code": 0, 
         "error_message": "" 
        }, 
        "data":{ 
         "token":token, 
        } 
       } 
      data = { 
        "status":{ 
         "code": 0, 
         "error_message": "" 
        }, 
        "data":{ 

        } 
      } 
     data = { 
       "status":{ 
        "code": 1, 
        "error_message": "" 
       }, 
       "data":{ 

      } 
     } 

     self.token=token 
     self.data = data 

     if headers: 
      for name, value in six.iteritems(headers): 
       self[name] = value 

    @property 
    def rendered_content(self): 
     return ret 

    @property 
    def status_text(self): 
     return responses.get(self.status_code, '') 

    def __getstate__(self): 
     return state 


class LoginView(generics.CreateAPIView): 
    serializer_class = serializers.LoginSerializer 

    """Authenticate and Login a user.""" 
    def post(self, request, format=None): 
     serializer = self.serializer_class(data=request.data) 

     if serializer.is_valid(): 
      email = serializer.data['email'] 
      password = serializer.data['password'] 
      remember = serializer.data['remember_me'] 

      user = authenticate(email=email, password=password) 

      if user: 
       if user.is_active: 
        if remember: 
         request.session.set_expiry(120) 

        login(request, user) 
        token = Token.objects.get(user=user) 
        return OptiResponse(0, token.key) 

Здесь выше снимок моих нынешних взглядов приложения. Я работаю над API DRF, и я хочу настроить класс Response для DRF. Я хочу, чтобы вызвать реакцию с двумя аргументами, как 'Reponse(code, token)', как указана выше, где выход остального API должен быть в формате согласно значению кода показан ниже:

    { 
        "status":{ 
         "code": 0, #either 0 in success or 1 in error. 
         "error_message": "" 
        }, 
        "data":{ 

        } 
       } 

Можно ли сделать это подклассы 'Response' класса в моем собственный класс. Возможно, я делаю это неправильно. Пожалуйста, предложите мне возможное решение.

Спасибо! заранее.

ответ

0

Он Пауло, , если вы хотите создать свой собственный ответ, вы должны:

  • написать свой класс с материнским SimpleTemplateResponse не Ответа
  • и обратить внимание на CONTENT_TYPE о fyour réponse

class MyCustomResponse(SimpleTemplateResponse): 
    def __init__(self,code=None,token=None): 


     super(Response, self).__init__(None, status=None) 


     """ 
      PUT YUOR DATA CODES HERE .... 
     """ 


     self.token = token 
     self.code = code 

     if headers: 
      for name, value in six.iteritems(headers): 
       self[name] = value 

    @property 
    def rendered_content(self): 
     renderer = getattr(self, 'accepted_renderer', None) 
     media_type = 'application/json' 
     context = getattr(self, 'renderer_context', None) 

     assert renderer, ".accepted_renderer not set on Response" 
     assert media_type, ".accepted_media_type not set on Response" 
     assert context, ".renderer_context not set on Response" 
     context['response'] = self 

     content_type = 'application/json' 


     self['Content-Type'] = content_type 

     ret = renderer.render(self.data, media_type, context) 

     if not ret: 
      del self['Content-Type'] 

     return ret 
Смежные вопросы