Django 自定义登录页面

2024-05-18 19:14:00 发布

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

我有一个自定义的Django登录页面。当用户名或密码字段为空时,我想引发异常。我该怎么做?

My view.py登录方法:

def user_login(request):
    context = RequestContext(request)
    if request.method == 'POST':
        # Gather the username and password provided by the user.
        # This information is obtained from the login form.
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        print("auth",str(authenticate(username=username, password=password)))

        if user:
            # Is the account active? It could have been disabled.
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect('/')
        else:
            return HttpResponse("xxx.")
    else:
        # Bad login details were provided. So we can't log the user in.
        print ("Invalid login details: {0}, {1}".format(username, password))
        return HttpResponse("Invalid login details supplied.")
    else:
        return render_to_response('user/profile.html', {}, context)

我试过但没用: 这是forms.py

def clean_username(self):
    username = self.cleaned_data.get('username')
    if not username:
        raise forms.ValidationError('username does not exist.')

Tags: thepyreturnifrequestdefcontextusername
2条回答

您可以使用Django提供的login视图。因此login.html应该类似于这个示例。

<form class="login" method="POST" action="/login/">

  {% csrf_token %}

  {{form.as_p}}

  <li><input type="submit" class="logBut" value="Log in"/></li>
  </form>

记住url.py!

url(r'^login/$','django.contrib.auth.views.login', {'template_name': '/login.html'}),

正确的方法是使用forms,而不是直接从request.POST获取变量。然后Django将验证表单数据,并在模板中呈现表单时显示错误。如果表单字段是必需的,那么Django将在该字段为空时自动显示错误,您甚至不需要为此编写clean_<field_name>方法。

Django已经有一个built in login view。最简单的方法是使用这个,而不是自己写。如果您仍然想编写自己的视图,那么您仍然会发现查看Django是如何做到的非常有用。

相关问题 更多 >

    热门问题