먼저 아이디어, 데이터베이스 계정 암호를 암호화 생각하지만, 기본 사용자 모델 만있는 것처럼 암호화 방법의 장고 문서 set_password 보인다
즉,
에서 django.contrib.auth.models 수입 사용자
이 모델은, 유효
당신이 모델의 자신의 정의에 사용할 그래서, 조사의 검색은 문서가 werkzegu 같은 플라스크의 암호화 및 두에없는 것을 발견
그러나 일부 구덩이 참고있다
클래스 사용자 (models.Model) : 클래스 메타 : db_table = ' 사용자 ' 이름 = models.CharField (MAX_LENGTH = 20, 널 (null) = 사실, 독특한 = 참) 암호 = models.CharField (MAX_LENGTH = 128 ) create_date = models.DateTimeField ( auto_now_add = 참) 데프 __str__ (자동) : 리턴 self.name의 데프 _set_password (자기, 비밀번호) : self.password = make_password (비밀번호) 데프 _check_password (자기, 패스워드) : 복귀 은 check_password (암호 self.password)
_set_password 내 데이터 인 간단한 사용자 모델은 변경하지 않고 기본 암호 암호화됩니다 저장해야
_check_password은 검증은 사용자에 쿼리입니다, 그러나 이것은 구덩이이며,
플라스크는 비밀 번호를 확인합니다
데프 _check_password (자기, 비밀번호) : 반환 은 check_password (self.password, passowrd)
먼저 사용자 쿼리를 확인할 수있을 것입니다 직접 사용자가 입력 한 일반 텍스트 암호를 입력,이 방법 _check_password를 사용하는 자신의
그러나 위치 및 대비의 플라스크 장고 매개 변수, 즉 잘못 생각하기 쉬운 첫 번째 명확한 암호화 된 텍스트, 암호입니다
# 源码 DEF 은 check_password (암호 부호화 세터 = 없음, 바람직 = ' 디폴트 ' ) :
먼저 일반 텍스트 암호, 암호화 된 암호는 ,하지만 난 매개 변수의 위치를 제어하지 않습니다,이 방법은 사실, 플라스크에서, 그리고 직접, 즉시 셋업으로 잘 채우 좋아
이 암호화의 관점에서 알림 기능이 문제를 직면하게 될 것이다 기억 기억
1 개 데프 로그인 (요구) 이 있는 경우 request.POST.method == " POST " : 3 명 = request.POST.get ( ' 이름 ' ) 4 암호 request.POST.get = ( ' 암호 ' ) 5 유저 = 유저 .objects.filter (NAME = 이름) 좁은 방 () 6 만약 사용자 : 7 경우 user._check_password (암호) 8 # 舍弃掉django.contrib.auth 오기로부터는 인증 9 중 #사용자가있는 경우에만 데이터베이스 쿼리, 결국 사용자 정의 로그인 인증합니다로 대체하지만 암호화 된 경우, 암호 필드 문의는 음 .. 암호화 할 필요가있다 (10) # 필드를 추가 할 로그인 세션의 사용자가 아니라 (11) , 로그인 (요청 사용자를 ) (12)는 반환 (revsrse (리디렉션 ' : 앵드 사용자 ' )) (13)는 다른 : 14 리턴 (가), (요청을 렌더링 ' login.html ' {, " MSG는 " : " 계정 암호가 일치하지 않습니다 " )} 15 다른 사람을 : 16 반환 렌더링 (요청 , ' login.html ' , { " MSG" : " 계정 암호가 일치하지 않습니다 " )} (17). (18)가 19. 반환 반환 합니다 (렌더링 요청, ' login.html을 ' )
참조 https://blog.csdn.net/qq_27437781/article/details/86002317를