先上想法,想对数据库账号的密码进行一个加密,但是django文档中的加密方法set_password貌似是只针对他们默认的user模型 或者继承 AbstractBaseUser的模型有效

from django.contrib.auth.models import AbstractBaseUser
from django.contrib.auth.models import User

其中set_password 就是对make_password进行一层封装  直接在用户注册保存时 user.set_password = password 进行加密

验证密码也是对其封装 check_passwrod封装                   ................

如果自定义按照我下面的方法,但是没有request.user了


于是想在自己定义的模型中使用,查了查文档发现 那不就和 flask的werkzegu 中的两个加密方式一样

只是有一些小坑需要注意


from django.contrib.auth.hashers import make_password,check_password

class User(models.Model):
class Meta:
db_table = 'user' name = models.CharField(max_length=20,null=True,unique=True)
password = models.CharField(max_length=128)
create_date = models.DateTimeField(auto_now_add=True) def __str__(self):
return self.name def _set_password(self,password):
self.password = make_password(password) def _check_password(self,password):
return check_password(password,self.password)

简单的用户模型 其中_set_password 是我对需要进行保存的数据 进行一个密码加密 默认不做任何改动

_check_password 是对查询到的用户 进行一个验证,不过这就是这个坑点了,

在flask中验证密码是

def _check_password(self,password):
return check_password(self.password,passowrd)

先对查询到用户使用这个方法_check_password ,直接填入用户输入的明文密码对其验证就可以了

但是django 的参数位置和flask的相反,是先明文,在加密,容易以为是密码错误

# 源码
def check_password(password, encoded, setter=None, preferred='default'):

先明文密码,后加密密码 但我这个是类方法,其实和flask一样直接填写就好了,直接设置好了,不需要管参数位置

提醒在视图函数中使用这个加密方式 会出现这种问题    切记切记

 def login(request):
if request.POST.method == 'POST':
name = request.POST.get('name')
password = request.POST.get('password')
user = User.objects.filter(name=name).first()
if user:
if user._check_password(password)
# 舍弃掉 from django.contrib.auth import authenticate
# 换成自定义登录 authenticate毕竟只是对数据库查询该用户是否存在,但是如果加密,那么password字段查询还需要加密.. 算了
# 但是还用用 login对其用户session添加字段
login(request,user)
return redirect(revsrse('user:inde'))
else:
return render(request,'login.html',{"msg":"账号密码不匹配"})
else:
return render(request,'login.html',{"msg":"账号密码不匹配"}) return return render(request,'login.html')

引用 https://blog.csdn.net/qq_27437781/article/details/86002317

django 从零开始 9 自定义密码验证加密的更多相关文章

  1. django 从零开始 8 用户登录验证 待测

    看文档 djang 自带一个用户登录验证的方法,不过有些看着懵逼,去网上找了一圈,发现很多都是照抄文档说明的,几乎没说啥原理 特别是 from django.contrib.auth import a ...

  2. django 自定义 密码加密方式 及自定义验证方式

    在django1.6中,默认的加密方式是pbkdf_sha256,具体算法不表,一直以来用django的自带用户验证都十分顺手,但如果需要修改默认加密方式为md5,具体方法为: 在settings.p ...

  3. Shiro自定义realm实现密码验证及登录、密码加密注册、修改密码的验证

    一:先从登录开始,直接看代码 @RequestMapping(value="dologin",method = {RequestMethod.GET, RequestMethod. ...

  4. 【WCF】Silverlight+wcf+自定义用户名密码验证

    本文摘自 http://www.cnblogs.com/virusswb/archive/2010/01/26/1656543.html 在昨天的博文Silverlight3+wcf+在不使用证书的情 ...

  5. Django自定义登陆验证后台

    支持邮箱/手机号/昵称登录,在django1.6.2测试成功.1.models # -*- encoding: utf-8 -*- from django.db import models from ...

  6. WCF 安全性之 自定义用户名密码验证

    案例下载 http://download.csdn.net/detail/woxpp/4113172 客户端调用代码 通过代理类 代理生成 参见 http://www.cnblogs.com/woxp ...

  7. [PHP] Laravel 5.5 的 BCrypt对密码进行加密及密码验证

    Laravel 5.5 的 BCrypt对密码进行加密及密码验证 一.加密 方法1) $password= Hash::make('密码'); 方法2) /也可直接使用 bcrypt 的 functi ...

  8. spring security的BCryptPasswordEncoder加密和对密码验证的原理

    目录 BCryptPasswordEncoder加密和对密码验证的原理 一.加密算法和hash算法的区别 二.源码解析 1. encode方法 2. BCrypt.hashpw方法 3. matche ...

  9. Django项目:CRM(客户关系管理系统)--38--30PerfectCRM实现King_admin编辑自定义字段验证

    # kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...

随机推荐

  1. [LC] 572. Subtree of Another Tree

    Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and no ...

  2. [LC] 144. Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. Example: Input: [1,null,2,3 ...

  3. python-django-linux上mysql的安装和配置_20191124

    又有了阻塞了,怎么在Linux创建数据库,mysql, 我把数据库安装在Linux上, 1,sudo apt-get install mysql-server 2,ps -aux | grep 'my ...

  4. FPGA浮点数定点数的处理

    http://blog.chinaaet.com/justlxy/p/5100053166大佬博客,讲的非常有条理的 1,基础知识 (1)定点数的基础认知: 首先例如一个16位的数表示的定点数的范围是 ...

  5. labview学习——用户界面模式

    根据事件的发出源,事件可以抽象地分为用户界面事件和用户自定义事件.相关的基本知识可以参考有关的书籍,这里不再阐述事件结构的使用方法. 下图所示的结构称为用户界面事件模式,它能够很便捷地响应各种事件并且 ...

  6. LeetCode Day 11

    LeetCode0021 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1 ...

  7. MyEclipse提示Errors occurred during the build

    最近在使用Extjs 在springsource Tool Suite运行时老是出现: Errors occurred during the build. Errors running builder ...

  8. jQuery学习笔记三

    使用fadeIn()js解释器会将所选元素的CSS opacity属性从0改为100,fadeTo()会动画显示所选元素,将它为改为某个特定的透明度百分比,使用fadeOut()js解释器会将所选元素 ...

  9. Circles of Waiting

    题目传送门 很容易列出期望的方程,高斯消元搞一波但是常规消元复杂度是$O(r^6)$的考虑从左到右从上到下编号然后按编号从小到大消元假设黄点是已经消元的点,那么消下一个点的时候,只有绿点的方程中该项系 ...

  10. 网络编程之C10K

    网络编程之C10K 虽然在过去的十几年里C10K问题已经可以很好的解决,但学习网络编程时研究C10K问题仍然价值巨大,因为技术的发展都是有规律和线索可循的,了解C10K问题及其解决思路,通过举一反三, ...