Post 在 Django 中重定向后方法不起作用
Post method not working after redirect in Django
我正在尝试创建一个系统,除非请求来自特定位置,否则无法访问某些页面。我目前一切正常,除了在检查位置并将请求重定向到下一个视图后,下一个视图上的表单不正确 posting。它仍在尝试 post 位置数据表单。
你会在我的 views.py
:
中明白我的意思
def add(request):
if request.method == 'POST':
form = StudentModelForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
form = StudentModelForm()
context_data = {'form': form}
return render(request, 'add.html', context_data)
def location_check_add(request):
if request.method == 'POST' and 'lat' in request.POST:
user_lat = request.POST.get('lat')
user_lon = request.POST.get('lon')
if good_location(user_lat,user_lon):
return add(request)
else:
return render(request, 'location.html')
return render(request, 'checking.html')
因此,如果 good_location
为真,我将尝试重定向到 add()
视图。它重定向正确,但是当用户尝试 post add.html
上的表单时,django 认为它正在再次提交 location_check_add
中的表单。
编辑:添加 urls.py
以供参考
import users.views
urlpatterns = patterns('',
url(r'^$', users.views.index, name = 'index'),
url(r'^admin/', include(admin.site.urls)),
url(r'^add/', users.views.location_check_add, name = 'add'),
)
您需要重定向,而不仅仅是调用视图。
if good_location(user_lat,user_lon):
return redirect('add')
好的!经过大量文档搜索和谷歌搜索后,我发现了 Django 的会话功能。此处的文档:
最后我的代码看起来像:
def add(request):
if request.session.get('at_work', False):
if request.method == 'POST':
form = StudentModelForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
form = StudentModelForm()
context_data = {'form': form}
return render(request, 'add.html', context_data)
else:
return redirect(location_check_add)
def location_check_add(request):
if request.method == 'POST' and 'lat' in request.POST:
user_lat = request.POST.get('lat')
user_lon = request.POST.get('lon')
if good_location(user_lat,user_lon):
request.session['at_work'] = True
return redirect(add)
else:
return render(request, 'location.html')
return render (request, 'checking.html')
基本上我只是传递了会话变量 "at_work" 以确保在 add() 视图中呈现页面之前位置是正确的。然后我能够使用常规重定向功能,因为我可以在 urls.py 中将 url 指向 add() 而无需人们绕过位置检查。
我正在尝试创建一个系统,除非请求来自特定位置,否则无法访问某些页面。我目前一切正常,除了在检查位置并将请求重定向到下一个视图后,下一个视图上的表单不正确 posting。它仍在尝试 post 位置数据表单。
你会在我的 views.py
:
def add(request):
if request.method == 'POST':
form = StudentModelForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
form = StudentModelForm()
context_data = {'form': form}
return render(request, 'add.html', context_data)
def location_check_add(request):
if request.method == 'POST' and 'lat' in request.POST:
user_lat = request.POST.get('lat')
user_lon = request.POST.get('lon')
if good_location(user_lat,user_lon):
return add(request)
else:
return render(request, 'location.html')
return render(request, 'checking.html')
因此,如果 good_location
为真,我将尝试重定向到 add()
视图。它重定向正确,但是当用户尝试 post add.html
上的表单时,django 认为它正在再次提交 location_check_add
中的表单。
编辑:添加 urls.py
以供参考
import users.views
urlpatterns = patterns('',
url(r'^$', users.views.index, name = 'index'),
url(r'^admin/', include(admin.site.urls)),
url(r'^add/', users.views.location_check_add, name = 'add'),
)
您需要重定向,而不仅仅是调用视图。
if good_location(user_lat,user_lon):
return redirect('add')
好的!经过大量文档搜索和谷歌搜索后,我发现了 Django 的会话功能。此处的文档:
最后我的代码看起来像:
def add(request):
if request.session.get('at_work', False):
if request.method == 'POST':
form = StudentModelForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
form = StudentModelForm()
context_data = {'form': form}
return render(request, 'add.html', context_data)
else:
return redirect(location_check_add)
def location_check_add(request):
if request.method == 'POST' and 'lat' in request.POST:
user_lat = request.POST.get('lat')
user_lon = request.POST.get('lon')
if good_location(user_lat,user_lon):
request.session['at_work'] = True
return redirect(add)
else:
return render(request, 'location.html')
return render (request, 'checking.html')
基本上我只是传递了会话变量 "at_work" 以确保在 add() 视图中呈现页面之前位置是正确的。然后我能够使用常规重定向功能,因为我可以在 urls.py 中将 url 指向 add() 而无需人们绕过位置检查。