2017-10-23 3 views
0

Ich weiß nicht, was diesen Fehler auslöst. Ich weiß nicht, warum ich diesen Fehler bekomme. Ich ändere bereits ein paar Teile des Codes und immer noch bekomme ich diesen Fehler. Ich habe versucht, es für 2 Tage zu beheben.TypeError: encode() fehlt 1 benötigt positional Argument: 'Iterationen'

Traceback:

File "C:\Users\Adila\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\exception.py" in inner 
    41.    response = get_response(request) 

File "C:\Users\Adila\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "C:\Users\Adila\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "C:\Users\Adila\Documents\tryFOUR\src\register\views.py" in register 
    13.   user = form.save() 

File "C:\Users\Adila\Documents\tryFOUR\src\custom_user\forms.py" in save 
    50.  user.set_password(self.cleaned_data["password2"]) 

File "C:\Users\Adila\AppData\Local\Programs\Python\Python35\lib\site-packages\django\contrib\auth\base_user.py" in set_password 
    105.   self.password = make_password(raw_password) 

File "C:\Users\Adila\AppData\Local\Programs\Python\Python35\lib\site-packages\django\contrib\auth\hashers.py" in make_password 
    84.  return hasher.encode(password, salt) 

Exception Type: TypeError at /accounts/register/ 
Exception Value: encode() missing 1 required positional argument: 'iterations' 

hashers.py:

from django.contrib.auth.hashers import PBKDF2PasswordHasher 
from django.utils.crypto import (get_random_string, pbkdf2) 
from honeywordHasher.models import Sweetwords 

class MyHoneywordHasher(PBKDF2PasswordHasher): 
    algorithm = "honeyword_base9_tweak3_pbkdf2_sha256" 
    iterations = PBKDF2PasswordHasher.iterations*3 

    def hash(self, password, salt, iterations): 
     hash = pbkdf2(password, salt, iterations, digest=self.digest) 
     return base64.b64encode(hash).decode('ascii').strip() 

    def salt(self): 
     salt = get_random_string() 
     while Sweetwords.objects.filter(salt=salt).exists(): 
      salt = get_random_string() 

     return salt 

    def verify(self, password, encoded): 
     algorithm, iterations, salt, dummy=encoded.split('$',3) 
     hashes = pickle.loads(Sweetwords.objects.get(salt=salt).sweetwords) 
     hash = self.hash(password, salt, int(iterations)) 
     if hash in hashes: 
      return honeychecker.check_index(salt, hashes.index(hash)) 
     return False 

    def encode(self, password, salt, iterations): 
     sweetwords = ['hilman95'] 
     sweetwords.extend(honey_gen.gen(password, base64, ["passfiles.txt"])) 
     for i in range(base64 + 1): 
      sweetwords.extend(honeywordtweak.tweak(password[i], 3)) 
      random.shuffle(sweetwords) 

     hashes = [] 
     for swd in sweetwords: 
      hashes.append(self.hash(swd, salt, iterations)) 
     self.honeychecker.update_index(salt, sweetwords.index(password)) 
     h = Sweetwords(salt=salt, sweetwords = pickle.dumps(hashes)) 
     h.save() 
     return "%s$%d$%s$%s" %(self.algorithm, iterations, salt, hashes[0]) 

kann jemand erklären, warum ich bitte immer diese Fehlermeldung zu halten? Ich habe Stunden damit verbracht, alle verwandten Fragen hier zu suchen, und nichts löst es.

+3

Ganz einfach, definieren Sie 'kodieren (self, Passwort, Salz, Iterationen)', und nennen Sie es mit 'hasher.encode (Passwort, Salz)', so gibt es einen Parameter (die letzten, ' Iterationen ") fehlen. Was war nicht klar über die Fehlermeldung? –

+0

es immer noch den gleichen Fehler, nachdem ich in: hashher.encode (Passwort, Salz, Iterationen) @ WillemVanOnsem das ist warum ich so verwirrt. – nuradilla

Antwort

0
def encode(self, password, salt, iterations=None): 
    if iterations is None: 
     iterations = self.iterations 
    # then ur code...... 
+0

es ungültigen Syntaxfehler geben :(@megamind – nuradilla

+0

ha ha, ich sagte, verwenden Sie es in ur-Code, es ist der Pseudo-Code. Ich bearbeite es. – megamind

+0

oh ich lege die iterations = self.iterations oben, wenn Iterationen ist keine. Meine schlecht Danke @megamind – nuradilla

Verwandte Themen