我正在使用Python 2.7
, Django 1.3.1
。
我正在尝试实现可以从任意页面调用并重定向到同一页面而无需任何代码重复的登录功能。我目前的方式是我有两个视图:一个用于主页,一个用于登录。我希望能够从 sign_in 视图重定向到带有绑定表单的主视图。主要问题是当用户输入不正确的数据(例如错误的密码)时,我想重定向到同一页面但想发送原始表单的上下文。我希望能够在不显式调用视图函数的情况下执行此操作,因为我希望能够从任意页面执行此操作。我该怎么做呢?我当前的尝试总是返回一个未绑定的表单,以防数据无效。
我当前的代码是(简化的):
urls.py
urlpatterns = patterns('myapp.views',
url(r'^$', 'index', name='home'),
url(r'sign_in/^$', 'signin', name='sign_in')
)
views.py
def index(request, loginForm=LoginForm)
extra_context = dict()
extra_context['login_form'] = loginForm
return direct_to_template(request, 'home.html', extra_context=extra_context)
def signin(request)
if request.method == 'POST':
login_form = LoginForm(request.POST, request.FILES)
if login_form.is_valid():
# login user
redirect_view = reverse('home')
return redirect(redirect_view, kwargs={'loginForm': login_form})
# I also tried:
# return redirect(redirect_view, loginForm=login_form)
# what works is:
# return index(request, loginForm = login_form)
home.html
<form action="{% url sign_in %}" method="post">
{{ form.as_p }}
</form>