使用django自带的验证模块
1、首先使用python manage.py startapp models为当前项目添加一个应用。
2、在setting.py中INSTALLED_APPS后面添加‘models‘,
INSTALLED_APPS = [ ‘django.contrib.admin‘, ‘django.contrib.auth‘, ‘django.contrib.contenttypes‘, ‘django.contrib.sessions‘, ‘django.contrib.messages‘, ‘django.contrib.staticfiles‘, ‘models‘, ]
3、配置并同步数据库
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘, #‘ENGINE‘: ‘django.db.backends.postgresql_psycopg2‘, ‘NAME‘: ‘gangdou‘, ‘USER‘: ‘root‘, ‘PASSWORD‘: ‘1‘, ‘HOST‘:‘ip‘, ‘PORT‘:‘3306‘, } }
同步数据库
python manage.py migrate
4、使用python manage.py createsuperuser --username=gangdou [email protected]创建一个超级管理员用户,记得密码必须大于8位
5、在urls.py中添加
from . import views
urlpatterns = [ url(r‘^admin/‘, admin.site.urls), url(r‘^home/$‘,views.home),#通过url跳转到登陆页面 url(r‘^index/‘,views.index),#通过url跳转到首页 url(r‘^login_view$‘,views.login_view),#填写完信息后提交登陆验证 url(r‘^logout_view$‘,views.logout_view),#退出登陆 ]
6、在views.py中添加
# -*- coding:utf-8 -*- from django.shortcuts import render from django.contrib.auth.decorators import login_required from django.contrib.auth import authenticate from django.contrib.auth import login,logout from django.http import HttpResponseRedirect from django.shortcuts import render_to_response def home(request): return render(request,"login.html") @login_required#用户登陆校验,必须登陆之后才能访问,如果没有登陆,就自动跳转到setting.py里面LOGIN_URL=‘/home‘设定的地址 def index(request): return render(request,"index.html")#同一个页面的跳转可以使用render def login_view(request): context = {} if request.method == ‘POST‘:#此处必须校验是post方法提交过来的请求 username = request.POST.get("username") password = request.POST.get("password") user = authenticate(username=username, password=password) if user is not None: if user.is_active: login(request, user)#这个时候Django认证模块会在数据库django_session表中添加一条session数据 request.session[‘username‘]=username return HttpResponseRedirect("/index")#这里不使用render的方式是由于render方式跳转后,浏览器地址栏的url不会随之变化,可能影响后面的url跳转 else: context["msg"] = "用户已被锁定,请联系管理员" return render_to_response("login.html",context) else: context["msg"] = "用户名或密码错误" return render_to_response("login.html",context) @login_required def logout_view(request): logout(request)#此时Django认证模块会将数据库的session数据给清空 return HttpResponseRedirect("/home")
7、login.html
<form role="form" action="/login_view" method="post"><!--此处method中的url一定要前面一定要加/,后面/是否要加取决于urls.py的配置--> <input name="username" type="text" autofocus> <input name="password" type="password" value=""> <div class="form-group">{{ msg }}</div> <button>登陆</button> </form>
8、logout
<a href="/logout_view">退出登录</a>
9、清理session数据,自此django的认证登陆登出功能完成,但是此处有个问题,就是当用户在手动关闭浏览器的时候,session数据不会自动失效,数据库的session数据也不会自动删除,所以需要在setting.py中加一些配置,然后写一个定时清理该表过期session数据的脚本
SESSION_COOKIE_AGE = 60*30#设置session过期时间为30分钟 SESSION_EXPIRE_AT_BROWSER_CLOSE = True#当浏览器被关闭的时候将session失效,但是不能删除数据库的session数据 SESSION_SAVE_EVERY_REQUEST = True#每次请求都要保存一下session