实现注册的基本逻辑:
1,注册页面
- 注意:注册页面需要静态文件的支持,另外注册页面是基础基类的,
- 1,url,路由系统,
- 2,views,视图系统,还是使用类视图,里面有很多的函数,
2,views.py文件
- get函数,返回浏览器注册页面,
- post函数,
- 这个函数处理四个事情:#web开发的通用的一个流程就是这样的,
- 1,接收数据
- 2,进行数据校验:用户已存在的时候要做异常处理,注册失败的时候要做异常处理,
- 3,进行业务处理,进行用户注册,创建一条用户记录,可以使用django的认证系统,提供了一个创建用户的方法,
- user = User.objects.create_user(username, email, password)
- 4,返回应答,使用反向解析返回首页,valid:有效的 pattern:模式
######################################################################
激活邮件的设计思路
- 需求背景:
- 用户注册之后,给用户发送一个激活邮件,提示用户去打开邮件,
- 然后用户点击这个激活邮件之后激活账户,点击激活连接要跳转到登陆页面
- 如果链接过期了之后,实际应该返回一个页面,然后点击一个地方,可以再发一个激活连接,
- 代码设计,
- 发送激活邮件,包含激活链接,每一个人的都应该是不一样的,包含用户的身份信息,如何设计??
- 设计成这样一个连接,127.0.0.1:8000/user/active/1(id)
- 这样发了这个邮件,我就可以获取到最后的id,我收到了邮件,就知道你在激活,我就可以去修改数据库了,
- 但是有些人会捣乱,不停的修改id去访问,所以怎么办?就要id加密
- 加密:
- 引入一个包:from itsdangerous import TimedJSONWebSignatureSerializer as Serializer,这个这个包加密,
- 除了加密之外,还可以设置过期时间,时间过了连接失效,就不能激活了,
- 发送邮件的配置:
- 加密是在注册的函数,解密的时候是一个单独的函数,解密函数,
问题:
- 发邮件的流程需要优化,因为这是一个阻塞型的,因为邮件没发完就要等待,用户体验不好,怎么解决?
- 异步执行任务,python中有一个celery的包,可以执行异步的执行任务,比如发送邮件,上传文件,下载文件,这种耗时的操作都可以使用celery
##################################################################
好了,task启动成功了,
哈哈,我现在已经把邮件发出去了,哈哈!!!!
总结:
这一个问题,我太痛苦了,专门系统学习了Linux,git,redis,还有各种坑,装了很多的东西,包括完整的开发环境,花费了我4天的时间,
不过总的来讲还是非常值得的,
######################################################################################################
用户登录:
login类里面,继续写post函数,
- 要做四个事情,
- 接受数据
- 校验数据
- 业务处理,登陆校验,使用django的认证系统,user = authenticate(username=username, password=password)
- 返回应答,
配置redis,作为django缓存和session存储后端,
- 如果你不做配置,session是放在数据库中,
- 但是每次都到数据库中读写,速度是比较慢的,所以不能使用默认的保存session的方式,我们要有redis数据库,
- 我们需要用到一个包,django-redis,
- 怎么使用?
- 要配置,
-
View Code
# Django的缓存配置,默认缓存是在本机内存中 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", 'LOCATION': 'redis://:###@192.168.80.129:6379/5', "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } } # 配置session存储,默认的登录状态是保存在django数据库中的session表中 SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "default"