关键:类视图的使用、用itsdangerous模块加密身份信息、使用celery异步发送邮件、使用 Django 的验证系统、redis作为缓存和session存储后端、login_required 装饰器、LoginRequired Mixin类的使用、redis存储浏览记录的流程...
仅用作个人笔记!
目录
1.注册
总体上,注册要做的就是:
- 验证注册信息合法性;
- 处理注册信息,保存用户到数据库
- 发送激活邮件,点击激活链接激活
(1)在templats目录下创建 register.html ,使用表单来提交注册信息;
(2)在 user/views.py 写一个视图 register 用来显示注册页面;
(3)在应用的urls中配置路径,为了反向解析,注意写上name:
(4)注意html文件中的静态文件路径,为了动态的生成路径,使用{% load static %}导入静态资源;
(5)视图register_handle处理提交过来的注册信息,进行注册处理。
使用all方法进行数据校验:python all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。元素除了是 0、空、None、False 外都算 True。
if not all([username, password, email]):
# 若数据不完整
return render(request, 'register.html', {'errmsg': '数据不完整'})
使用正则匹配校验邮箱:
import re
...
# 校验邮箱
if not re.match(r'^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email):
return render(request, 'register.html', {'errmsg': '邮箱格式不正确'})
用户注册前先校验用户名是否重复:
from user.models import User
...
# 校验用户名是否重复
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
# 用户名不存在
user = None
if user:
# 用户名已存在
return render(request, 'register.html', {'errmsg': '用户名已存在'})
用户注册:
# 进行业务处理: 使用Django认证系统 进行用户注册
user = User.objects.create_user(username, email, password)
user.is_active = 0 # 默认还没激活
user.save()
注册后返回应答,跳转首页(下面反向解析函数 reverse:goods应用下,name=index的视图)
return redirect(reverse('goods:index'))
(6)两个视图使用同一个url
上面视图register_handle和视图register 使用的是两个地址,完全没有必要(登录页和登录处理同理)。
方法:
先在html表单提交时,form 的 action="页面自身" ;
在视图register 中,通过请求方式来判断:if request.method == 'GET'显示注册页面,否则就是注册数据处理。
基于类的视图 使用Python 对象实现视图,提供了除函数视图之外的另一种方式。它们不能替代基于函数的视图,但与基于函数的视图相比,它们是有某些不同和优势的。
基于类的视图: 概览 | 内置显示视图 | 内置编辑视图 | 使用混入 | API 参考 | 扁平化索引