django里原生实现登录 注册 注销

登录 注册 注销在django里得原生实现

准备工作

  1. 创建用户表,创建用户子表,一般用户表包含用户名,密码,Email,头像,和is_delete(用以隐藏信息得),子表包含ticket 和 outtime过期时间,关联到用户表。
  2. 需要一个登录页面,和注册页面

注册

  1. 拿到页面传入得信息,并对密码进行加密操作
    • make_password
  2. 注意,拿图片是通过FILES方法拿到。这里要拿图片,需要做以下设置,
    • models,存放得图片指定地址(upload_to=’icon’)
    • settings,
      MEDIA_URL = ‘/media/’
      MEDIA_ROOT = os.path.join(BASE_DIR, ‘media’)
    • 工程urls,
      urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
    • html,form里,
      enctype=”multipart/form-data”
  3. 做一个判断,判断用户是否存在,判断邮箱是否存在,不存在就创建用户,存储到数据库里,并且返回到登录连接。

登录

  1. 拿到页面得用户,判断数据库里是否存在
  2. 然后拿到密码,判断密码是否相等,注意解密
    • check_password(未加密,加密)
  3. 创建ticket,创建过期时间,保存到数据库和页面之中
  4. 判断数据库里是否有这个用户的信息,如果有就更新ticket和过期时间,没有就新建。
    • out_time = datatime.now() + timedelta(days=1)
    • response = HttpResponseRedirect(‘//’)
    • response.set_cookie(‘ticket’,ticket,expires=out_time)

注销

  1. 删除网页里的ticket
    • response.delete_cookie(‘ticket’)

中间件的判断

  1. 函数方法 def process_request(self,request):
  2. 拿到令牌
  3. 如果存在令牌,说明登录过,那么就判断令牌是否过期
  4. 现在的时间和过期时间比较,需要将现在的时间utc一下,减少8个小时比较。
    • out_time = user.outtime.replace(tzinfo=None)
    • now_time = datetime.utcnow()
  5. 如果失效,那么删除页面里的用户信息,否则允许访问用户信息。

中间件的设置

  1. 创建工程目录同级的utils文件夹,里面新建一个UserAuthMiddleware.py的文件,里面写入需要的全局过滤的方法
  2. 在settings,MIDDLEWARE,添加路径’file.xx.Class’

猜你喜欢

转载自blog.csdn.net/zhangli709/article/details/80283755