django里原生实现登录 注册 注销
其他
2018-05-24 17:08:41
阅读次数: 2
登录 注册 注销在django里得原生实现
准备工作
- 创建用户表,创建用户子表,一般用户表包含用户名,密码,Email,头像,和is_delete(用以隐藏信息得),子表包含ticket 和 outtime过期时间,关联到用户表。
- 需要一个登录页面,和注册页面
注册
- 拿到页面传入得信息,并对密码进行加密操作
- 注意,拿图片是通过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”
- 做一个判断,判断用户是否存在,判断邮箱是否存在,不存在就创建用户,存储到数据库里,并且返回到登录连接。
登录
- 拿到页面得用户,判断数据库里是否存在
- 然后拿到密码,判断密码是否相等,注意解密
- 创建ticket,创建过期时间,保存到数据库和页面之中
- 判断数据库里是否有这个用户的信息,如果有就更新ticket和过期时间,没有就新建。
- out_time = datatime.now() + timedelta(days=1)
- response = HttpResponseRedirect(‘//’)
- response.set_cookie(‘ticket’,ticket,expires=out_time)
注销
- 删除网页里的ticket
- response.delete_cookie(‘ticket’)
中间件的判断
- 函数方法 def process_request(self,request):
- 拿到令牌
- 如果存在令牌,说明登录过,那么就判断令牌是否过期
- 现在的时间和过期时间比较,需要将现在的时间utc一下,减少8个小时比较。
- out_time = user.outtime.replace(tzinfo=None)
- now_time = datetime.utcnow()
- 如果失效,那么删除页面里的用户信息,否则允许访问用户信息。
中间件的设置
- 创建工程目录同级的utils文件夹,里面新建一个UserAuthMiddleware.py的文件,里面写入需要的全局过滤的方法
- 在settings,MIDDLEWARE,添加路径’file.xx.Class’
转载自blog.csdn.net/zhangli709/article/details/80283755