如何在Django中重定向到请求来源的页面

roejwanj  于 2023-01-03  发布在  Go
关注(0)|答案(1)|浏览(136)

我目前在一个项目上工作,我想重定向到页面的请求是来自窗体,当请求方法是 GET
这是我的views.py文件视图.py

def delete_patient(request):
    if request.method == 'POST':
        patient_id = request.POST['patient_id']
        rem = Patient.objects.get(pk=patient_id)
        rem2 = CustomUser.objects.get(aid=patient_id, role=4)
        rem.delete()
        rem2.delete()
        return JsonResponse({'delete': 1})
    else:
        // //

所以请告诉我想在视图其他部分写什么。

t98cgbkg

t98cgbkg1#

通常,服务器用一个不允许的 405方法响应。特别是因为它甚至没有说请求“来自某个地方”。例如,你可以用curlwget等来发出这样的请求。你可以使用一个*@require_POST**装饰器[Django-doc],例如,在方法不是POST的情况下返回一个405(获取、放置、修补等):

from django.views.decorators.http import require_POST

@require_POST
def delete_patient(request):
    patient_id = request.POST['patient_id']
    rem = Patient.objects.get(pk=patient_id)
    rem2 = CustomUser.objects.get(aid=patient_id, role=4)
    rem.delete()
    rem2.delete()
    return JsonResponse({'delete': 1})

如果你真的想重定向到引用页面,你可以尝试访问**request.META**字典中的HTTP_REFERER键,但是并不是所有的浏览器都发送引用页面,甚至没有说请求是从Web客户端发出的。
因此,您可以使用:

from django.http import HttpResponseNotAllowed, HttpResponseRedirect

def delete_patient(request):
    if request.method == 'POST':
        patient_id = request.POST['patient_id']
        rem = Patient.objects.get(pk=patient_id)
        rem2 = CustomUser.objects.get(aid=patient_id, role=4)
        rem.delete()
        rem2.delete()
        return JsonResponse({'delete': 1})
    elif 'HTTP_REFERER' in request.META:
        return HttpResponseRedirect(request.META['HTTP_REFERER'])
    else:
        return HttpResponseNotAllowed(['POST'])

相关问题