AngularJS-如何从AngularJS前端函数更改后端Python变量的值?

时间:2018-06-01 13:33:05

标签: javascript python angularjs variables web-frontend

我目前正致力于基于网络的应用程序,后端使用Django& amp; Python,前端是使用AngularJS开发的。

前端的其中一个页面上有一个表单,用户可以使用该表单导出已记录的数据。存储在电子表格的后端。

后端记录的所有数据都是时间敏感的,目前在后端(UTC)只设置了一个时区。我想创造'用于添加多个新时区的设置,以便记录的数据可以在不同的时区导出。

时区在project / apps / appAbc / abc / settings.py中设置:

class Production(Settings):
    ...
    TIME_ZONE = 'UTC'
    ...

出口'表单有多个字段(预设,数据类型,按数量/期间排序数据,要导出的文件类型),我刚添加了一个'时区'下降到它:

<section class="panel panel-brand export-page panel-no-border-radius">
<div class="panel-body panel-body-fixed-md">
    ...
    <div class="divider"></div>
    <div class="row">
        <label data-i18n="Timezone:" class="col-sm-3"></label>
        <div ul-timezone-picker callback="selectTimezone" class="col-sm-9" default-label={{presetTimezone}} btn-class="btn-xs btn-default"></div>
    </div>
    <div class="divider"></div>
    <div class="row" ul-scroll-to-me="scrollToFtype">
        <label data-i18n="File type:" class="col-sm-3"></label>
        <div ul-options-menu class="col-sm-9" options="ftypeOptions"
             callback="selectFType" warning="{{ftypeWarning}}"
             btn-class="btn-xs btn-default" default-idx="0" default-label="{{presetFtype}}"></div>
    </div>
    <div class="divider divider-lg"></div>
    <div class="row">
        <div class="col-sm-4"></div>
        <div class="col-sm-4">
            <button class="btn btn-sm btn-block btn-brand" ng-hide="!btnDisabled" ng-click="setDownloadUrl(true)">
                <i class="ti-export"></i>
                <span data-i18n="Export"></span>
            </button>
            <a class="btn btn-sm btn-block btn-brand" role="button" target="_blank" href="{{downloadURL}}" ng-hide="btnDisabled">
                <i class="ti-export"></i>
                <span data-i18n="Export"></span>
            </a>
        </div>
    </div>
</div>

并在Pages / directive.js中,我向ulTimezonePicker控制器添加了多个时区:

.directive('ulTimezonePicker', function() {
    return {
        ...
        controller: function ($scope) {
            $scope.options = [{label: 'UTC', value: 0},
            // Add in other timezones
            {label: 'GMT', value: 1},
            {label: 'BST', value: 2},
        ];
        ...
    ...
})

表单上selectTimezone()字段调用的ul-timezone-picker函数在project / libs / front / app / scripts / app / pages / exportCtrl.js中定义:

angular.module('app.pages').controller('ExportCtrl',
    function(...) {
        ...
        $scope.selectTimezone = function(option){
            if(option) {
                $scope.timezone = option;
                if(option.label != $scope.presetTimezone) {
                    $scope.presetTimezone = undefined;
                }
            }
        };
    ...
    }
}

所以,我的问题是,如何让selectTimezone()函数实际更改settings.py中定义的TIME_ZONE变量的值?

我尝试在函数中声明变量的实例:

Production.TIME_ZONE = $scope.timezone;

但是当我这样做,并在浏览器中查看包含该表单的页面时,浏览器控制台会给出一个错误说明:

  

ReferenceError:未定义生产

如何从AngularJS函数中实际获取Python类,以更改其中一个变量的值?

1 个答案:

答案 0 :(得分:0)

您不会与AngularJS的Python课程交谈。您的Python应用程序和Angular应用程序是两个独立的程序,甚至不能在同一台计算机上运行。

这里的挑战是发明一种语言&#34;这两个程序可以通信。有很多方法可以设计这样的语言,HTTP是一个很好的默认选择。

你的后端正在使用Django,而Django非常善于理解和响应HTTP请求。花一两天时间浏览Django教程,弄清楚如何制作Django应用程序,然后考虑应用程序需要能够处理的HTTP端点。将它添加到后端,稍微测试一下,然后转到Angular应用程序。

  

小心 - Django应用程序通常不依赖存储在类class Production之类的全局状态,而是将状态存储在数据库中。

一旦你有后端,使用Angular的$http service将请求发送到你刚刚添加的地址。

我有点模糊(对不起),但我现在假设你刚才是Django的新手,这个教程会比我更有帮助。祝你好运!