美文网首页
用户登录系统

用户登录系统

作者: wangfp | 来源:发表于2017-09-30 00:13 被阅读0次

    在构建Django的注册,登录/登出系统时,核心是django.contrib.auth.models.User
    在自己创建注册MTV框架后,登录、登出、修改密码等操作Django提供了现成的MV框架(需要自己创建模板)


    • 注册

      注册的表单可以继承django内建的django.contrib.auth.forms.UserCreationForm,该表单已经实现对两次输入的密码确认等方法
      class UserForm(UserCreationForm):
          error_messages = {
            'password_mismatch': '两次输入的密码不相同。',
        }
          username = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}),
                                   label='用户名', help_text="只能包含字母,数字及‘@’、‘.’、‘+’、‘-’、‘_’符号")
          email = forms.EmailField(widget=forms.EmailInput(attrs={'class': 'form-control'}),
                                 label='邮箱地址', required=False, help_text='(选填)')
          password1 = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control'}),
                                    label='密码', strip=False,
                                    help_text=password_validation.password_validators_help_text_html())
          password2 = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control'}),
                                    label='确认密码', strip=False,
                                    help_text='请确保与上次输入的密码一致')
          
          # Meta类也继承自UserCreateForm类中的Meta类
          class Meta(UserCreationForm.Meta):
              fields = ('username', 'email')
      
      视图函数按照常见的表单提交函数的形式编写即可

    登录/登出等MTV框架

    Django已经在django.contrib.auth.urls中提供了URLconf,为了使用该URLconf,在自己应用urls.py(或者settings目录中的urls.py中)将该URLconf包含进来

    from django.conf.urls import url, include
    
    urlpatterns = [
        url(r'^', include(django.contrib.auth.urls)),
    ]
    

    这样就可以使用Django内建的登录/登出框架了
    需要注意的是,该内建框架只提供了M(数据模型)和V(视图函数),因此需要自己创建T(模板)


    但直接使用内建的URLconf无法控制模板等的表现,因此最好还是直接使用URLconf的视图函数

    • 登录

      django.contrib.auth.urls的源码中可以看到login使用的视图函数(视图类)是LoginView

      url(r'^login/$', views.LoginView.as_view(), name='login')
      

      django.contrib.auth.views中是同时存在登录的视图函数(login())和视图类(LoginView);但本质上,login()函数内部直接使用了LoginView类,因此在URLconf中直接使用LoginView即可

      LoginView视图类中的类属性:
      • template_name:LoginView视图类使用的模板名称,默认是registration/login.html
      • redirect_field_name:该名称保存着成功登陆后转向的网址,通过GET方法提交,默认保存在name=next
      • authentication_form/form_class:这两个属性都可保存LoginView视图类使用的数据模型,默认为django.contrib.auth.forms.AuthenticationForm
      • extra_context:额外的信息
      • redirect_authenticated_user:布尔型变量,若为True,则成功登陆后的用户会转向其他页面,默认为False

      如果在用户成功登陆时未提供next变量(即转向的页面),django会转向settings.LOGIN_REDIRECT_URL页面(默认为/accounts/profile/
      上述的所有LoginView类属性都可以通过as_view()以关键字参数的形式设置

      url(r'^login/$',
          auth_views.LoginView.as_view(template_name='main/login.html',
                                      # LoginForm继承自AuthenticationForm
                                       form_class=LoginForm,
                                       redirect_authenticated_user=True), name='login')
      
    • 登出

      django.contrib.auth.urls中logout使用的视图函数是LogoutView

      url(r'^logout/$', views.LogoutView.as_view(), name='logout')
      

      同login一样,django.contrib.auth.views中同时存在视图类(logout())和视图类(LogoutView());而logout()函数本质上直接使用了LogoutView类,因此直接使用LogoutView类即可

      LogoutView类的类属性:
      • next_page:退出登录后页面的转向,在settings.LOGOUT_REDIRECT_URL中设置
      • template_name:退出登录的目标页面,默认为/registration/logged_out.html(优先级没有next_page高)
      • redirect_field_name:保存用户在进行退出登录操作时提交的转向页面的名称,默认为name=next(优先级高于next_page)
      • extra_context:额外信息

      上述属性均可以在LogoutViewas_view()中以关键字参数的形式进行重新设置


    • 修改密码

      django.contrib.auth.urls中通过PasswordChangeView视图类来进行密码的修改

      PasswordChangeView类的类属性:
      • template_name:修改密码时使用的模板,默认为registration/password_change_form.html
      • success_url:密码成功修改后转向的页面,默认为password_change_done视图
      • form_class:修改密码使用的数据模型,默认为PasswordChangeForm(该模型必须含有user关键字)

      未登录用户加载password_change页面时,会自动跳转到登录页面(由settings.LOGIN_URL设置)(因为PasswordChangeView类中的方法由login_required装饰)

    • 成功修改密码

      PasswordChangeDoneView


    PasswordResetView等

    待续。。。

    相关文章

      网友评论

          本文标题:用户登录系统

          本文链接:https://www.haomeiwen.com/subject/jepwextx.html