2016-08-17 2 views
0

Я пытаюсь изменить статус (от Authenticate to Authenticated) и цвет (от значения по умолчанию к успеху) на кнопке начальной загрузки всякий раз, когда мой Soundcloud API аутентифицировал своего пользователя и перенаправлен обратно на мой сайт.Django: изменить статус и цвет в кнопке начальной загрузки

Вот мой класс Soundcloud в views.py:

class SoundcloudAccountView(PodcastRequiredMixin, View): 
    form_class = SoundcloudAccountForm 
    template_name = 'pod_funnel/forms_soundcloud_account.html' 

    def get(self, request, *args, **kwargs): 
     # We check if we have a Soundcloud config for this users podcast, if not 
     # redirect directly to Oauth 2, otherwise show form 
     soundcloud_config_id = self.podcast.soundcloud_account_id 
     if soundcloud_config_id is None: 
      soundcloud_config = SoundcloudConfig(client=self.client) 
      soundcloud_config.save() 
      self.podcast.soundcloud_account = soundcloud_config 
      self.podcast.save() 
     else: 
      soundcloud_config = self.podcast.soundcloud_account 

     if not soundcloud_config.is_authenticated(): 
      client_id = settings.PODFUNNEL_SOUNDCLOUD_APP_CLIENT_ID 
      client_secret = settings.PODFUNNEL_SOUNDCLOUD_APP_CLIENT_SECRET 
      redirect_uri = settings.PODFUNNEL_SOUNDCLOUD_APP_AUTH_CALLBACK 
      api = SoundcloudAPI(soundcloud_config, request, client_id, client_secret, redirect_uri) 
      request_url_response = api.get_authentication_url() 

      if request_url_response.success and request_url_response.redirect_url: 
       return HttpResponseRedirect(request_url_response.redirect_url) 

     initial_values = {'name': soundcloud_config.screen_name} 
     form = self.form_class(initial=initial_values) 
     return render(request, self.template_name, {'form': form}) 

    # if we get a post request on this view, it means the user wants to reauthenticate or delete. 
    # Delete current soundcloud config and call get for reauthenticate otherwise back to accounts. 
    def post(self, request, *args, **kwargs): 
     soundcloud_config_id = self.podcast.soundcloud_account_id 
     if soundcloud_config_id is not None: 
      SoundcloudConfig.objects.filter(id=soundcloud_config_id).delete() 

     isDelete = request.POST.get('action', None) == 'Delete' 
     if isDelete: 
      return HttpResponseRedirect(reverse('podfunnel:accounts')) 
     return self.get(request, args, kwargs) 


class SoundcloudAuthenticationView(LoginRequiredMixin, RedirectView): 
    pattern_name = 'podfunnel:soundcloudaccount' 

    def get(self, request, *args, **kwargs): 
     soundcloud_config_id = self.request.session.get('soundcloud_config_id') 
     self.request.session.delete('soundcloud_config_id') 
     soundcloud_config = get_object_or_404(SoundcloudConfig, id=soundcloud_config_id) 

     # Now we need to exchange the tokens 
     client_id = settings.PODFUNNEL_SOUNDCLOUD_APP_CLIENT_ID 
     client_secret = settings.PODFUNNEL_SOUNDCLOUD_APP_CLIENT_SECRET 
     redirect_uri = settings.PODFUNNEL_SOUNDCLOUD_APP_AUTH_CALLBACK 
     api = SoundcloudAPI(soundcloud_config, request, client_id, client_secret, redirect_uri) 
     exchangeTokenResponse = api.get_tokens_for_authentication_callback(self.request) 

     # If succesfull update 'soundcloud_config' info 
     # Otherwise we redirect without saving. 
     if exchangeTokenResponse.success: 
      soundcloud_config.access_token = exchangeTokenResponse.access_token 
      response = api.me() # Get name 

      if response.success: 
       soundcloud_config.screen_name = response.resource.get('username') 
       soundcloud_config.save() 

     return super(SoundcloudAuthenticationView, self).get(request, *args, **kwargs) 

А вот код в шаблоне, где я хочу кнопку, чтобы изменить свой цвет и состояние всякий раз, когда пользователь успешно перенаправлен из Soundcloud:

<div class="col-md-4 text-center"> 
      <br> 
      <a class="btn btn-warning box-shadow--6dp" href="{% url 'podfunnel:soundcloudaccount' %}" role="button">Authenticate</a> 
      <br> 
     </div> 

Любое предложение о том, как я могу это реализовать? Могу ли я сделать это без внедрения jQuery?

бы оценить любое предположение

ответ

0

вы можете сделать загрузочный статус шаблона, как

return render(request, self.template_name, {'status': 'btn btn-success'}) 
return render(request, self.template_name, {'status': 'btn btn-danger'}) 

затем использовать его в шаблоне, как

<input type="button" class={{status}} value="" /> 
Смежные вопросы