【问题标题】:Send data from django service views to java script(chrome extension)将数据从 django 服务视图发送到 javascript(chrome 扩展)
【发布时间】:2018-02-21 05:58:28
【问题描述】:

我正在从 chrome 扩展程序向 django 服务发送电子邮件和密码,以检查数据库中是否存在电子邮件和密码。接下来我必须将 django 服务的响应发送到 java 脚本(chrome 扩展)。

chrome 扩展中的javascript:

document.addEventListener('DOMContentLoaded', loginEvents, false);

function myAction(femail,fpassword) {
    //alert("femail=" + femail.value + "fpassword=" +fpassword.value);
    var strLogin = "email=" + femail.value + "&password=" + fpassword.value;
    if (femail.value == ""){
        alert("Username must be filled out");
        return false;
    }
    if (fpassword.value == ""){
        alert("Password must be filled out");
        return false;
    }
    var newxmlhttp = new XMLHttpRequest();
    var theUrl = "http://127.0.0.1:8000/polls/login/?";
    newxmlhttp.open("POST", theUrl, true);

    newxmlhttp.onreadystatechange = function() {
        if (newxmlhttp.readyState == 4){
            alert("entered");
        }
        else{
            alert("not entered");
        }

    };
    newxmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
    newxmlhttp.send(strLogin);
}
function loginEvents() {
    console.log("entered console");
    var loginSubmitButton = document.getElementById('loginSubmit')
    loginSubmitButton.addEventListener('click', 
    function(event) {
        var userEmail = document.getElementById('email');
        var userPassword = document.getElementById('password');
        myAction(userEmail,userPassword);
    });
}

views.py:

from django.http import HttpResponse
from django.http import HttpResponseRedirect, HttpResponse
from django.core.exceptions import ObjectDoesNotExist
from django.shortcuts import render
from .models import UserProfile
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def login(request):
  print(request.method)
  useremail = request.POST.get('email')
  userpassword = request.POST.get('password')
  print('email %s %s' % (useremail,userpassword))
  try:
    /* to check the data is present in database or not */ 
    entry = UserProfile.objects.get(email=useremail,password=userpassword)
    print('matched== %s %s' %(useremail,userpassword))
    return HttpResponse('hello %s' % useremail)
  except ObjectDoesNotExist:
    print('email not matched')

我能够在 Django 中获取从 chrome 扩展发送的数据,但我不明白如何将数据从 Django 发送到 chrome 扩展。我了解如何在 Django 服务发送的 chrome 扩展中获取数据,但我不明白如何从 Django 发送数据。

【问题讨论】:

    标签: python django google-chrome


    【解决方案1】:

    您可以像这样在响应处理程序中获取服务器响应:

        newxmlhttp.onreadystatechange = function() {
            if (newxmlhttp.readyState == 4){
                // Alert response
                alert(newxmlhttp.responseText);
            }
        };
    

    更新:

    将数据添加到响应中,我认为使用 JSON 数据会很容易:

    from django.http import HttpResponse, JsonResponse
    from django.http import HttpResponseRedirect, HttpResponse
    from django.core.exceptions import ObjectDoesNotExist
    from django.shortcuts import render
    from .models import UserProfile
    from django.views.decorators.csrf import csrf_exempt
    
    @csrf_exempt
    def login(request):
      print(request.method)
      useremail = request.POST.get('email')
      userpassword = request.POST.get('password')
      print('email %s %s' % (useremail,userpassword))
      try:
        /* to check the data is present in database or not */ 
        entry = UserProfile.objects.get(email=useremail,password=userpassword)
        print('matched== %s %s' %(useremail,userpassword))
        return JsonResponse({"status": "ok", "message": 'hello %s' % useremail}, status=200)
      except ObjectDoesNotExist:
        return JsonResponse({"status": "fail", "message": 'email not matched'}, status=400)
    

    【讨论】:

    • 好的,我们在 chrome 扩展中得到响应,但是数据将如何在 django 中发送
    • @AnushaReddy 您应该将数据添加到响应中,查看更新的答案。我将响应消息和状态放入视图中。现在在 JS 中,您将能够使用这些数据。
    • 很抱歉再次提出这个问题。现在我在执行上述相同代码的 chrome 扩展中获得状态代码 0。但现在我使用的是 ubuntu 16.04 和 chromium。
    • @AnushaReddy 检查这个stackoverflow.com/questions/872206/…
    猜你喜欢
    • 1970-01-01
    • 2016-11-14
    • 2016-10-29
    • 2014-08-04
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多