【问题标题】:Ajax request with AngularJs and DjangoAngularJs 和 Django 的 Ajax 请求
【发布时间】:2015-02-13 12:33:08
【问题描述】:

我正在尝试发出 Ajax 请求,但是,直到位于 views.py 文件中的 escalando() 函数才发送信息 出现错误

POST http://localhost:8000/escalar 403 (FORBIDDEN)

我不知道自己做错了什么

目录组织如下:

+bvm
-manage.py
  +bvmf
    -__init__.py
    -settings.py
    -url.py
    -wsgi.py
    +bvmfconsulta
       -__init__.py
       -views.py
       +templates
          -postt.html

文件 postt.html

<!DOCTYPE html>
<html ng-app>
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js"></script>
    <script>
        function ListDropdown($scope, $http){
            $scope.ccvms={lista01:['1','3','5','7','9'],lista02:['2','4','6','8','10']}
            $scope.send=function(x,y){
                $http.post("/escalar",x+y)
            }
        } 
    </script>
</head>

<body>
    <div ng-controller="ListDropdown">
        <select ng-model="ccvm" ng-options="ccvm as ccvm for (ccvm, nums) in ccvms"></select>
        <select ng-model="num" ng-disabled="!ccvm" ng-options="num for num in ccvms[ccvm]" ng-change="send(num, ccvm)"></select>
    </div>
</body>
</html>

文件 url.py

from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^post2/','bvmfconsulta.views.post3'),
url(r'^escalar','bvmfconsulta.views.escalando')
)

文件views.py

from django.shortcuts import render_to_response
from bvmfconsulta.escala import demonstrativos

def post3(request):
   return render_to_response("postt.html")

def escalando(self,args):
   print args

【问题讨论】:

标签: python ajax django angularjs


【解决方案1】:

您必须进行一些更改。

  1. 确保您的发布请求具有正确的标头。
  2. 在角度更改您的 post 命令以在 post 对象中包含数据 改变
  3. 您的 django 视图期待发布请求并访问发布数据。

配置您的 Angular POST 以获得正确的标题

在您的 javascript 部分中:

var ListDropdown = angular.module('ListDropdown', ['ngResource']);
ListDropdown.config(function($httpProvider , $interpolateProvider, $resourceProvider){
    $httpProvider.defaults.xsrfCookieName = 'csrftoken';
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
    //** django urls loves trailling slashes which angularjs removes by default.
    $resourceProvider.defaults.stripTrailingSlashes = false;

    //** you can skip these if you want
    $interpolateProvider.startSymbol('[[');
    $interpolateProvider.endSymbol(']]');
    **//
  });

以角度更改您的 post 命令以在 post 对象中包含数据

change

发布时,最好将 args 存储为数据。所以你的 post statement 看起来像 e

$http.post(url, data: {test: 'data'})

django 视图期待发布请求并访问发布数据。

在你的views.py中:

您应该考虑确保该请求是一个 post 请求,将您的第一个参数命名为 request(为清楚起见),然后您可以通过 POST Dictionary 访问您发送的数据

def escalando(request,args):
   if request.method == 'POST':
       request.POST.get('test') ## show return data.

更多文档:

【讨论】:

    猜你喜欢
    • 2015-02-14
    • 2020-06-17
    • 1970-01-01
    • 2013-02-15
    • 2014-02-15
    • 2016-12-28
    • 2013-09-28
    • 2014-04-28
    • 1970-01-01
    相关资源
    最近更新 更多