• django-auth2


    init.py

    0.authenticate	-->1.返回一个auth过的user object
    1.login			-->1.将user object 存到session;2.并且request.user=user
    2.logout		-->1.刷新session;2.request.user=AnonymousUser
    

    base_user.py

    '''定义auth所用的BaseUserManager,AbstractBaseUser'''
    具体密码的hash参考:auth.hasers.py
    
    BaseUserManager
    	normalize_email
    		#规范化邮箱
    AbstractBaseUser
    	save
    	
    	set_password
    		#设置密码
    	check_password
    		#检查密码
    	is_authenticated
    		#是否通过authenticate
    

    models.py

    '''auth相关的模型'''
    主要有:User(成功用户)和AnonymousUser(匿名用户)
    1.User继承关系如下:
    
    AbstractBaseUser					PermissionsMixin
    	fields=(password,last_login)		fields=(is_superuser,groups,user_permissions)
    ^
    |
    |
    AbstractUser(AbstractBaseUser, PermissionsMixin)
    	fields=(username,first_name,last_name,email,is_staff,is_active,date_joined)
    	objects = UserManager()#参考下面
    ^
    |
    |
    User(AbstractUser)
    
    2.UserManager如下:
    
    BaseUserManager
    ^
    |
    |
    UserManager(BaseUserManager)
    	_create_user
    		#抽象出来公共方法
    	create_user
    		#创建用户
    	create_superuser
    		#创建超级用户
    
    3.AnonymousUser:设置一些非值
        id = None
        pk = None
        username = ''
        is_staff = False
        is_active = False
        is_superuser = False
    
    
    

    views.py

    实现如下功能:
        path('login/', views.LoginView.as_view(), name='login'),
        path('logout/', views.LogoutView.as_view(), name='logout'),
    
        path('password_change/', views.PasswordChangeView.as_view(), name='password_change'),
        path('password_change/done/', views.PasswordChangeDoneView.as_view(), name='password_change_done'),
    
        path('password_reset/', views.PasswordResetView.as_view(), name='password_reset'),
        path('password_reset/done/', views.PasswordResetDoneView.as_view(), name='password_reset_done'),
        path('reset/<uidb64>/<token>/', views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
        path('reset/done/', views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
        
    1.登录视图
    
    AuthenticationForm
    	clean
    		#校验username和password
    		authenticate返回给user_cache
    	
    		
    										ProcessFormView(View)	FormMixin(ContextMixin)
    											#实现具体的get,post方法
    											get
    												返回login.html
    											post
    												具体的login逻辑
    												form.is_valid 执行form_class的clean方法
    										^
    										|
    				TemplateResponseMixin	BaseFormView(FormMixin, ProcessFormView)
    										^
    										|
    SuccessURLAllowedHostsMixin				FormView(TemplateResponseMixin, BaseFormView)
    ^
    |
    LoginView(SuccessURLAllowedHostsMixin, FormView)
    	dispatch
    		#重写dispatch
    		1.用户通过认证redirect->?next=后跟的url
    		2.执行父类的dispatch
    		
    	form_valid
    		#重写了FormMixin的form_valid方法
    		#通过校验执行login
    		#HttpResponseRedirect-->next
    		
    2.logout视图
    LogoutView(SuccessURLAllowedHostsMixin, TemplateView)
    	dispatch
    		#重写dispatch
    		#1.logout
    		#2.跳转next_page或者返回logout页面
    		
    3.修改密码视图
    SetPasswordForm
    	clean_new_password2
    		#校验new_password1和new_password2是否相等
    	save
    		#user.set_password
    		#user.save()
    
    ^
    |
    PasswordChangeForm(SetPasswordForm)
    	clean_old_password
    		#校验旧密码是否正确
    		user.check_password(old_password)
    
    
    PasswordChangeView(PasswordContextMixin, FormView)
    	dispatch
    		#更新成功跳转password_change_done
    
    	form_valid
    		#更新密码
    		#更新session_auth_hash
    		
    4.重新设置密码流程
    PasswordResetView(发送eamil)->
    PasswordResetDoneView(返回done页面)->等待用户点击url->
    PasswordResetConfirmView 重新输入密码,跳转到login-url-->
    PasswordResetCompleteView()
    
  • 相关阅读:
    SAP系统管理中常见问题解答(转载)
    STMS传输队列中的请求状态一直是Running不能结束
    通过Tcode查找Badi或者客户出口
    通过LDB_PROCESS函数使用逻辑数据库
    ABAP读取长文本的方法
    SAP增强Enhancement
    ABAP开发顾问必备:SAP ABAP开发技术总结[转载]
    SAP事件 Event Flow(转载)
    jQuery中的text()、html()和val()以及javaScript中的innerText、innerHTML和value
    js访问对象属性的方式“.”与“[]”的区别
  • 原文地址:https://www.cnblogs.com/liuer-mihou/p/13925464.html
Copyright © 2020-2023  润新知