Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django;如何创建没有模板的视图(函数)_Python_Django - Fatal编程技术网

Python django;如何创建没有模板的视图(函数)

Python django;如何创建没有模板的视图(函数),python,django,Python,Django,是否可以在没有模板的情况下创建函数? 就像我试图创建删除功能,我想做的是在单击删除按钮后立即删除某些内容,然后重定向到其他页面 我想在用户可以编辑其帖子的页面上放置一个删除按钮。 html是这样的 <button type="submit" class="btn btn-outline-secondary">Save Changes</button> </form> 有谁能给我提示吗?根据文档,您可以使用 通常,使用ajax实

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

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

        <button type="submit" class="btn btn-outline-secondary">Save Changes</button>
        </form>
有谁能给我提示吗?

根据文档,您可以使用


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

1) 你点击按钮

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

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()

这是answer中生成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对象,如我提到的答案中所示。

单击“删除”按钮,你调用一个Django URL,它只是一个视图,返回时你重新加载当前页面。我必须在URL.py中设置视图函数吗?单击按钮时如何调用该函数?当然,您应该将该函数添加到url.py,并使用jquery或其他前端adn解决方案调用它。
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')