django项目前准备:二、用户登录验证,用户登录、登出方法

1.前提:要使用Django的用户认证系统,首先需要确定一下配置是OK的。
这里使用的是Django 1.11,相关配置在创建好项目的时候已经自动配合好了。
文件:myproject/settings.py
## app
INSTALLED_APPS = [
... ...
'django.contrib.auth',
'django.contrib.sessions',
... ...
]
## middleware
MIDDLEWARE = [
    ... ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    ... ...
]

 


2.url 配置:配置登录和登出
from django.contrib.auth.views import login, logout_then_login
from . import views
# 登录
# url(r'^accounts/login/$',  login),
# 或者登陆的时候指定页面
url(r'^accounts/login/$', login, , {'template_name': 'login.html'})

 # 退出登录,并跳转到登录页面
url(r'^accounts/logout/$', logout_then_login),

# index 和 detail 页面作为测试
url(r'^$', views.index, name='index')
url(r'^detail/$', views.detail, name='detail')
默认情况下 login 会去找registration/login.html 页面,我们可以通过指定template_name 来指向自己希望指向的登录页面


3.views.py 编写视图函数

from django.shortcuts import render
from django.contrib.auth.models import User
from django.contrib import auth
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect

# Create your views here.
# login_required装饰器,用户必须登陆,才可以调用被装饰的函数
@login_required
def index(request):
        return render(request, 'index.html')

@login_required
def detail(request):
        return render(request, 'detail.html')

def login(request):
        if request.method == 'GET':
                return render(request, 'login.html')
        else:
                username = request.POST.get('username')
                password = request.POST.get('password')
                print(username)
                print(password)
                # 验证用户是否存在,与数据库中的用户名、密码进行验证,如果验证通过,返回user对象

user = auth.authenticate(username=username,password=password)
print(user)
                # 验证用户是否激活
                if user is not None and user.is_active:
                        # 用户登陆
                        auth.login(request, user)
                        return render(request, 'index.html')
                else:
                        print('user is invalid')
                        return render(request, 'login.html')


@login_required
def logout(request):
        auth.logout(request)
        return HttpResponseRedirect("/accounts/login")

 



posted on 2018-05-24 20:27  myworldworld  阅读(393)  评论(0)    收藏  举报

导航