django;如何不使用模板创建视图(函数)

时间:2018-07-03 07:56:56

标签: python django

是否可以在没有模板的情况下创建函数? 就像我试图创建删除功能一样,我想要做的就是单击删除按钮后立即删除某些内容,然后重定向到其他页面。

我想在用户可以编辑其帖子的页面上放置一个删除按钮。 html就是这样

        <button type="submit" class="btn btn-outline-secondary">Save Changes</button>
        </form>

我想在该按钮旁边放置删除按钮。

def edit_entry(request, entry_id):
    '''Edit a post.'''

    entry = Entry.objects.get(id=entry_id)

    if request.method != 'POST':
        form = EditEntryForm(instance=entry)
    else:
        form = EditEntryForm(instance=entry, data=request.POST)

            if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse_lazy('main:index'))
    return render(request, 'main/edit_entry.html', {'entry': entry, 'form': form})


def delete_entry(request, entry_id):
    '''Delete post'''
    #I don't wanna create template for this function.
    pass

有人可以给我提示吗?

2 个答案:

答案 0 :(得分:2)

根据文档simple-view,您可以使用httpresponse

from django.http import HttpResponse

def delete_entry(request, entry_id):
    '''Delete post'''
    #I don't wanna create template for this function.
    return HttpResponse('done')

答案 1 :(得分:0)

通常,为此目的使用ajax是有意义的。 在这种情况下,点击的处理分为几个步骤:

1)您单击按钮

2)jQuery(或其他任何JavaScript代码)捕获点击事件,并将AJAX请求(通常为发布请求,因为发布用于REST协议中的数据修改)发送到服务器上定义的网址(例如/delete/my/some/thing/ )在urls.py

3)Djnago将请求路由到delete_something视图(或函数)

4)delete_something接受请求,检查您要检查的内容(例如当前用户的某些权限),删除您实际要删除的内容并做出Ajax响应。

5)jQuery接受此响应(实际上等待3-4个步骤)并检查响应内容,以检测服务器是否表示一切正常或存在某些错误。

这是从jQuery创建ajax请求的代码:

$('#delete-button').click(function(){

var delete_id = (#delete-button).data()

$.ajax
({ 
    url: '/delete/my/some/thing/',
    data: {"id": delete_id},
    type: 'post',
    success: function(result)
    {
        // here you can write code to show some success messages
    },
    error: function(result) {
       // here you can write code to show some error messages or re-send request
    }
});

});

如果需要,您也可以不使用$.ajax()方法,而可以使用$.post()

这是来自this答案的代码,用于做出Django json响应:

return HttpResponse(json.dumps(response_data), content_type="application/json")

它看起来像这样:

import json
from django.http import HttpResponse

def delete_something(request):
    resp_data = {}

    user = request.user
       delete_id = request.POST.get('delete_id') # or None, if there is no delete_id
    # here you can check user permissions, if your site has them
    # for example check that user can delete something and can delete this entity by writing check_user_can_delete() function

    if delete_id and check_user_can_delete(user):
      # do your deletion
      resp_data = {'status': 'ok'}
    else:
      resp_data.update(errors=[])

      if no delete_id:
         resp_data['errors'] = 'no delete_id'
      if not check_user_can_delete(user):
         resp_data['errors'] = 'you cave no permissions to delete delete_id'   
    resp = json.dumps(resp_data)
    return HttpResponse(resp, content_type='application/json')

还要注意,Django 1.7具有JsonResponse对象,如我提到的SO答案所示。