2017-12-30 75 views
1

장고를 사용하여 웹 사이트를 만들려고하고 있는데 로그인이 필요한 몇 가지보기가 있습니다. 그러나 사용자를 인증하는 방법을 알 수 없습니다. 나는 웹 개발에 새로운 경험이있다. (이것은 나의 첫번째 프로젝트이다.) 내가 명확하지 않다면 후속 질문을해라. rushsite/러시/views.py에서장고 앱에서 사용자를 인증 할 수 없습니다.

발췌 : 여기에 컨텍스트를 제공 할 수있는 몇 가지 코드는

from django.http import HttpResponseRedirect 
from django.contrib.auth import authenticate, login 
from django.contrib.auth.decorators import login_required 

def login_user(request): 
    if request.method == "POST": 
     username = request.POST.get('username') 
     password = request.POST.get('password') 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      login(request, user) 
      return HttpResponseRedirect('list') 
     else: 
      return render(request, "registration/login.html") 
    else: 
     return render(request, "registration/login.html") 

내 login.html 파일 : rushsite/러시/모델에서

<!DOCTYPE html> 
<html lang="en"> 

<head> 
    <meta charset="utf-8"> 
</head> 

<body> 
    <div class="container"> 
     <div class="top"> 
      <h1 id="title" class="hidden"><span id="logo">Delta Sig<span> Recruitment</span></span></h1> 
     </div> 
     <div class="login-box animated fadeInUp"> 
      <div class="box-header"> 
       <h2>Log In</h2> 
      </div> 
      <form method="post"> 
       {% csrf_token %} 
       <label for="username">Username</label> 
       <br/> 
       <input type="text" id="username"> 
       <br/> 
       <label for="password">Password</label> 
       <br/> 
       <input type="password" id="password"> 
       <br/> 
       <button type="submit">Sign In</button> 
       <br/> 
       <br/> 
       {% if request.META.HTTP_REFERER == "http://127.0.0.1:8000/login/" %} Incorrect username or password. {% endif %} 
      </form> 
     </div> 
    </div> 
</body> 

발췌 .py :

from django.db import models 
from django.contrib.auth.models import User 
from django.core.validators import MaxValueValidator, MinValueValidator 

class Brother(models.Model): 

    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    first_name = models.CharField(max_length=64) 
    last_name = models.CharField(max_length=64) 

내가 알고있는 자격 증명을 사용하여 양식을 제출하면 사용자 = 없음이므로 나를 다시 로그인 페이지로 리디렉션합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

:에 LoginView 자동으로 제공 형태, 템플릿에서 <form>를 사용

감소 될 수있다 사용자. 그래도이게 무슨 뜻인지는 모르겠다. –

+0

게시하고 있다고 생각하는 값이 실제로보기에 도착했는지 디버그 할 수 있습니까? – schwobaseggl

답변

0

로그인 화면에서 이상한 일을하지 않으려면 django's pre-made authentication views을 사용해야합니다. 이렇게하면 휠을 다시 발명 할 때 몰래 빠질 수있는 일반적인 종류의 문제를 피할 수 있습니다.

또한 django의 양식 사용과 ?next= GET 인수를 기반으로 성공적인 로그인시 리디렉션과 같은 몇 가지 추가 기능이 포함되어 있습니다.

이 경우 LoginView이 필요합니다.

[django의 기본 제공 양식 (https://docs.djangoproject.com/en/2.0/topics/forms/)을 살펴 보는 것도 좋습니다. 에 대한 자신의 견해를 작성해야한다면 양식이 유효성 검사에 적합 할 것입니다. 그들은 simplify your template code 일 수 있으며 유효성 검증 오류를 적절하게 표시합니다. 나는 그것이 내가 가진 OneToOneField하는 형제 모델을 가지고 있다는 사실과 함께해야 할 것 같아요

<form method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
</form>