一、

自己写登陆需要注册,一个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验证是否登陆的更多相关文章

  1. springboot成神之——basic auth和JWT验证结合

    本文介绍basic auth和JWT验证结合 目录结构 依赖 config配置文件WebSecurityConfig filter过滤器JWTLoginFilter filter过滤器JWTAuthe ...

  2. 从零写一个Asp.net core手脚架(模型验证)

    一个asp.net core项目,一定包含了各种的实体,在RESTful api里面,有很多的参数传递,不建立实体则大量的参数需要自定验证正确性,并且Action上面会写的密密麻麻的参数 在asp.n ...

  3. 项目演化系列--验证体系(基于angular的前端验证)

    前言 之前分享的<web项目演化--验证体系>中提到基于angular的验证,但是为了以防读者迷惑,能够好的理解验证体系,所以没有详细介绍. 今天特地补写一篇关于构建angular的验证. ...

  4. 让 ASP.NET JS验证和服务端的 双验证 更简单

    只用JavaScript验证安全不安全谁都知道,答案是不安全,非常的不安全.因为在客户端进行的验证相当于“让用户自己验证自己”,很明显是不靠谱的.你不能避免一些恶意用户人为的修改自己的表单进行欺骗,也 ...

  5. windows身份验证模式和SQL server身份验证模式 有什么不同

    两个验证方式是有明显不同的. 主要集中在信任连接和非信任连接. windows 身份验证相对于混合模式更加安全,使用本连接模式时候,sql不判断sa密码,而仅根据用户的windows权限来进行身份验证 ...

  6. ebay如何确定同一电脑登陆了多个账号,以及同一账号登陆过多台电脑

    转自hilton 的BLOG http://jimqu.blog.51cto.com/105370/654691 一切要从ebay的买家保护说起 ebay作为一个电子商务平台,之所以可以汇聚如此众多的 ...

  7. django 登陆增加除了用户名之外的手机和邮箱登陆

    在setting内增加 # Application definition AUTHENTICATION_BACKENDS = ( 'users.views.CustomBackend', ) 在vie ...

  8. 仿联想商城laravel实战---4、验证(lavarel的表单验证如何使用)

    仿联想商城laravel实战---4.验证(lavarel的表单验证如何使用) 一.总结 一句话总结: 验证规则和验证信息的数组:在控制器的方法中 1.注册页面中的用户名正确(比如是否重名,字段长度是 ...

  9. 原生js制作表单验证,基本的表单验证方法

    表单验证是web前端最常见的功能之一,也属于前端开发的基本功.自己完成一个表单验证的开发,也有助于加深对字符串处理和正则表达式的理解. 基本的表单验证包括如:字母验证.数字验证.字母和数字验证.汉字验 ...

随机推荐

  1. 备战秋招之十大排序——O(n)级排序算法

    时间复杂度O(n)级排序算法 九.计数排序 前文说到,19591959 年 77 月,希尔排序通过交换非相邻元素,打破了 O(n^2)的魔咒,使得排序算法的时间复杂度降到了 O(nlog n) 级,此 ...

  2. CPU 进程 线程 关系与区别

  3. 十六:使用JDBC对数据库进行CRUD

    一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...

  4. C语言之----面向对象的方法实现链表的操作

    1 /* 2 * 详细运行过程: 本程序实现的是对链表的简单的操作,即链表的增 删 改 查 销毁 初始化 3 * 运用面向对象的思想,实现一个类op,op中包括了所有的链表操作方法 4 * 其他的程序 ...

  5. 字节跳动基于Apache Hudi构建EB级数据湖实践

    来自字节跳动的管梓越同学一篇关于Apache Hudi在字节跳动推荐系统中EB级数据量实践的分享. 接下来将分为场景需求.设计选型.功能支持.性能调优.未来展望五部分介绍Hudi在字节跳动推荐系统中的 ...

  6. 刷题-力扣-113. 路径总和 II

    113. 路径总和 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/path-sum-ii 著作权归领扣网络所有.商业转载请联系 ...

  7. 详解 Interpolator动画插值器

    Interpolator 被用来修饰动画效果,定义动画的变化率.在Android源码中对应的接口类为TimeInterpolator,通过输入均匀变化的0~1之间的值,可以得到匀速.正加速.负加速.无 ...

  8. RabbitMq死信队列(接盘侠)

    队列创建之后,后期对其修改或者参数添加会报错.需要把队列重新删除,重新创建线上环境不能把队列删除,优雅安全的方式是重新建一个队列,把死信队列相关的队列进行绑定 在有过期时间的队列中设定最大接收能力5条 ...

  9. nacos在nginx下集群以及数据库问题

    持久化mysql时指定数据库编辑application.properties spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql ...

  10. 回调与Promise

    Promise 对象就是用于表示一个异步操作的最终状态(成功或失败).它的流程就是在什么状态下需要执行什么样的操作. resolve简单理解就是一步操作执行成功后的回调函数 then是Promise对 ...