2015-02-09 2 views
0

Я хочу создать свою собственную страницу входа, используя адрес электронной почты и пароль в django 1.7. Когда я заполняю коробку и я нажимаю кнопку «Войти» на страницу входа.Не работает пользовательская страница входа в django 1.7

Мое мнение:

def get_user_by_email(email): 
    try: 
     return User.objects.get(email=email) 
    except User.DoesNotExist: 
     return None 


def login_by_email(request): 
    email = request.POST.get('email') 
    password = request.POST.get('password') 
    username = get_user_by_email(email) 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active(): 
      login(request, email) 
      return HttpResponseRedirect(reverse("myapp:dashboard")) 
    return render_to_response('myapp/login.html', context_instance=RequestContext(request)) 

Мой URL:

url(r'^login/$', views.login_by_email, name='login'), 

Мой шаблон login.html

{% block content %} 
<form class="form-horizontal" name="LoginForm" action="{% url 'myapp:login' %}" method="post"> 
    {% csrf_token %} 
    <div class="control-group"> 
     <label class="control-label" for="email">Email</label> 
     <div class="controls"> 
      <input type="text" id="email" value="{{email}}" placeholder="Email"> 
     </div> 
    </div> 
    <div class="control-group"> 
     <label class="control-label" for="password">Password</label> 
     <div class="controls"> 
      <input type="password" name="password" id="password" placeholder="Password"> 
     </div> 
    </div> 
    <div class="control-group"> 
     <div class="controls"> 
      <button type="submit" class="btn">Login</button> 
     </div> 
    </div> 
</form> 
{% endblock %} 

ответ

0

Эта линия:

username = get_user_by_email(email) 

Должно быть:

user_instance = get_user_by_email(email) 
if user_instance: 
    username = user_instance.username 

Вы передаете объект пользователя для аутентификации и не в состоянии зарегистрировать пользователя в Кроме того, при вызове функции входа в систему, вы должны передать пользователю в качестве параметра.:

login(request, user) 

Вы в настоящее время проходит по электронной почте (Джанго не может справиться с ней таким образом)

Обратитесь к AUTH docs более подробно о том, как обрабатывать пользовательские механизмы Войти

EDIT: Вот полный код вид

def get_user_by_email(email): 
try: 
    return User.objects.get(email=email) 
except User.DoesNotExist: 
    return None 


def login_by_email(request): 
    email = request.POST.get('email') 
    password = request.POST.get('password') 
    user_instance = get_user_by_email(email) 
    if user_instance: 
     username = user_instance.username 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       login(request, user) 
       return HttpResponseRedirect(reverse("myapp:dashboard")) 
    return render_to_response('myapp/login.html', context_instance=RequestContext(request)) 
+0

Это не работает. – mark

+0

Объясните, что не работает, так что я могу помочь вам в дальнейшем – Alvaro

+0

Этот код дают одинаковые результаты: определение функции login_by_email (запрос): электронная почта = request.POST.get («адрес электронной почты», «») пароль = запрос. POST.get ('пароль', '') user_instance = get_user_by_email (электронная почта) если user_instance: имя пользователя = user_instance.username пользователя = аутентификации (имя пользователя = имя пользователя, пароль = пароль) , если пользователь не None: если user.is_active(): login (request, user) return HttpResponseRedirect (reverse ('freedays: dashboard')) return render_to_response ('freed ays/login.html ', context_instance = RequestContext (запрос)) ' – mark

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