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': '',
'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开发之登陆和登出的更多相关文章
- Django项目: 4.用户登录登出功能
用户登录登出功能 一.功能需求分析 1. 登录退出功能分析 流程图 功能 登录页面 登录功能 退出功能 二.登录页面 1. 接口设计 接口说明 类目 说明 请求方法 GET url定义 /user/l ...
- 在多点环境下使用cas实现单点登陆及登出
CAS 介绍 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目.CAS 具有以下特 ...
- Flask session到期时间设置 用户登录与登出
flask版本 1.1.1 最近学习Flask开发,看官方文档产生疑问,就是session有效期的问题,默认貌似是没有有效期的,只有关闭浏览器session才会失效,其实控制session的有效期非常 ...
- cas系列-cas登出(四)
跟登陆一样,登出操作也很重要.由于是多应用间操作,状态保持也是一个要点,根据登出的影响范围,可以将登出操作分为两类: 单应用登出 单点登出(多应用登出) 顾名思义,单应用登出即登出只影响被操作的应用会 ...
- [Django]登陆界面以及用户登入登出权限
前言:简单的登陆界面展现,以及用户登陆登出,最后用户权限的问题 正文: 首先需要在settings.py设置ROOT_URLCONF,默认值为: ROOT_URLCONF = 'www.urls'# ...
- Android网络开发实例(基于抓包实现的网络模拟登录,登出和强制登出)
学习Android有几个月了,最近喜欢上了网络编程,于是想通过Android写一些一个小程序用于连接外网.在这里非常感谢雪夜圣诞的支持,非常感谢,给我打开新的一扇门. 1.声明,本程序只能用于西南大学 ...
- Django 是如何实现用户登录和登出机制的(默认版本-数据库版本)
Django session 字典,保存到数据库的时候是要先序列化的(session.encode方法), 读取的时候反序列化(session.decode),这样比较安全. 一 settings.p ...
- 使用FreeHttp强制登出微信公众号登陆状态(实现~原理)
概述 我们使用的部分网站设计成一旦登录即不允许用户手动退出,现实场景中是没有问题的 但如果是在测试或调试过程中就会有强制登出的需求 如果当前使用的是PC浏览器,您或许可以通过调试模式清除保持登录信息的 ...
- loadrunner飞机订票系统从登陆订票退票登出的脚本实现代码调试通过
在LR自带的飞机订票系统中,完整模拟一个用户从登陆->订票->退票->登出这样一个业务流程,分解每个事务为一个Action: 进入首页->登陆->进入订票页面->选 ...
随机推荐
- Javascript总结(全)
说明 个人感觉总结得很好忍不住要分享,转载自github地址,作者博客原文发现打不开,于是复制粘贴到此处,如有侵权,请联系本人删除. Type class TypeFn { isString (o) ...
- spring(一)IOC & AOP
参考文档: spring详解:http://www.cnblogs.com/ysocean/p/7466191.html(可以说非常详细了) aop源码详解:https://www.cnblogs.c ...
- Java-JUC(十五):synchronized执行流程分析
一.锁对象及 synchronized 的使用 synchronized 通过互斥锁(Mutex Lock)来实现,同一时刻,只有获得锁的线程才可以执行锁内的代码. 锁对象分为两种: 实例对象(一个类 ...
- Self-Supervised Representation Learning
Self-Supervised Representation Learning 2019-11-11 21:12:14 This blog is copied from: https://lilia ...
- python测试mysql数据库性能(二)
一,普通写入数据库 二,批量写入数据库 三,普通写入数据库添加事务 config = { 'host': 'localhost', 'port': 3306, 'database': 'test', ...
- MySQL:实现cumsum(累加)的功能
需求:为实现cumsum累计求和的功能. 一张视图. SELECT 日期, 净利润 FROM daily_pnl_view; 现在希望得到,每天累计的利润是多少. SET @csum := 0;SEL ...
- C# .net 高清压缩图片 合并图片方法
/// <summary> /// 合并宽度一样的图片 /// </summary> /// <param name="imgUrls">多张图 ...
- mysql删除唯一索引
在项目中用spring data jpa指定了一个唯一索引: @Entity @Table(name = "t_product") @Getter @Setter @AllArgs ...
- 【Layui】侧边菜单导航禁用折叠、去除箭头样式
官方提供的样式代码: <ul class="layui-nav layui-nav-tree" lay-filter="test"> <!-- ...
- 安装 create-react-app@latest 失败,错误代码:243
在创建react项目,执行以下命令的时候 npx create-react-app my-app 报错如下: 解决方案: 全局安装即可 npm install -g create-react-app