我正在尝试使用angular.js创建一个POST请求到这个Django视图。
class PostJSON4SlickGrid(View):
"""
REST POST Interface for SlickGrid to update workpackages
"""
def post(self, request, root_id, wp_id, **kwargs):
print "in PostJSON4SlickGrid"
print request.POST
return HttpResponse(status=200)
因此,我创建了此资源。
myModule.factory('gridData', function($resource) {
//define resource class
var root = {{ root.pk }};
return $resource('{% url getJSON4SlickGrid root.pk %}:wpID/', {wpID:'@id'},{
get: {method:'GET', params:{}, isArray:true},
update:{method:'POST'}
});
});
在控制器中调用 get 方法可以正常工作。网址已翻译为http://127.0.0.1:8000/pm/rest/tree/1/
。
function gridController($scope, gridData){
gridData.get(function(result) {
console.log(result);
$scope.treeData = result;
//broadcast that asynchronous xhr call finished
$scope.$broadcast('mySignal', {fake: 'Hello!'});
});
}
我在执行更新/ POST方法时遇到问题。
item.$update();
该网址已转换为http://127.0.0.1:8000/pm/rest/tree/1/345
,其中缺少一个斜杠。如果在URL定义中不使用斜杠,可以很容易地避免这种情况。
url(r'^rest/tree/(?P<root_id>\d+)/(?P<wp_id>\d+)$', PostJSON4SlickGrid.as_view(), name='postJSON4SlickGrid'),
代替
url(r'^rest/tree/(?P<root_id>\d+)/(?P<wp_id>\d+)/$', PostJSON4SlickGrid.as_view(), name='postJSON4SlickGrid'),
使用不带斜杠的变通方法,我现在得到403(禁止)状态代码,这可能是由于我未在POST请求中传递CSRF令牌。因此,我的问题归结为如何将CSRF令牌传递到由angular创建的POST请求中?
我知道这种方法来传递CSRF令牌通过头,但我找了可能性
令牌添加到POST请求的身体,如建议在这里。是否有可能向发布请求正文中添加数据?
作为其他阅读材料,您可以查看关于资源,删除的尾部斜杠和资源当前具有的限制的这些讨论:disc1和disc2。在其中一个讨论中,一位作者建议当前不使用资源,而应使用这种方法。
您不能像这样拨打电话:
$http({
method: 'POST',
url: url,
data: xsrf,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
该data
可不管你要传递,然后只是追加&{{csrf_token}}
了这一点。
在您的资源中params:{}
,尝试csrfmiddlewaretoken:{{csrf_token}}
在params
编辑:
您可以将数据传递给请求主体
item.$update({csrfmiddlewaretoken:{{csrf_token}}})
和标题为
var csrf = '{{ csrf_token }}';
update:{method:'POST', headers: {'X-CSRFToken' : csrf }}
这是一个未记录的问题
我正在使用curl来测试我的Django表单之一。我尝试过的调用(每个都有错误,为了可读性,多行调用): (1): (在cookie中使用http头和)会导致400错误,并且不会返回任何数据。 (2): (如(1)中所示,但标头属性声明中没有空格,cookie中也有)会导致相同的400错误,并且没有返回任何数据。 (3): (只有带有,没有cookie的http头)导致错误代码403,消息为:未设
我试图创建一个带有动态预填充字段的Django表单:也就是说,当从下拉菜单中选择一个字段()时,其他字段会自动预填充相应的数据。为此,我希望在选择下拉选项后立即向服务器发送POST请求。 到目前为止,我已经尝试了以下模板(以下https://docs.djangoproject.com/en/2.0/ref/csrf/): 但是,当我选择一个下拉选项时,我会得到一个 新:17未捕获的语法错误:意外
我正在使用Amazon SNS在我的HTTP/HTTPSendpoint上接收推送消息。endpoint应用程序是用Django编写的。要在endpoint(web app)上接收通知,HTTP/HTTPSendpoint需要订阅一个主题。 我的问题是当Amzaon SNS发送订阅确认时,它如何在POST请求中发送CSRF令牌,以便我处理请求并检索所需信息? 文档:http://docs.aws.
问题内容: 我不想使用文件,但是只有django才需要发出POST请求。 就像发送请求一样。 问题答案: 结合使用urllib2和urllib中的方法即可解决问题。这是我使用这两种方法发布数据的方式: 是用于打开URL的方法。 将参数转换为百分比编码的字符串。
概述 我将使用API网关作为基于Spring Security性的身份验证。我刚刚按照https://spring.io/guides/tutorials/spring-security-and-angular-js/链接中的步骤创建了一个基于其对应的github项目的“对双”模块的项目https://github.com/spring-guides/tut-spring-security-and
我正在使用python的请求模块尝试登录网页。我打开了一个窗口。session(),然后我得到cookie和csrf令牌,它包含在meta标记中。我使用用户名、密码、一个隐藏的输入字段和meta标记中的csrf令牌来构建有效负载。之后,我使用post方法,传递登录url、cookie、负载和头。但在那之后,我无法访问登录页面后面的页面。我做错了什么? 这是我执行登录时的请求标头: 到目前为止,这是