Django로 로그인 처리

10590 단어 Python3Django
Django 자습서에 로그인 처리에 대한 기록이 없으니 보충해 보세요.
(인증된 문서존재하다는 초보자를 위한 느낌이 아니다)
Django 버전 1.10

accounts 응용 프로그램 제작


이번에는 웹 사이트에서 로그인/로그아웃 전용 응용 프로그램 acocunts를 만듭니다.
계정으로 명명된 이유는 sessings.LOGIN_URL 의 기본값이 /accounts/login 이기 때문이다.
$ python manage.py startapp accounts
polls 때와 같이 프로그램 등록을 진행합니다
mysite/settings.py
INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'accounts.apps.Accountsconfig', # 追加
    #...
]

URL 설정


mysite/urls.편집
mysite/urls.py
urlpatterns = [
    #...
    url(r'accounts/', include('accounts.urls')), # 追加
]
accounts/urls.새 py
기본login/logout 보기 사용하기
accounts/urls.py
from django.conf.urls import url
from django.contrib.auth.views import login,logout

urlpatterns = [
    url(r'^login/$', login,
        {'template_name': 'accounts/login.html'},
        name='login'),
    url(r'^logout/$', logout, name='logout')
]
Django1.10에서
url(r'^login/$', 'django.contrib.auth.views.login')
이러한 문자열은 지정할 수 없습니다. 주의하십시오.

템플릿 만들기


accounts/templates/accounts/login.html
{% extends "admin/base.html" %} {# ① #}

{% block content %}

{% if form.errors  %}
  <div class="alert alert-danger" role="alert">
    <p>Your usernamne and password didn't match. Please try again.</p>
  </div>
{% endif %}

<div class="panel panel-primary">
  <div class="panel-heading">
    <h3 class="panel-title text-center">Log-in to mysite</h3>
  </div>
  <div class="panel-body">
    <form action="{% url 'login' %}" method="post" role="form">
      {% csrf_token %}
      <div class="input-group" style="margin-bottom:10px">
        <span class="input-group-addon"><i class="fa fa-user fa-fw"></i></span>
        <input id="id_username" name="username" type="text" value="" maxlength="256" placeholder="Username" aria-describedby="sizing-addon1" autofocus required/> {# ② #}
      </div>
      <div class="input-group" style="margin-bottom:10px">
        <span class="input-group-addon"><i class="fa fa-lock fa-fw"></i></span>
        <input id="id_password" name="password" type="password" value="" maxlength="256" placeholder="Pasword" aria-describedby="sizing-addon1" required/> {# ② #}
      </div>

      <button type="submit" style="margin-bottom:-20px"><i class="fa fa-sign-in">Login</i></button>
      <input name="next" type="hidden" value="{{ next }}"/> {# ③ #}
    </form>
  </div>
</div>
{% endblock %}
① 즐거움을 위한 admin의 base.차용 html
django.contrib.auth.view.login 기본 사용AuthenticationForm.AuthenticationForm'username','password'라는 폼 값을 이용하여
③ 로그인 화면으로 리디렉션할 때 리디렉션 소스는 /accounts/login/?next=/polls/3 와 같이 전달됩니다.이 넥스트 값을 알려야 합니다AuthenticationForm로그아웃한 페이지는 관리자를 직접 사용하기 때문에 이번에는 만들지 않습니다.

해보다


polls/views.py
# ...
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

@method_decorator(login_required, name='dispatch')
class IndexView(generic.ListView):
    # ...
클래스 기반 보기에 사용@method_decorator.함수의 경우 @login_required 이면 됩니다.
액세스http://localhost:8000/polls 시 다음 화면이 나타납니다.

슈퍼유저 계정으로 로그인할 수 있을 거예요.
이전에 admin에 로그인할 때 로그인 화면이 되지 않을 때가 있기 때문에 방문http://localhost:8000/accounts/logout을 한 번 취소하고 로그아웃해야 합니다.

좋은 웹페이지 즐겨찾기