登录 注册 注销在django里得原生实现
准备工作
- 创建用户表,创建用户子表,一般用户表包含用户名,密码,Email,头像,和is_delete(用以隐藏信息得),子表包含ticket 和 outtime过期时间,关联到用户表。
- 需要一个登录页面,和注册页面
注册
- 拿到页面传入得信息,并对密码进行加密操作
- make_password
- 注意,拿图片是通过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”
- 做一个判断,判断用户是否存在,判断邮箱是否存在,不存在就创建用户,存储到数据库里,并且返回到登录连接。
登录
- 拿到页面得用户,判断数据库里是否存在
- 然后拿到密码,判断密码是否相等,注意解密
- check_password(未加密,加密)
- 创建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’
本文详细介绍了如何在Django中实现用户登录、注册与注销功能,包括用户表及子表的设计、图片上传配置、密码加密处理、ticket机制的实现及中间件的使用。
375

被折叠的 条评论
为什么被折叠?



