在Django中获取POST值

时间:2016-03-30 13:44:23

标签: jquery ajax django post

我有一个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(),但没有帮助

2 个答案:

答案 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']