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) 收藏 举报