如何将javascript字符串变量传递给django视图?

时间:2020-07-01 12:33:16

标签: jquery json django push-notification python-requests

这是javascript部分。正在从该文件中调用以下 store_token 函数,并传递了一个字符串值,例如“ AasdfGth:Jl-Hjf ....”(浏览器令牌值)

function store_token(token) {

    var data = {'reg_id':token};
    console.log("Reg id", data);
    data = JSON.stringify(data);
    $.post('/api_call_for_django_view', data, function(response){});
};

django视图是-

@csrf_exempt
@api_view(['POST'])
@permission_classes((AllowAny,))
def api_call_for_django_view(request):
    if request.method == 'POST':
        token = request.POST.dict()
        print("", token)    #this gives a value {'{"reg_id":{}}': ''}
        registration_id = token['reg_id']

不知道为什么令牌值成功到达 store_token 函数时未通过令牌值!

console.log("Reg id", data);

具有以下值 enter image description here

我希望将reg_id字符串值(即来自JavaScript的token)存储到Django视图的registration_id变量中

1 个答案:

答案 0 :(得分:1)

正如@mursalin指出的那样,token变量是Promise的一个实例。兑现承诺后,字符串数据将可用。因此,在您的JS中,必须在诺言解决后提出发布请求。请参阅以下JS代码,

function store_token(token) {
    if (token instanceof Promise) {
        token.then(tokenData => {
            console.log('tokenData', tokenData);
            let data = { 'reg_id': tokenData };
            console.log("data", data);
            // data = JSON.stringify(data);
            $.post('/api_call_for_django_view', data, response => { console.log('post response', response); });
        }).catch(tokenError => {
            console.log('tokenError', tokenError);
        });
    }
}

我希望这会有所帮助。