auth模块实现功能
通过入口url.py文件中定义的urlpatterns可以看出,auth模块共定义了8个url,分别用于:
- 登录
注销
修改密码
修改密码完成
密码重置
- 密码重置完成
- 密码重置验证
- 密码重置结束 ```
- from django.conf.urls import url
- from django.contrib.auth import views
urlpatterns直接是一个list即可
- urlpatterns = [
- url(r’^login/$’, views.login, name=’login’),
- url(r’^logout/$’, views.logout, name=’logout’),
- url(r’^password_change/$’, views.password_change, name=’password_change’),
- url(r’^password_change/done/$’, views.password_change_done, name=’password_change_done’),
- url(r’^password_reset/$’, views.password_reset, name=’password_reset’),
- url(r’^password_reset/done/$’, views.password_reset_done, name=’password_reset_done’),
- url(r’^reset/(?P
[0-9A-Za-z_-]+)/(?P [0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$’, - views.password_reset_confirm, name=’password_reset_confirm’),
- url(r’^reset/done/$’, views.password_reset_complete, name=’password_reset_complete’),
- ]
以下仅对登陆, 注销进行了学习.python
class SuccessURLAllowedHostsMixin: success_url_allowed_hosts = set()
def get_success_url_allowed_hosts(self):return {self.request.get_host(), *self.success_url_allowed_hosts}
class LoginView(SuccessURLAllowedHostsMixin, FormView): “”” Display the login form and handle the login action. “”” form_class = AuthenticationForm authentication_form = None redirect_field_name = REDIRECT_FIELD_NAME template_name = ‘registration/login.html’ redirect_authenticated_user = False extra_context = None
@method_decorator(sensitive_post_parameters())@method_decorator(csrf_protect)@method_decorator(never_cache)def dispatch(self, request, *args, **kwargs):if self.redirect_authenticated_user and self.request.user.is_authenticated:redirect_to = self.get_success_url()if redirect_to == self.request.path:raise ValueError("Redirection loop for authenticated user detected. Check that ""your LOGIN_REDIRECT_URL doesn't point to a login page.")return HttpResponseRedirect(redirect_to)return super().dispatch(request, *args, **kwargs)def get_success_url(self):url = self.get_redirect_url()return url or resolve_url(settings.LOGIN_REDIRECT_URL)def get_redirect_url(self):"""Return the user-originating redirect URL if it's safe."""redirect_to = self.request.POST.get(self.redirect_field_name,self.request.GET.get(self.redirect_field_name, ''))url_is_safe = url_has_allowed_host_and_scheme(url=redirect_to,allowed_hosts=self.get_success_url_allowed_hosts(),require_https=self.request.is_secure(),)return redirect_to if url_is_safe else ''def get_form_class(self):return self.authentication_form or self.form_classdef get_form_kwargs(self):kwargs = super().get_form_kwargs()kwargs['request'] = self.requestreturn kwargsdef form_valid(self, form):"""Security check complete. Log the user in."""auth_login(self.request, form.get_user())return HttpResponseRedirect(self.get_success_url())def get_context_data(self, **kwargs):context = super().get_context_data(**kwargs)current_site = get_current_site(self.request)context.update({self.redirect_field_name: self.get_redirect_url(),'site': current_site,'site_name': current_site.name,**(self.extra_context or {})})return context
class LogoutView(SuccessURLAllowedHostsMixin, TemplateView): “”” Log out the user and display the ‘You are logged out’ message. “”” next_page = None redirect_field_name = REDIRECT_FIELD_NAME template_name = ‘registration/logged_out.html’ extra_context = None
@method_decorator(never_cache)def dispatch(self, request, *args, **kwargs):auth_logout(request)next_page = self.get_next_page()if next_page:# Redirect to this page until the session has been cleared.return HttpResponseRedirect(next_page)return super().dispatch(request, *args, **kwargs)def post(self, request, *args, **kwargs):"""Logout may be done via POST."""return self.get(request, *args, **kwargs)def get_next_page(self):if self.next_page is not None:next_page = resolve_url(self.next_page)elif settings.LOGOUT_REDIRECT_URL:next_page = resolve_url(settings.LOGOUT_REDIRECT_URL)else:next_page = self.next_pageif (self.redirect_field_name in self.request.POST orself.redirect_field_name in self.request.GET):next_page = self.request.POST.get(self.redirect_field_name,self.request.GET.get(self.redirect_field_name))url_is_safe = url_has_allowed_host_and_scheme(url=next_page,allowed_hosts=self.get_success_url_allowed_hosts(),require_https=self.request.is_secure(),)# Security check -- Ensure the user-originating redirection URL is# safe.if not url_is_safe:next_page = self.request.pathreturn next_pagedef get_context_data(self, **kwargs):context = super().get_context_data(**kwargs)current_site = get_current_site(self.request)context.update({'site': current_site,'site_name': current_site.name,'title': _('Logged out'),**(self.extra_context or {})})return context
```
