自己写登陆验证及借用auth的is_authenticated验证是否登陆
一、
自己写登陆需要注册,一个session的处理,还有一个session的删除
#自定义一个闭包装饰器,来验证
def checkLogin(func):
def wrapper(request, *args, **kwargs):
is_login = request.session.get('IS_LOGIN', False)
if is_login:
return func(request, *args, **kwargs)
else:
# del request.session['IS_LOGIN']
return redirect('/Index/')
return wrapper class Index(View):
def get(self,request):
is_login=request.session.get('IS_LOGIN')
if is_login:
del request.session['IS_LOGIN']
return render(request, 'index.html')
else:
return render(request,'index.html') class Login(View): def post(self,request):
username=request.POST.get('username')
user_list = Sjuser.objects.filter(name=username).first()
request.session['IS_LOGIN'] = True
request.session['uname']=user_list.name
contex={
'user_name':user_list.name
}
return render(request,'index.html', context=contex)
class Logout(View):
def get(self,request):
# logout(request)
# request.session.flush()
del request.session['IS_LOGIN']
return redirect('/Index/')
注意:使用自己定义验证,必须注册删除session 要使用del request.session,不可以使用logout(request),因为此方法是专用于auth 中的用户,否则会出现匿名用户
HTML中验证可以使用
{% if request.session.IS_LOGIN %}
二、(借用有两种方式)
1.借用django中已经有的用户类:AbstractBaseUser
在models.py中如下定义model类
from django.contrib.auth.base_user import AbstractBaseUser
class kkuser(AbstractBaseUser):
name=models.CharField(max_length=30,verbose_name=u'客户')
total=models.IntegerField(verbose_name=u'投注')
class Meta:
verbose_name=u'抽奖客户'
verbose_name_plural=verbose_name
USERNAME_FIELD = 'name' 那么在views.py中,就可以直接使用login登陆,即可实现登陆验证
from django.contrib.auth import login
from .models import kkuser class Login(View):
def post(self,request):
username=request.POST.get('username')
user_list=kkuser.objects.filter(name=username).first()
if user_list:
login(request, user_list)
contex={
'user':user_list.name
}
return render(request,'index.html',contex)
此上面方法,虽然可以直接可以借用,但是在admin后中会出现 password,last_login ,可以使用去除:exclude = ["password", "last_login"] 即可
class kkuseradmin(object):
list_display=['name','total']
exclude = ["password", "last_login"]
xadmin.site.register(kkuser,kkuseradmin)
在HTML中即可使用以下方式验证
{% if request.user.is_authenticated %}{%end if %}
2.借用 @property ,可以直接给所定义的model类加上属性,这个是django中已经有定义好的,可以直接拿来用
from django.utils.deprecation import CallableTrue class kkuser(AbstractBaseUser):
name=models.CharField(max_length=30,verbose_name=u'客户')
total=models.IntegerField(verbose_name=u'投注')
class Meta:
verbose_name=u'抽奖客户'
verbose_name_plural=verbose_name
@property
def is_authenticated(self):
return CallableTrue
在HTML中即可使用此方式来验证
{% if request.user.is_authenticated %}{%end if %}
自己写登陆验证及借用auth的is_authenticated验证是否登陆的更多相关文章
- springboot成神之——basic auth和JWT验证结合
本文介绍basic auth和JWT验证结合 目录结构 依赖 config配置文件WebSecurityConfig filter过滤器JWTLoginFilter filter过滤器JWTAuthe ...
- 从零写一个Asp.net core手脚架(模型验证)
一个asp.net core项目,一定包含了各种的实体,在RESTful api里面,有很多的参数传递,不建立实体则大量的参数需要自定验证正确性,并且Action上面会写的密密麻麻的参数 在asp.n ...
- 项目演化系列--验证体系(基于angular的前端验证)
前言 之前分享的<web项目演化--验证体系>中提到基于angular的验证,但是为了以防读者迷惑,能够好的理解验证体系,所以没有详细介绍. 今天特地补写一篇关于构建angular的验证. ...
- 让 ASP.NET JS验证和服务端的 双验证 更简单
只用JavaScript验证安全不安全谁都知道,答案是不安全,非常的不安全.因为在客户端进行的验证相当于“让用户自己验证自己”,很明显是不靠谱的.你不能避免一些恶意用户人为的修改自己的表单进行欺骗,也 ...
- windows身份验证模式和SQL server身份验证模式 有什么不同
两个验证方式是有明显不同的. 主要集中在信任连接和非信任连接. windows 身份验证相对于混合模式更加安全,使用本连接模式时候,sql不判断sa密码,而仅根据用户的windows权限来进行身份验证 ...
- ebay如何确定同一电脑登陆了多个账号,以及同一账号登陆过多台电脑
转自hilton 的BLOG http://jimqu.blog.51cto.com/105370/654691 一切要从ebay的买家保护说起 ebay作为一个电子商务平台,之所以可以汇聚如此众多的 ...
- django 登陆增加除了用户名之外的手机和邮箱登陆
在setting内增加 # Application definition AUTHENTICATION_BACKENDS = ( 'users.views.CustomBackend', ) 在vie ...
- 仿联想商城laravel实战---4、验证(lavarel的表单验证如何使用)
仿联想商城laravel实战---4.验证(lavarel的表单验证如何使用) 一.总结 一句话总结: 验证规则和验证信息的数组:在控制器的方法中 1.注册页面中的用户名正确(比如是否重名,字段长度是 ...
- 原生js制作表单验证,基本的表单验证方法
表单验证是web前端最常见的功能之一,也属于前端开发的基本功.自己完成一个表单验证的开发,也有助于加深对字符串处理和正则表达式的理解. 基本的表单验证包括如:字母验证.数字验证.字母和数字验证.汉字验 ...
随机推荐
- 备战秋招之十大排序——O(n)级排序算法
时间复杂度O(n)级排序算法 九.计数排序 前文说到,19591959 年 77 月,希尔排序通过交换非相邻元素,打破了 O(n^2)的魔咒,使得排序算法的时间复杂度降到了 O(nlog n) 级,此 ...
- CPU 进程 线程 关系与区别
- 十六:使用JDBC对数据库进行CRUD
一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...
- C语言之----面向对象的方法实现链表的操作
1 /* 2 * 详细运行过程: 本程序实现的是对链表的简单的操作,即链表的增 删 改 查 销毁 初始化 3 * 运用面向对象的思想,实现一个类op,op中包括了所有的链表操作方法 4 * 其他的程序 ...
- 字节跳动基于Apache Hudi构建EB级数据湖实践
来自字节跳动的管梓越同学一篇关于Apache Hudi在字节跳动推荐系统中EB级数据量实践的分享. 接下来将分为场景需求.设计选型.功能支持.性能调优.未来展望五部分介绍Hudi在字节跳动推荐系统中的 ...
- 刷题-力扣-113. 路径总和 II
113. 路径总和 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/path-sum-ii 著作权归领扣网络所有.商业转载请联系 ...
- 详解 Interpolator动画插值器
Interpolator 被用来修饰动画效果,定义动画的变化率.在Android源码中对应的接口类为TimeInterpolator,通过输入均匀变化的0~1之间的值,可以得到匀速.正加速.负加速.无 ...
- RabbitMq死信队列(接盘侠)
队列创建之后,后期对其修改或者参数添加会报错.需要把队列重新删除,重新创建线上环境不能把队列删除,优雅安全的方式是重新建一个队列,把死信队列相关的队列进行绑定 在有过期时间的队列中设定最大接收能力5条 ...
- nacos在nginx下集群以及数据库问题
持久化mysql时指定数据库编辑application.properties spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql ...
- 回调与Promise
Promise 对象就是用于表示一个异步操作的最终状态(成功或失败).它的流程就是在什么状态下需要执行什么样的操作. resolve简单理解就是一步操作执行成功后的回调函数 then是Promise对 ...