2017-12-27 4 views
1

Ich lese diese: https://stackoverflow.com/a/17090205/6426449Python3, re.match mit Liste

Und ich habe eine Liste, die nicht auf Benutzernamen in django verwendet werden kann.

Liste: FORBIDDEN_USERNAME_LIST = ['admin', 'master', 'owner']

Also machte ich einen Code wie folgt aus:

views.py

def username_choice(request): 

    if request.method == "POST": 
     username = request.POST['username']  
     for item in forbidden.FORBIDDEN_USERNAME_LIST: 
      match = re.search("r'\b"+item+"\b'", username) 
      if match: 
       return JsonResponse({'result': item + 'banned username'}) 

aber es scheint, dass es nicht funktioniert.

Vielleicht denke ich, match = re.search("r'\b"+item+"\b'", username) Hier ist ein Problem.

Wie kann ich das beheben?

+1

Wie geben Sie den Benutzernamen vom Frontend ein? – Exprator

+0

überprüfen Sie dieses Ding in der Formularvalidierung besser. – babygame0ver

Antwort

2

Sie könnten einfach in verwenden:

forbidden = ['admin', 'master', 'owner'] 
username = request.POST['username'] 
match = [nm for nm in forbidden if nm in username] 
if match: 
    # part of the username is in the forbidden list. 

Beispiel in IPython:

In [1]: forbidden = ['admin', 'master', 'owner'] 

In [2]: username = 'owner123' 

In [3]: match = [nm for nm in forbidden if nm in username] 

In [4]: match 
Out[4]: ['owner'] 
+1

Ich mag, dass dieser Ansatz keine Regexes verwendet. – gonczor

1
def username_choice(request): 

    if request.method == "POST": 
     username = request.POST['username']  
     for item in forbidden.FORBIDDEN_USERNAME_LIST: 
      if re.search(r'\b'+str(item)+'\\b', username, re.I): 
       return JsonResponse({'result': item + 'banned username'}) 
+0

Danke Exprator, aber was, wenn 'username = admin123'? Ich möchte auch alle Benutzernamen mit einer der verbotenen_Benutzernamenliste verbieten. – touchingtwist

+1

ok Überprüfen Sie die bearbeitete Ans – Exprator

1

Gerade diese Anweisung verwenden:

match = re.search(r'[%s]+' % item, username, re.I) 

statt dessen:

match = re.search("r'\b"+item+"\b'", username) 
Verwandte Themen