【问题标题】:django; How to create view (function) without templatedjango;如何在没有模板的情况下创建视图(函数)
【发布时间】:2018-12-11 11:01:53
【问题描述】:

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

我想在用户可以编辑帖子的页面上放置一个删除按钮。 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

谁能给我提示?

【问题讨论】:

  • 点击“DELETE”按钮,调用一个 Django URL,它只是一个视图,返回时重新加载当前页面。

标签: python django


【解决方案1】:

通过文档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')

【讨论】:

  • 是否必须在urls.py中设置视图功能?单击按钮时如何调用该函数?
  • 是的,当然,你应该在urls.py中添加函数,并使用jquery或其他前端adn解决方案调用它。
【解决方案2】:

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

1) 你点击按钮

2) jQuery(或任何其他 javascript 代码)捕获点击事件并发送 AJAX 请求(通常是 post 请求,因为 post 用于 REST 协议中的数据修改)到您服务器上定义的 url(如/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 答案所示。

【讨论】:

    猜你喜欢
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2022-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多