在 Django 中获取 POST 值

wor*_*m2d 4 django ajax jquery post

我有一个ajax提交(GET查询)。但是它改变了我的数据库,所以聪明的人告诉我我应该使用POST代替{% csfr_token %}.

获取查询:

$(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();
        }
    })
});
Run Code Online (Sandbox Code Playgroud)

视图.py

...
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()
...
Run Code Online (Sandbox Code Playgroud)

所以我添加了type:"post",andcsrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken])到 data 但我不知道用什么来代替if request.GET.get('add'):and if request.GET.get('add'):。我试过了,if request.POST.get('add'):但没有用。那么如何将它if与 POST 值一起使用呢?

更新。

好的,我现在拥有的... 模板:

<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>
Run Code Online (Sandbox Code Playgroud)

...

$(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();
        }
    })
});
Run Code Online (Sandbox Code Playgroud)

视图.py:

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}
Run Code Online (Sandbox Code Playgroud)

没有错误,但它不起作用。success:function()工作正常,但数据库没有变化。有什么建议吗?

我也尝试过,if request.POST('action') == 'add':但没有帮助

Ala*_*air 6

对数据使用对象{add: {{ event.id }}}而不是将其编码为字符串"add={{ event.id }}"

然后,您应该能够request.POST使用以下任一方法从中获取值:

request.POST['add']
request.POST.get('add', 'default')  # use default if key doesn't exist
Run Code Online (Sandbox Code Playgroud)

你已经在 url 中有 event_id,所以你真的不需要设置add={{event.id}}. 做类似的事情可能会更好”

{'action': 'add'}
Run Code Online (Sandbox Code Playgroud)

然后在您看来,您可以执行以下操作:

if 'action' in request.POST:
    if request.POST['action'] == 'add':
        # do something
    elif request.POST['action'] == 'remove':
        # do something else
Run Code Online (Sandbox Code Playgroud)