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

Javascript AngularJS-如何从AngularJS前端函数更改后端Python变量的值?,javascript,python,angularjs,variables,web-frontend,Javascript,Python,Angularjs,Variables,Web Frontend,我目前正在开发一个基于web的应用程序,其后端使用Django和Python开发,前端使用AngularJS开发 前端的一个页面上有一个表单,用户可以使用该表单将后端记录和存储的数据导出到电子表格中 后端中记录的所有数据都是“时间敏感的”,目前,后端中只设置了一个时区(UTC)。我想为添加多个新时区“创建”设置,以便记录的数据可以导出到不同的时区 时区在project/apps/appAbc/abc/settings.py中设置为: class Production(Settings):

我目前正在开发一个基于web的应用程序,其后端使用Django和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>
表单上的
ul时区选择器
字段调用的
selectTimezone()
函数在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中定义的
timezone
变量的值

我尝试在函数中声明变量的实例,方法是:

Production.TIME_ZONE = $scope.timezone;
但是,当我执行此操作并在浏览器中查看包含表单的页面时,浏览器控制台会显示一个错误,说明:

ReferenceError:未定义生产


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

您不能从AngularJS中访问Python类。Python应用程序和Angular应用程序是两个独立的程序,它们甚至不在同一台计算机上运行

这里的挑战是发明一种这两个程序可以交流的“语言”。有很多方法可以设计这样的语言,HTTP是一个很好的默认选择

您的后端正在使用Django,Django非常擅长理解和响应HTTP请求。花一两天的时间阅读Django教程,找出如何制作Django应用程序,然后思考应用程序需要能够处理哪些HTTP端点。将它添加到后端,测试一下,然后转到Angular应用程序

不过要小心——Django应用程序通常不依赖于类中存储的全局状态,比如
类生产
,而是将状态存储在数据库中

一旦后端就绪,使用Angular将请求发送到刚才添加的地址


我有点含糊不清(对不起),但我在这里假设你现在是Django的新手,并且教程将比我可能的更有用。祝你好运

了解HTTP协议和客户端代码与服务器端代码的区别如何?如果你想做任何与web相关的事情,这可能是个好主意……哦,是的:Django设置是不会被弄乱的——即使是Django代码本身也不会被弄乱——因此,即使你能做你所描述的事情,这也不会起作用。这个项目的Django设置文件显然已经被修改过了——因为有一些自定义权限已经被修改过写入此文件(在我开始处理此项目之前完成)。抱歉,我的观点不清楚:在流程执行期间,django设置将被视为只读。当然,你必须时不时地编辑设置文件-这些是设置,这就是它们的用途-但不是在流程执行期间。啊,好的。谢谢。问题中的“状态”是django的设置,它们确实不应该在执行过程中发生变化(django的文档对此非常清楚),因此这不会解决OP的问题。
Production.TIME_ZONE = $scope.timezone;