一、

自己写登陆需要注册,一个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. C#给线程传递数据

    目录 0. 前情说明 1. ParameterizedThreadStart类型的委托 2. 使用自定义类 3. 使用Lambda表达式 4. 参考以及文中源代码下载 shanzm-2021年8月24 ...

  2. NOIP 模拟 $17\; \rm weight$

    题解 \(by\;zj\varphi\) 一道树剖的题 先对于原图求出一棵最小生成树,求出来的这棵树中的边定为树边,其它边叫非树边 那么对于一条非树边,它要成为最小生成树上的边,权值只能为连接它两个端 ...

  3. redis缓存穿透,缓存击穿,缓存雪崩

    缓存穿透 缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有.这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询).这样请求就会绕过 ...

  4. python中的logging日志

    logging使用 import logging import os from logging import handlers from constants.constants import Cons ...

  5. C语言实现类似C++的容器vector

    C语言也能面向对象?不是C++是面向对象的么?其实C语言也能抽象成简单的面向对象方法,在Linux内核源码当中,底层的驱动代码.文件系统等皆采用了面向对象的封装技术,这样的好处是将客观的东西抽象出来, ...

  6. jQuery中的属性过滤选择器(四、五):[attribute] 、[attribute=value]、[attribute!=value] 、[attribute^=value] 等

    <!DOCTYPE html> <html> <head> <title>属性过滤选择器</title> <meta http-equ ...

  7. k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-5

    1.为Flannel生成证书 [root@linux-node1 ~]# vim flanneld-csr.json { "CN": "flanneld", & ...

  8. vsftpd 参数说明

    2021-07-28 该文章为转载文章,非原创 参数作用# 是否允许匿名访问 [ 12行 ]anonymous_enable=[YES|NO]# 是否允许本地用户访问( /etc/passwd中的用户 ...

  9. 一文读懂Lua元表

    元表 Lua语言中的每种类型的值都有一套可预见的操作集合.例如,我们可以将数字相加,可以连接字符串,还可以在表中插入键值对等,但是我们无法将两个表相加,无法对函数作比较,也无法调用一个字符串,除非使用 ...

  10. 最详尽的 JS 原型与原型链终极详解(1)(2)(3)===转载

    转载===方便以后复习 原文网址:https://www.jianshu.com/p/dee9f8b14771 一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为 ...