Можно ли написать код для входа в систему без использования метода аутентификации и входа в систему django? - PullRequest
1 голос
/ 13 октября 2011

До сих пор я использовал стандартную аутентификацию django и метод входа для кода входа в систему для моего проекта. См. Код ниже,

«мой код входа»

def login(request):
    if request.method == 'POST':
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        if(len(username.strip(' ')) == 0):
            return render_to_response('login.html', {'error_message': 'Username should not be empty', 'username': username}, context_instance=RequestContext(request))
        if(len(password.strip(' ')) == 0):
            return render_to_response('login.html', {'error_message': 'Password should not be empty', 'username': username}, context_instance=RequestContext(request))
        authuser = authenticate(username=username, password=password)
        if authuser and authuser.is_active:
            try:
                login(request, authuser)
            except (RuntimeError, TypeError, NameError):
                errmessage = ERROR_MESSAGE % (RuntimeError, TypeError, NameError)
                CapturLog().logdata(request, 'LoginError', 'Login', errmessage)
            else:
                CapturLog().logdata(request, 'Login', 'Login', 'Successfully Logged In')
            return HttpResponseRedirect(reverse('index:home'))
        else:
            return render_to_response('login.html', {'error_message': 'Invalid User', 'username': username}, context_instance = RequestContext(request))
    return render_to_response('login.html', context_instance=RequestContext(request)) 

Этот код работает хорошо, но я не хочу использовать метод по умолчанию в django. Вместо этого я хочу использовать свой собственный метод для проверки подлинности и входа в систему. Это возможно или нет?Я добавил несколько строк в вышеприведенные коды для аутентификации, как показано ниже:

 authuser = _authenticate_check(username, password)

 def _authenticate_check(username=None, password=None):
    try:
        if '@' in username:
            user = User.objects.get(email=username)
        else:
            user = User.objects.get(username=username)
    except User.DoesNotExist:
        return None
    # now check the password
    if user.check_password(password):
                return user

Тогда, если я попытаюсь ввести login(request, user), это не сработает.В этой строке отображается сообщение об ошибке (т. Е. Сервер не найден).
Можно ли написать ручной код для аутентификации и входа в систему вместо использования метода по умолчанию, используемого django?
Заранее спасибо!

1 Ответ

1 голос
/ 13 октября 2011

Простой ответ: конечно, вы можете написать свой собственный.Этот модуль является просто тем модулем Python, который создан для вас, чтобы использовать его без особой работы.

Реальный ответ: они, вероятно, делают все, что вы хотите, и даже больше, и вся философия Django - СУХАЯ (Донне повторяйте себя), поэтому, если он встроен и может справиться с вашей ситуацией, используйте его, а не заново изобретайте колесо.

Вы, конечно, можете написать свой собственный метод аутентификации, но вы не представилихороший аргумент для этого в этом посте.Просто потому, что вы пролистали документы и не чувствуете себя комфортно, этого недостаточно.Посмотрите, будут ли работать доступные инструменты.Если нет, то пришло время определить, почему / почему нет, и что вам нужно для достижения цели.

Встроенная сессия, пользователи, группы, просто фантастика, если вы потратите время на изучениекак они работают вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...