J'ai un jeton et je dois le transmettre à une API (créée dans views.py) afin de récupérer une heure générée. J'ai utilisé Simple-JWT pour la génération de jetons mais je ne suis pas en mesure de l'envoyer à l'URL spécifiée. Voir mon code ci-dessous:
models.py:
headers: { "Authorization": 'Bearer ' + access_token } success: function(data) { console.log(headers); ..... //remaining code
views.py:
XXX
serializers.py:
Uncaught SyntaxError: Unexpected identifier
urls.py: p >
{% block javascript %} <script type="text/javascript"> $('#get_time').click(function () { var access_token = localStorage.getItem('access'); #stored the token before in localStorage $.ajax({ cache: false, url: {% url 'time_api' %}, method: 'GET', // datatype: 'json', headers: { "Authorization": 'Bearer ' + access_token } success: function(data) { console.log(headers); document.getElementById("display_time").innerHTML(data); }, error: function(xhr, ajaxOptions, thrownError) { console.log("No data"); } }); }); </script> {% endblock javascript %}
interface.html:
{% block content %} <form method="POST"> <button type="button" class="btn btn-outline-info" id ='get_time'> Punch In </button> <h4 id='display_time'></h4> </form> {% endblock content%}
Code JS (dans la page HTML):
urlpatterns = [ # ..., path('time_api/',TimeAPI.as_view(), name = 'time_api'), ]
Après avoir cliqué sur le bouton dans ma page HTML, je ne récupère pas l'heure générée. En fait, rien ne se passe.
Voici l'erreur dans la console JS:
class MySerializer(serializers.ModelSerializer): class Meta: model = My_time fields = ('time')
et elle pointe vers la fonction de succès dans AJAX:
#API to get back time (if existing) or create a new time and send it back to the HTML page via AJAX. class TimeAPI(generics.ListAPIView): permission_classes = [IsAuthenticated] serializer_class = MySerializer def get_queryset(self, request): current_time = timezone.now() if (My_time.objects.filter(time=current_time) in (None, '')): time = My_time.objects.create(time=current_time) #saves it to my database else: pass data = My_time.objects.values_list('time', flat=True) return data #should return the data to the HTML page
Quelqu'un peut-il expliquer ce qui ne va pas? Merci
5 Réponses :
essayez d'utiliser les outils de développement du navigateur et vérifiez la sortie de la console js et incluez-la ici et essayez également de remplacer la méthode get de votre CBV et de vérifier if self.request.is_ajax
et de renvoyer les données vous avez besoin. cela pourrait être le problème
J'ai ajouté le message d'erreur. S'il vous plaît, jetez un oeil.
et peut-être modifier votre gestionnaire d'erreurs js pour prendre l'argument data uniquement comme error: function (data) {console.log ('No data'); console.log (data);}
puis vérifiez ce que la console js imprime.
La méthode get
est celle chargée de renvoyer les données aux modèles, la méthode get_queryset
contrôle les données incluses dans la réponse et peut être utilisée pour filtrer les objets à renvoyer
modifiez votre gestionnaire d'erreurs pour n'accepter que l'argument data
et enregistrez-le dans la console.
l'erreur est dans la fonction js
J'ai supprimé le gestionnaire d'erreurs. Mais il fait toujours la même chose. Il n'accède pas à l'API
Dois-je changer pour obtenir la méthode au lieu de get_queryset?
définir une nouvelle méthode def get (self, request): queryset = self.get_queryset () # construire votre réponse html et construire une réponse json et returñ que
alors en js accède à la valeur des données avec data.value
si vous retournez un json, définissez le contenu html avec `document.getElementById ('your_id'). text (data.value)
Merci pour votre réponse, mais est-il possible de mettre en forme votre réponse? Je ne peux pas le comprendre, désolé.
définir une nouvelle méthode def get (self, request): queryset = self.get_queryset () # construire votre réponse html et construire une réponse json et returñ que
alors en js accède à la valeur des données avec `data.value
from rest_framework.response import Response def get(self, response): data = self.get_queryset() # assuming data is a dict object return Response(data)