我有一个ajax提交( GET 查询)。但它改变了我的数据库,所以聪明的人告诉我应该使用 POST 而不是@OPTIONS
public Response getOptions() {
return Response.ok()
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT")
.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding")
.build();
}
@POST
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public Response getTestResponse(TestRequest testRequest) {
return Response.ok()
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Headers", "origin, content-type, accept, authorization")
.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS").build();
}
。
获取查询:
{% csfr_token %}
views.py
$(document).on('submit','#follow', function(e){
var $button = $(this).find('button');
e.preventDefault();
$.ajax({
url:'/event/{{ event.id }}/',
data: "add={{ event.id }}",
success:function(){
$('#follow').hide();
$('#unfollow').show();
}
})
});
所以我向数据添加了...
event = get_object_or_404(Event, id=event_id)
user = request.user
if request.GET.get('add'):
event.users.add(user)
event.save()
if request.GET.get('remove'):
event.users.remove(user)
event.save()
...
和type:"post",
,但我不知道要使用什么而不是csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken])
和if request.GET.get('add'):
。我试过if request.GET.get('add'):
,但它不起作用。那么如何将if request.POST.get('add'):
与POST值一起使用?
UPD。
好的,我现在拥有的...... 的模板:
if
...
<form id="unfollow" {% if user not in event.users.all %}style="display:none;"{% endif %}>
<input type="hidden" value="{{ event.id }}" name="remove">
<button type="submit" class="btn btn-warning btn-block">{% trans "Unfollow"%}</button>
</form>
views.py:
$(document).on('submit','#unfollow', function(e){
var $button = $(this).find('button');
e.preventDefault();
$.ajax({
type:"post",
url:'/event/{{ event.id }}/',
data: {
'action': 'remove'
},
success:function(){
$('#unfollow').hide();
$('#follow').show();
}
})
});
没有错误,但它不起作用。 def show_event(request, event_id):
event = get_object_or_404(Event, id=event_id)
user = request.user
if 'action' in request.POST:
if 'action' == 'add':
event.users.add(user)
event.save()
elif 'action' == 'remove':
event.users.remove(user)
event.save()
return render(request, 'events/event.html', {'event':event, 'user':user}
工作正常但数据库没有变化。有什么建议吗?
我也试过success:function()
,但没有帮助
答案 0 :(得分:3)
使用数据{add: {{ event.id }}}
的对象,而不是将其编码为字符串"add={{ event.id }}"
然后您应该可以使用以下任一方法从request.POST
获取值:
request.POST['add']
request.POST.get('add', 'default') # use default if key doesn't exist
您的网址中已经有event_id,因此您并不需要设置add={{event.id}}
。做一些像&#34;
{'action': 'add'}
然后在您的视图中,您可以执行以下操作:
if 'action' in request.POST:
if request.POST['action'] == 'add':
# do something
elif request.POST['action'] == 'remove':
# do something else
答案 1 :(得分:0)
如果QueryDict为空,请尝试以下操作:
data = request.data['action']