0

我是新手Django,需要一些有关login表格的帮助。这就是我所做的。

我的模板有index.html

<form class="form-signin" action="/login" method="post">
    {% csrf_token %}
    <h2 class="form-signin-heading">Please sign in</h2>
    <input type="text" class="input-block-level" placeholder="Email address" name="email">
    <input type="password" class="input-block-level" placeholder="Password" name="password">
    <label class="checkbox">
        <input type="checkbox" value="remember-me"> Remember me
    </label>
    <button class="btn btn-large btn-primary" type="submit">Sign in</button>
</form>

& home.htmlas {{user.username}}(仅此行用于测试)

我的views.py有:

def login(request):
    s_email = request.POST["email"]
    s_password = request.POST["password"]

    global user
    user = authenticate(email=s_email, password=s_password)
    if user is not None:
        if user.is_active:
            login(request, user)
            return render_to_response('home.html', dict(user=user), RequestContext(request))
        else:
            return render_to_response('index.html', {}, RequestContext(request))

我的urls.py有:

url(r'^/login/$', 'website.views.login')

尽管如此,我还是无法登录。404每当我单击 HTML 按钮"Sign In"到.

需要帮忙。

4

1 回答 1

1

鉴于评论中概述的用例,这是我将采取的方法。每个表单将包含一个隐藏字段,其name属性为action

from django.contrib.auth import authenticate, login
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render

def home(request):
    login_form = LoginForm(request.POST or None)
    registration_form = RegistrationForm(request.POST or None)

    if request.method == 'POST':
        action = request.POST.get('action')
        if action == 'login':
            if login_form.is_valid():
                user = authenticate(email=login_form.cleaned_data.get('email'),
                    password=login_form.cleaned_data.get('password'))
                login(request, user)
                return HttpResponseRedirect(reverse('some_url'))
        else:
            if registration_form.is_valid():
                registration_form.save()
                # do whatever else
    return render('some-template.html', {'login_form': login_form,
        'registration_form': registration_form})
于 2013-05-22T13:38:48.007 回答