2015-01-15 3 views
1

사용자를 기록하려고하는데이 오류가 있습니다 : MultiValueDictKeyError at/" 'username'". https://docs.djangoproject.com/en/1.7/topics/auth/default/#django.contrib.auth.decorators.login_requiredDjango 오류 MultiValueDictKeyError를 어떻게 수정합니까?

전망 :

def home(request): 

    return render_to_response('home.html', {}, context_instance=RequestContext(request)) 


def login_user(request): 
    username = request.POST['username'] 
    password = request.POST['password'] 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      return HttpResponseRedirect('start.html') 
     else: 
      return HttpResponseRedirect('profile.html') 
    else: 
     return HttpResponseRedirect('home.html') 

URL :

url(r'^$', 'core.views.login_user', name='login_user'), 

HTML :

<form action="/login_user" method="POST" name="auth"> 
    {% csrf_token %} 
    <label>Email</label> 
    <input type="text" name="username"> 
    <label>Password</label> 
    <input type="password" name="password"> 
    <button type="submit">Login</button> 
</form> 
+0

다음은'login_required' 함수입니다. 하지만 당신이 다른 오류가 다음 전체 추적을 디버그 더 나은 것 ... 줄 것 같아요! –

답변

1

This question 당신을 도울 수 있습니다

U 내가 장고 문서를 따라 multiValueDict의 get 메소드 이것은 표준 dicts에도 존재하며 존재하지 않는 경우 기본값을 제공하면서 값을 가져 오는 방법입니다.

username = request.POST.get("username", False) 
password = request.POST.get("password", False) 
0

코드에 많은 오류가 있습니다.

양식 동작을 /login_user으로 지정하고 URL에 /login_user이 정의되어 있지 않으므로 /을 입력하면 login_user 기능이로드됩니다. 당신의 urls.py에 (login.html)

<form action="{% url "login" %}" method="post" accept-charset="utf-8"> 
    {{ form }} 
    {% csrf_token %} 
    <input class="btn btn-default" type="submit" value="Iniciar Sesión" /> 
</form> 

템플릿에

def login_user(request): 
    if request.user.is_authenticated(): 
     return HttpResponseRedirect(reverse('home')) 
    if request.method == 'POST': 
     form = AuthenticationForm(data=request.POST) 
     if form.is_valid(): 
      usuario = request.POST['username'] 
      clave = request.POST['password'] 
      acceso = auth.authenticate(username=usuario, password=clave) 
      if acceso is not None: 
       if acceso.is_active: 
        login(request, acceso)       
        return HttpResponseRedirect(reverse('home')) 
       else: 
        form = AuthenticationForm() 
        script = "alert('Usuario no activo');" 
        return render(request, 'login.html', locals()) 
      else: 
       form = AuthenticationForm() 
       script = "alert('Usuario y/o contraseña invalida');" 
       return render(request, 'login.html', locals()) 
    else: 
     form = AuthenticationForm() 
    return render(request, 'login.html', locals()) 

:

이 같은 것으로보기를 변경

:

나는이 작업을 수행하는 것이 좋습니다 :

url(r'^$', 'core.views.home', name='home'), 
url(r'^login/$', 'core.views.login_user', name='login'), 

이것으로 멋진 폼이 표시됩니다.)

관련 문제