모든 웹 요청에 request.user 속성을 제공하여 현재 사용자를 나타냅니다. 현재 사용자가 로그인되어 있지 않으면 이 속성은 AnonymousUser의 인스턴스이고, 그렇지 않으면 User 인스턴스입니다.
is_authenticated()로 구별할 수 있습니다. 예:
if request.user.is_authenticated():
# 인증된 사용자를 위해 작업을 수행합니다.
else:
# 익명 사용자를 위해 뭔가를 하세요.
로그인 로그인
login()
로그인 함수에는 HttPRequest 객체와 User 객체가 매개변수로 필요합니다. login()은 Django의 세션 프레임워크를 사용하여 세션에 사용자 ID를 저장합니다.
authentic()과 login()을 동시에 사용:
from django.contrib.auth import authenticate, login
def my_view(request):
사용자 이름 = 요청 .POST['사용자 이름']
passWord = request.POST['비밀번호']
사용자 = authenticate(사용자 이름=사용자 이름, 비밀번호=비밀번호)
사용자가 없음이 아닌 경우:
if user.is_active:
login(request, user)
# '잘못된 로그인' 오류 메시지를 반환합니다.
로그아웃 로그아웃
logout()
HttpRequest 객체를 매개변수로 사용하며 반환값이 없습니다. 예:
from django.contrib.auth import logout
def logout_view(request):
logout(request) # 성공 페이지로 리디렉션합니다.
액세스 제한
원시 방식
request.user.is_authenticated() 사용
리디렉션:
from django.shortcuts 가져오기 리디렉션
def my_view(request):
그렇지 않은 경우 request.user.is_authenticated(): return 리디렉션('/login/?next=%s' % request.path)
# ...
또는:
from django.shortcuts import render
def my_view(request):
request.user.is_authenticated()가 아닌 경우 : return render(request, 'myapp/login_error.html')
# ...
데코레이터 사용 login_required
login_required([redirect_field_name=REDIRECT_FIELD_NAME, login_url=없음]
from django.contrib.auth.designators import login_required
@login_required
def my_view(request): ...
사용자가 로그인되어 있지 않은 경우 settings.LOGIN_URL로 리디렉션하고 현재 URL의 상대 경로를 추가하여 쿼리 문자 쌍을 키로 형성하고 이를 settings.LOGIN_URL:
/accounts에 추가합니다. /login/ ?next=/polls/3/.
from django.contrib.auth . decorators import login_required
@login_required(redirect_field_name='my_redirect_field')
def my_view(request): ...
login_url을 직접 정의할 수도 있습니다.
from django.contrib.auth.designators import login_required
@login_required(login_url='/accounts/login/')
def my_view(request): ...
urls.py의 필수 정의:
(r'^accounts/login/$', 'django.contrib.auth.views.login'),
예를 들어 사용자의 이메일을 감지하려면
def my_view(request):
request.user에서 '@example.com'이 아닌 경우 .email:return HttpResponse ("You can't vote in this poll.")
# ...
장식자를 사용할 수 있습니다:
from django .contrib.auth.designators import user_passes_test
def email_check(user):
return '@example.com' in user.email
@user_passes_test(email_check)
def my_view (요청):
...
인증 뷰
물론 로그인, 로그아웃, 비밀번호 관리를 위한 일부 뷰 기능을 직접 정의할 수 있습니다. 더 편리합니다.
하지만 Django의 내장 뷰에 대해서도 배울 수 있습니다.
Django는 인증 보기에 대한 기본 템플릿을 제공하지 않지만 템플릿 컨텍스트는 아래의 각 보기에 대해 문서화되어 있습니다.
모든 내장 보기는 TemplateResponse 인스턴스를 반환하므로 응답 데이터.
def login(request, template_name='registration/login.html',
redirect_field_name=REDIRECT_FIELD_NAME,
authentication_form=AuthenticationForm,
current_app=None, extra_context=None):
"""
로그인 양식을 표시하고 로그인 작업을 처리합니다.
"""
redirect_to = request.POST.get(redirect_field_name,
request.GET.get(redirect_field_name, ''))
if request.method == "POST":
form = 인증_form(request, data=request.POST)
if form.is_valid():
# 사용자 원본을 확인하세요. 리디렉션 URL은 안전합니다.
그렇지 않은 경우 is_safe_url(url=redirect_to,host=request.get_host()):
redirect_to = 해결_url(settings.LOGIN_REDIRECT_URL)
# 보안 좋습니다. 확인 완료. 사용자를 로그인합니다.
auth_login(request, form.get_user())
return HttpResponseRedirect(redirect_to)
else:
form = authenticate_form(request)
현재_사이트 = get_current_site (request) context = { 'form': form,
redirect_field_name : redirect_to, 'site_name': current_site.name,
}
extra_context가 None이 아닌 경우:
context.update(extra_context)
return TemplateResponse(request, template_name, context,
current_app=current_app)
URL 이름: 로그인
参数:
redirect_field_name: 重向的name,默认为next.
인증_양식: 양식입니다. 기본값은 AuthenticationForm입니다.current_app: 현재 보기가 포함된 애플리케이션을 나타내는 힌트입니다. 자세한 내용은 네임스페이스된 URL 확인 전략을 참조하세요.
extra_context: 添加到默认context data中的额外数据,为字典。
django.contrib.auth.views.login does:
如果通过GET访问, 将显示登录表单, 可以将其内容POST到到同的URL上.
如果通过POST访问, 它首先会尝试登录, 이제 다음 단계의 확정을 확인하세요.如果next 未设置,则重定向到settings.LOGIN_REDIRECT_URL(一般缺省值为accounts/profile/)。如果登录失败,则再次显示登录表单。
需要用户自己来提供로그인 html模板,缺省是registration/login.html 。这个模板将传递4个模板上下文变weight:
양식: 一个表单对象AuthenticationForm.
다음: 登录成功对象AuthenticationForm.
사이트: 当前网站,根据 SITE_ID 设置。如果你并没有安装site框架,这个变weight将设定为一个 RequestSite实例,它从当前 HttpRequest取得站点name과 域name。
site_name: 是 사이트. 이름이 一个别name입니다.如果你没가 있는 사이트는 它将会被设为 request.META['SERVER_NAME']적입니다.
如果你不想调用registration/login.html模板,你可URLconf에 있습니다.中设정의 특정 보기参数来传递template_name参数。
(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'myapp/login .html '}), 你 你 也 可以 可以 自己 自己 指定 重定 重定 向 链接 字段名 字段名 通过 通过 redirect_field_name 参数。。 默认 默认 的 字段 名 为 为 为
{%는 "base.html"을 확장합니다 %}
{% 블록 콘텐츠 %}
{% if form.errors %}
사용자 이름 및 비밀번호 일치하지 않습니다. 다시 시도해 주세요.
인증 시스템을 맞춤설정하는 경우 인증_양식 매개변수를 통해 맞춤 인증 양식을 로그인 보기에 전달할 수 있습니다. 양식의 __init__ 메소드에는 요청 매개변수가 있어야 하며 인증된 User 객체를 반환하기 위한 get_user 메소드를 제공해야 합니다.
로그아웃(요청[, next_page, template_name,redirect_field_name, current_app,extra_context])
사용자를 로그아웃합니다.
URL 이름: logout
선택 매개변수 :
next_page: 로그아웃 후 링크 리디렉션.
logout_then_login(request[, login_url, current_app, extra_context])
사용자를 로그아웃한 후 로그인 링크로 리디렉션합니다.
선택 매개변수:
login_url: 링크를 로그인 페이지로 리디렉션합니다. 기본값은 settings.LOGIN_URL입니다.
password_change(request[, template_name, post_change_redirect,password_change_form,current_app, extra_context])
사용자가 비밀번호를 변경할 수 있습니다.
URL 이름: 비밀번호 변경
예 선택 인수:
template_name: 템플릿 이름, 기본값은 Registration/password_change_form.html입니다.
post_change_redirect: 링크를 리디렉션합니다.
password_change_form: 사용자 매개변수를 포함한 맞춤형 비밀번호 변경 양식. 기본값은 PasswordChangeForm입니다.
password_change_done(request[, template_name,current_app, extra_context])
사용자가 비밀번호를 변경한 후의 페이지입니다.
URL 이름:password_change_done
선택 인수:
template_name: 템플릿 이름, 기본값은 등록/password_change_done.html입니다.
password_reset(request[, is_admin_site, template_name, email_template_name,password_reset_form, token_generator, post_reset_redirect, from_email, current_app, extra_context, html_email_template_name])
사용자가 비밀번호를 재설정할 수 있도록 허용하는 일회성 링크가 포함된 이메일을 사용자에게 보냅니다.
입력하신 이메일 주소가 존재하지 않는 경우 발송되지 않습니다.
URL 이름: 비밀번호 재설정
선택 인수 선택 인수:
template_name: 템플릿 이름, 기본값은 Registration/password_reset_form.html입니다.
email_template_name: 재충전 링크가 포함된 이메일을 생성하는 데 사용되는 템플릿 이름입니다. 기본값은 Registration/password_reset_email.html입니다.
subject_template_name: 이메일 제목을 생성하는 데 사용되는 템플릿의 이름입니다. 기본값은 Registration/password_reset_subject.txt입니다.
password_reset_form: 비밀번호 재설정 양식, 기본값은 PasswordResetForm입니다.
token_generator: 일회성 링크의 클래스 인스턴스를 확인합니다. 기본값은 default_token_generator, 해당 클래스는 django.contrib.auth.tokens입니다. PasswordResetTokenGenerator.
post_reset_redirect: 비밀번호 재설정 후 링크를 리디렉션합니다.
from_email: 이메일 주소, 기본값은 DEFAULT_FROM_EMAIL입니다.
current_app: 어떤 애플리케이션에 포함되어 있는지 나타내는 힌트 자세한 내용은 네임스페이스 URL 확인 전략을 참조하세요.
extra_context: 템플릿에 전달되는 기본 컨텍스트 데이터에 추가될 컨텍스트 데이터 사전.
html_email_template_name: 템플릿의 전체 이름 비밀번호 재설정 링크가 포함된 text/html 멀티파트 이메일을 생성하는 데 사용합니다. 기본적으로 HTML 이메일은 전송되지 않습니다.
예: Registration/password_reset_email.html(이메일 콘텐츠 템플릿):
누군가 이메일 {{ email }}에 대한 비밀번호 재설정을 요청했습니다. 아래 링크를 따르세요:
{{ 프로토콜}}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
password_reset_done(request[, template_name])
사용자가 비밀번호 재설정 이메일을 보내기로 선택한 후 페이지를 표시합니다. post_reset_redirect 링크가 Password_reset() 뷰에 명시적으로 지정되지 않은 경우 이 뷰가 직접 호출됩니다.
password_reset_confirm(request[, uidb36, token, template_name, token_generator,set_password_form, post_reset_redirect,current_app, extra_context])
새 비밀번호 입력 양식을 표시합니다.
password_reset_complete (요청 [, template_name, current_app, extra_context])
비밀번호 재설정 성공 후의 양식입니다.
도우미 기능
redirect_to_login(next[, login_url,redirect_field_name])
로그인 페이지로 리디렉션한 후 다른 링크로 리디렉션하세요. .
매개변수:
다음: 로그인 성공 후 링크.
login_url: 로그인 페이지 링크, 기본값: settings.LOGIN_URL.
redirect_field_name: 필드 이름을 리디렉션합니다. 기본값은 다음입니다.
내장 양식
class AdminPasswordChangeForm
관리자 백그라운드 사용자 비밀번호 변경 양식
class AuthenticationForm
로그인 양식.
confirm_login_allowed(user) 메소드
예를 들어 is_active 속성에 관계없이 모든 사용자가 로그인하도록 허용합니다:
from django.contrib.auth.forms import AuthenticationForm
class AuthenticationFormWithInactiveUsersOkay(AuthenticationForm):
def verify_login_allowed(self, user):
pass
또는 활성 사용자만 로그인하도록 허용:
class PickyAuthenticationForm(AuthenticationForm):
def verify_login_allowed(self, user):
if not user.is_active:
raise form.ValidationError(
) _("이 계정은 비활성 상태입니다."),
code='inactive' ,
)
if user.username.startswith('b'):
' s ~ ~ ‐ off ‐ ‐ ‐ ("죄송합니다. 'b'로 시작하는 계정은 여기 오신 것을 환영하지 않습니다.")
🎜>비밀번호 재설정 양식.
class SetPasswordForm
템플릿 RequestContext를 렌더링할 때 User 인스턴스이든 AnonymousUser 인스턴스이든 현재 로그인된 사용자가 템플릿에 저장됩니다. 변수 {{ user }}:
{% if user .is_authenticated %}
환영합니다, {{ user.username }}님, 로그인해 주셔서 감사합니다.
{% else %}
신규 사용자님, 환영합니다. 로그인해 주세요.
{% endif %}
이 변수는 다음과 같습니다. RequestContext는 사용되지 않습니다.
RequestContext 사용:
from django.shortcuts import render_to_response
from django.template import RequestContext
def some_view(request):
# ...
return render_to_response('my_template.html',
위는 Django 사용자 인증 시스템입니다. (2) 웹 요청의 인증 내용에 대한 자세한 내용은 다음과 같습니다. 내용은 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!