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