python's docs

1.0 如何实现login和logout


1. login功能

前端页面内容

<form  action="/login/" method="POST">
 \{\% csrf_token \%\}
  <input name="username" id="UserName" type="text" class="form-control" placeholder="UserName">
  <input name="password" id="PassWord" type="password" class="form-control" placeholder="PassWord">
  <button type="submit" class="btn btn-primary" >Login In</button>
</form>
  • csrf_token是django的一个密码认证的中间件
  • form的methodPOST,因为要post数据到django,由django相应的views处理
  • form的action指定的内容就是post的目标url
  • form包含name为"username"和"password"两个text和一个button
  • 忽略\,只是为了转义

views功能编写

from django.contrib.auth import authenticate, login, logout

@csrf_protect
def login_user(request):
    logout(request)
    username = password = ''
    if request.POST:
        username = request.POST['username']
        password = request.POST['password']

        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect('/home/')
    return render_to_response('devops/login.html', context_instance=RequestContext(request))
  • request.POST['']中的usernamepassword对应的就是前端页面的text的name
  • 使用authenticate先认证,有效后才login

logout功能

前端页面内容

<form class="navbar-form navbar-right inline" method='POST' action="/logout/">
  \{\% csrf_token \%\}
  <button type="submit" class="btn btn-danger">Logout</button>
</form>
  • 和login功能相似,但此处只需要一个button
  • 忽略\,只是为了转义

views内容

@login_required
def logout_user(request):
    logout(request)
    return redirect('login_user')
  • login_required意思是只有登录的用户才可以访问此功能
  • 直接执行logout(request),django会自动去找request中的用户信息,然后登出它

PS:
若想获取登录用户名称,可直接使用request.user.username