2014-01-08 4 views
0

У меня очень маленькое приложение Django, в основном для обучения. Я использую встроенную модель User, предоставленную Django. Чтобы узнать о функциональности, я создал страницы, которые позволяют мне создавать и редактировать пользователей без необходимости перехода на панель администратора.Проверка правильности пароля (Django/Python)

Страница регистрации позволяет мне очень легко проверять такие вещи, как пароль и срок действия электронной почты, так как при отправке POST на просмотр я просто использую user_form.is_valid(), чтобы проверить правильность полей (имя пользователя меньше 30 символов, пароль меньше 128, другие условия ...).

Для моей страницы редактирования я хотел сделать контент более отзывчивым, поэтому я использовал AJAX-запросы через JQuery, позволяя выполнять действия без перезагрузки страницы. Это прекрасно работает, но это не оставляй меня с проблемой проверки достоверности, так как я не посылая форму, я только с помощью Javascript, чтобы выбрать запросы и отправить их в запросе AJAX как таковой:

$.get('/dms/edit_user_changeuser/', {inputNameSend : $("#inputname").val(), usernameToSend : $("#usernameID").val(), emailToSend : $("#emailID").val(),passwordToSend : $("#passwordID").val(), disabledToSend : checkedVal}, function(data){ 
      if(data != "success"){ 
       $("#errorDisplay").show(); 
      }else{ 
       $("#savedDisplay").show(); 
       $("#user_form").hide(); 
      } 
}); 

И это, как ассоциированная View обрабатывает его:

@login_required 
def user_edit_changeuser(request): 
    # Like before, get the request's context. 
    context = RequestContext(request) 

    inputname = request.GET['inputNameSend'] 
    newUsername = request.GET['usernameToSend'] 
    newEmail = request.GET['emailToSend'] 
    newPassword = request.GET['passwordToSend'] 
    if(request.GET['disabledToSend'] == "true"): 
     disabledBool = False 
    else: 
     disabledBool = True 
    try: 
     user_obj = User.objects.get(username=inputname) 
     print("retUser") 
     user_obj.username = newUsername 
     user_obj.email = newEmail 
     user_obj.is_active = disabledBool 
     user_obj.set_password(newPassword) 
     user_obj.save() 
     print(str(disabledBool)) 
     return HttpResponse("success") 
    except Exception, e: 
     return HttpResponse(str(e)) 

это все работает, предполагая, вход правилен, но есть что-то вроде User.checkValidPassword(newPassword) вручную проверить действительность?

+0

https://docs.djangoproject.com/en/1.3/topics/auth/#manually-checking-a-user-s-password – dm03514

ответ

1

User экземпляры имеют метод check_password, который делает именно то, что вы хотите, чтобы это сделать

user = User.object.get(username=inputname) 
user.checK_password('a_password') 

Вышеуказанные проверки, чтобы увидеть, если текущий пароль пользователей соответствует тому, что сохраняется в БД. Если бы вы спрашивали о проверке, чтобы убедиться, что newPassword действителен, т.е. является надлежащей длиной, содержат номера и т.д. Там нет причин вы не можете использовать форму для проверки пользовательского ввода, так же, как если бы это не было основан AJAX вида


как примечание стороны, это не обязательно лучше всего поймать все исключения в python. Он может маскировать всевозможные ошибки, которые вы хотите увидеть с ошибкой!

Если вы ожидаете, что пользователь может не существовать, сделайте это явно.

try: 
    user = User.object.get(username=inputname) 
except User.DoesNotExist: 
    # all other expections will not be caught! 
+1

Awesome, так просто, что я чуть не получил это право с моей догадке в конце вопроса. Определенно случай RTFM, но мой мозг жарится, в любом случае, спасибо за помощь! :) –

Смежные вопросы