码迷,mamicode.com
首页 > 其他好文 > 详细

10-邮箱注册登录文字总结 | Django

时间:2017-12-11 21:10:48      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:重置密码   认证   样式   修改密码   verify   隐藏   密码   迁移   项目   

# 邮箱注册登录流程
    首先,需要新建一个users应用,来处理用户相关操作,包括登录注册等权限操作,
以及用户中心的相关操作;然而,django自带的user表中可能不足以满足我们项目所需要
的字段,所以需要重载django内置的User表,需要建立一个模型类UserProfile,继承
auth.models下的AbstractUser类,自己再添一些需要的字段,最重要的是要在settings.py
文件中添加配置,AUTH_USER_MODEL="users.UserProfile"(应用名+模型类),再迁移生成数
据库表;

    接着,邮箱注册;
    最重要的是邮箱激活(is_active):在后台生成若干个随机字符code,保存到数据库表中,并且将code
格式化输出到邮件内容中,发送给用户点击激活;如何做到在邮箱中点击激活这个code呢?
    1.设置urlconf,url(r^active/(?P<active_code>.*), RegisterView.as_view(), name=注册),
    那么,我们在发送邮件的内容中就需要添加这样式的激活链接:
    点击激活:http://127.0.0.1:8000/active/...,在用户点击跳转这个链接的时候,后端urlonf
    就会将active_code当作参数传到对应的视图类中,通过传入的激活码,在EmailVerify表中查找
    对应的邮箱,通过邮箱找到User表中的is_active字段,并修改;从而实现激活状态;
    2.发送邮箱的过程;通过django自带的mail模块中的send_mail()或者send_mass_masil()函数来实现;
    django后端默认的backend是smtp服务,所以只要在第三方邮箱入口打开smtp服务,在settings.py
    文件中添加一些配置,就可以通过一个邮箱发送的函数来发送激活邮件,主要的参数是title,body
    以及谁发的邮件,和对方的邮件列表;这里需要注意的是,需要传入一个发送目的,比如注册发送,
    修改密码发送等;那么构造的发送邮件的函数就可以自己判断,从而对不同用户操作,发出不同的内容
    的邮件;
    3.当然所有form表单提交视图操作都需要创建一个form来验证字段,验证通过后再做邮箱发送操作;
    4.判断用户名是否已经存在;在表单中获取用户名(邮箱)之后,需要先对邮箱是否存在进行判断;
    
    接着,登录;
    通过django内置的authenticate()方法与login()方法来实现用户登录;
    1.form表单验证;
    2.将POST中获取提交的数据,通过authenticate()方法来认证用户名与密码;
      这里需要注意的是,这次登录时通过邮箱的,那么网站可以还有手机注册的用户,
      我们是通过email或者tel来保存的,并不是username;所以,登录的时候,需要
      做一个的操作;但是,django的authenticate()只对用户名密码进行验证,就
      需要自定义authenticate()这个认证方法了:
          authenticate()内部先通过用户名查找到user对象,再通过check_password()检验这个对
      象密码是否存在,最后返回一个user;
          所以,我们需要对用户查找user对象这个步骤做操作,利用Q使得查询条件:
      Q(username=username)|Q(email=username)表示输入的用户名可以在username字段中找到,
      或者在email字段中找到即可;
          自定义authenticate()需要重载settings.py中的AUTHENTICATION_BACKENDS变量,
      构造的CustomBackend需要继承ModelBackend这个类;
    3.认证通过后login()登录;
    
    最后,找回密码;
    1.点击login.html页面的找回密码的链接,跳转到输入用户名与验证码的页面(需要表单验证),
      表单验证通过之后,发送重置码reset_code到邮箱,通过urlconf携带的参数传给重置密码
      视图类;
    2.上面表单提交之后跳转重置密码页面,包含pwd1与pwd2两个字段,这个跳转过程用get()来处理;
      但是,当前页面的表单提交的action就不能用同样的视图类了,因为get()需要接受一个重置码,
      action={% url .. ...code??? %}
      所以,我们重新写一个重置密码的视图类,通过post()来处理表单;
      又有一个问题,当前表单的验证只有pwd1与pwd2两个字段,没法获取user对象进行操作;
    3.在get()方法中传一个email的值作为上下文传到前端去,写到一个隐藏的input框中;
      那么post()就可以从input框中获取email值,从而获取user对象了;

 

10-邮箱注册登录文字总结 | Django

标签:重置密码   认证   样式   修改密码   verify   隐藏   密码   迁移   项目   

原文地址:http://www.cnblogs.com/pymkl/p/8024886.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!