Django开发之登陆和登出

Posted 三体

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django开发之登陆和登出相关的知识,希望对你有一定的参考价值。

使用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

 

以上是关于Django开发之登陆和登出的主要内容,如果未能解决你的问题,请参考以下文章

Django 编写博客网站的用户管理部分(采用自有的 django.contrib.auth) 2. 登陆登出和用户信息管理

CAS单点登出了还能获取到用户登陆信息

react 中文文档案例四 (登陆登出按钮)

Django 之 Cookie的使用(判断是否已登陆)

Django开发social-auth-app-django 第三方登陆-魏泯

django之账号密码验证登陆