使用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': '',
'HOST':'ip',
'PORT':'',
}
}

同步数据库

python manage.py migrate

4、使用python manage.py createsuperuser --username=gangdou --email=gangdou@gmail.com创建一个超级管理员用户,记得密码必须大于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开发之登陆和登出的更多相关文章

  1. Django项目: 4.用户登录登出功能

    用户登录登出功能 一.功能需求分析 1. 登录退出功能分析 流程图 功能 登录页面 登录功能 退出功能 二.登录页面 1. 接口设计 接口说明 类目 说明 请求方法 GET url定义 /user/l ...

  2. 在多点环境下使用cas实现单点登陆及登出

    CAS 介绍 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目.CAS 具有以下特 ...

  3. Flask session到期时间设置 用户登录与登出

    flask版本 1.1.1 最近学习Flask开发,看官方文档产生疑问,就是session有效期的问题,默认貌似是没有有效期的,只有关闭浏览器session才会失效,其实控制session的有效期非常 ...

  4. cas系列-cas登出(四)

    跟登陆一样,登出操作也很重要.由于是多应用间操作,状态保持也是一个要点,根据登出的影响范围,可以将登出操作分为两类: 单应用登出 单点登出(多应用登出) 顾名思义,单应用登出即登出只影响被操作的应用会 ...

  5. [Django]登陆界面以及用户登入登出权限

    前言:简单的登陆界面展现,以及用户登陆登出,最后用户权限的问题 正文: 首先需要在settings.py设置ROOT_URLCONF,默认值为: ROOT_URLCONF  = 'www.urls'# ...

  6. Android网络开发实例(基于抓包实现的网络模拟登录,登出和强制登出)

    学习Android有几个月了,最近喜欢上了网络编程,于是想通过Android写一些一个小程序用于连接外网.在这里非常感谢雪夜圣诞的支持,非常感谢,给我打开新的一扇门. 1.声明,本程序只能用于西南大学 ...

  7. Django 是如何实现用户登录和登出机制的(默认版本-数据库版本)

    Django session 字典,保存到数据库的时候是要先序列化的(session.encode方法), 读取的时候反序列化(session.decode),这样比较安全. 一 settings.p ...

  8. 使用FreeHttp强制登出微信公众号登陆状态(实现~原理)

    概述 我们使用的部分网站设计成一旦登录即不允许用户手动退出,现实场景中是没有问题的 但如果是在测试或调试过程中就会有强制登出的需求 如果当前使用的是PC浏览器,您或许可以通过调试模式清除保持登录信息的 ...

  9. loadrunner飞机订票系统从登陆订票退票登出的脚本实现代码调试通过

    在LR自带的飞机订票系统中,完整模拟一个用户从登陆->订票->退票->登出这样一个业务流程,分解每个事务为一个Action: 进入首页->登陆->进入订票页面->选 ...

随机推荐

  1. 【LG2154】[SDOI2009]虔诚的墓主人

    [LG2154][SDOI2009]虔诚的墓主人 题面 洛谷 题解 如果您没有看懂题,请反复阅读题面及样例 可以发现,对于某一个点,它的答案就是上下左右几个组合数乘起来. 这样直接做复杂度显然爆炸,考 ...

  2. 洛谷P4735题解

    若想要深入学习可持久化0-1Trie树,传送门. Description: 给定数列 \(\{a_n\}\) ,支持两种操作: 在数列尾添加一个数 \(x\) ,数列长度变成 \(n+1\) ; 给定 ...

  3. 大厂HR面试必备ES6中的深入浅出面试题知识点

    ESMAScript6简介,ES6是JavaScript语言的下一代标准,目的是让JavaScript语言可以写复杂的大型应用程序,成为企业级语言.那么ECMAScript和JavaScript的关系 ...

  4. go语言Mac下编译安装语言包

    这两天公司成立了go语言学习兴趣小组,慕名参与了学习.目前对于go是0基础,只知道它可以做高并发.效率快.编译简单.母语是C. go的安装有多种形式,编译安装是比较慢的一个,今天我就记录一下学习go编 ...

  5. Node.js之判断字符串中是否包含某个字符串

    server.txt内容如下: 阿里云服务器 关于应用场景,就不多说了,字符串是不论是后端开发还是前端开发等,都是要经常打交道了. test.js(node.js代码,只要被本地装了node.js环境 ...

  6. 冰多多团队-第三次Scrum会议

    冰多多团队-第三次Scrum会议 会议基本情况 会议时间:4月9日 21:30 - 21:45 会议地点:新主楼F座2楼沙发休息处 工作情况 团队成员 已完成任务 待完成任务 zpj 接入Action ...

  7. Java编程思想之七复用类

    复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须做更多的事情. 使用类而不破坏程序代码: 在新类中产生现有对象.由于新的类是由现有 ...

  8. 修改jar包中的文件

    1.用WinRAR压缩软件打开jar包 2.将修改过的文件直接拖拽并覆盖被替换的文件即可

  9. 关于“javax.servlet.include.request_uri”属性值 include 请求 RequestDispatcher.include

    在springMVC的DispatcherServlet类的doService方法中有如下代码: 1 2 3 4 5 6 7 8 9 10 if (WebUtils.isIncludeRequest( ...

  10. python万能消费框架,新增7种中间件(或操作mq的包)和三种并发模式。

    新增的中间件和并发模式见注释. 消息队列中间件方面celery支持的,都要支持.并发模式,celery支持的都要支持. 从无限重复相似代码抽取框架,做成万能复用,是生产力的保障. 使用模板模式使加新中 ...