自己写登陆验证及借用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前端最常见的功能之一,也属于前端开发的基本功.自己完成一个表单验证的开发,也有助于加深对字符串处理和正则表达式的理解. 基本的表单验证包括如:字母验证.数字验证.字母和数字验证.汉字验 ...
随机推荐
- Splay做题笔记
模板 题目描述: 辣鸡ljh NOI之后就退役了,然后就滚去学文化课了. 他每天都被katarina大神虐,仗着自己学过一些姿势就给katarina大神出了一道题. 有一棵 \(n\) 个节点的以 1 ...
- Vue-cli UI界面中插件和依赖的区别是什么?
Vue-cli UI界面中插件和依赖的区别是什么? 先上结论: 插件在命令行中通过 vue add 安装 如: vue add eslint 这个命令将 @vue/eslint 解析为完整的包名 @v ...
- jpa写原生sql-EntityManager
废话不多说 package com.meeno.trainsys.meeting.service; import com.google.common.collect.Lists; import com ...
- mybatis学习日志二
一.动态sql语句 if语句 if+where语句 if+set语句 choose(when,otherwise)语句 trim语句 sql片段 foreach语句 总结 bean部分的User类代码 ...
- Spring中常用重要的接口
Spring (ApplicationContext 初始化Bean的方法 refresh()) public void refresh() throws BeansException, Illega ...
- Go测试--main测试
目录 简介 示例 简介 子测试的一个方便之处在于可以让多个测试共享Setup和Tear-down.但这种程度的共享有时并不满足需求,有时希望在整个测试程序做一些全局的setup和Tear-down,这 ...
- TFRecord读写简介+Demo 基于Ubuntu18.04+Tensorflow1.12 无WARNING
简介 TFRecord是TensorFlow官方推荐使用的数据格式化存储工具. 它规范了数据的读写方式. 只要生成一次TFRecord,之后的数据读取和加工处理的效率都会得到提高. 将图片转换成TFR ...
- Shell中的运算
1.运算方式及运算符号 2.SHELL 中常用的运算命令 3.相关操作演示 1.用脚本写一个10秒倒计时 脚本的执行: 2.编写脚本,1分10秒的倒计时 执行脚本: 3.编写脚本,制作一个计算器 脚本 ...
- GUI容器之布局管理器
布局管理器 布局管理器:frame.setLayout(); 默认值为new flowLayout() 流式布局 frame.setLayout(new FlowLayout(FlowLayout.R ...
- java agent简介
java agent简介 主要就是两种,一种的方法是premain,一种是agentmain.这两种的区别是: premain是在jvm启动的时候类加载到虚拟机之前执行的 agentmain是可以在j ...