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)