获取在下一个vi中如何使用HttpRedirect调用视图

2024-04-25 19:35:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我在django中有两个视图:一个加载页面,另一个保存表单。我已经将两者分开,这样我就可以保持在同一页上,而不会因为刷新页面而导致重新提交

保存表单的create视图重定向回用HttpResponseRedirect加载页面的视图

在loadpage视图中,是否可以通过重定向获取create视图是否调用了该视图

所以:

def holiday(request, value=None, year=None, month=None):
    if request.method == "GET":
        # set some variables for the view
        year = something
        month = something_else
    else:
        # get if the view was executed from a redirect
        # set year and month to be something2 and something_else2

    # calendar

    holidayform = HolidayForm(request.POST or None, request.FILES or None)
    context = {
        "holidayform": holidayform,
        "calendar": mark_safe(cal),
        "year": year,
        "month": month,
    }
    return render(request, "tande/calendar.html", context)

然后保存窗体的视图:

def create_holiday(request):
    overlapping_dates = False
    if request.method == "POST":

        #save the form... or don't

        return HttpResponseRedirect(reverse("tande:holiday"))

Tags: orthenone视图表单ifrequestcreate
1条回答
网友
1楼 · 发布于 2024-04-25 19:35:10

HttpResponseRedirect将直接重定向用户。基本上,就好像用户在浏览器中输入了URL并按下了enter。这意味着过去请求中的一些信息将不可用

https://docs.djangoproject.com/en/1.10/ref/request-response/#httpresponse-subclasses

可以通过GET参数传递标志。它会成功的:

HttpResponseRedirect(reverse("tande:holiday") + '?redirect=True')

然后在form_view中读取GET参数:

if request.GET.get('redirect', None):
    do_something()

你只需要想想如果用户故意将GET参数添加到URL中会发生什么。他可以伪造结果。如果您的意图是显示一条消息,那么它不会是一个问题

相关问题 更多 >