一、介绍
- 用户可在系统中记录自己的笔记,用户的数据被存储在云笔记平台;
- 用户和用户之间的数据为隔离存储(登陆后才能使用相关笔记功能,且只能查阅自己的笔记)
二、功能拆解
1、用户模块
- 注册:成为平台用户
- 登录:校验用户身份
- 退出登录:推出登录状态
2、笔记模块
- 查看笔记列表 -查
- 创建新笔记 -增
- 修改笔记 -改
- 删除笔记 -删
3、功能需求
(一)注册、登录、首页
(1)用户注册
(2)注册优化
# 哈希算法 - 给定明文,计算出一段定长的、不可逆的值 md5、sha-256
# 1、定长输出:不管明文输入长度为多少,哈希值都是定长的。md5-32位16进制
# 2、不可逆:无法反向计算出对应的明文
# 3、雪崩效应:输入改变,输出必然变
# 场景:1、密码处理 2、文件完整性校验
m = md5()
m.update(b'123456')
result = m.hexdigest()
(3)用户登录
(4)会话状态时间拉长
无论有没有勾选“记住用户名”选项,都要保存session,但若勾选了此选项,就多保存一份cookie。即Session存短期、Cookie存长期。
if request.method == 'GET':
# 检查登录状态,如果登录了,显示已登录
if request.session.get('username') and request.session.get('uid'):
return HttpResponse('已登录')
# 检查Cookies
c_username = request.COOKIE.get('username')
c_uid = request.COOKIE.get('uid')
if c_username and c_uid:
# 回写session
request.session['username'] = c_username
request.session['uid'] = c_uid
return HttpResponse('已登录')
return render(request,'user/login.html')
(5)首页
{% if request.session.username %}
欢迎 {{ request.session.username }}
<a href="">退出登录</a>
<a href="">进入笔记</a>
{% else %}
{% if request.COOKIES.username %}
欢迎 {{ request.COOKIES.username }}
<a href="">退出登录</a>
<a href="">进入笔记</a>
{% else %}
<a href="/user/login">登录</a>
<a href="/user/reg">注册</a>
{% endif %}
{% endif %}
(6)退出登录
(二)笔记
(1)检验登陆状态-装饰器
def check_login(fn): # fn即视图函数
def wrap(request,*args,**kwrags): # 参数是视图函数的参数
if 'username' not in request.session or 'uid' not in request.session:
# 检查cookie
c_username = request.COOKIES.get('username')
c_uid = request.COOKIES.get('uid')
if c_username and c_uid:
request.session['username'] = c_username
request.session['uid'] = c_uid
else:
return HttpResponseRedirect('/user/login')
return fn(request,*args,**kwrags)
return wrap
后续的增删改查操作均需校验登录状态
(2)列表页
(3)添加笔记页
(4)修改笔记页
(5)删除笔记
三、流程
- 创建项目
django-admin startproject tedu_note
- 配置常规项:语言、时区、禁用csrf、数据库配置
- 创建注册应用user和index、用户user模型类设计
- 完成登录、注册、首页的功能设计,详见二(一)
- 创建注册应用note、笔记Note模型类设计
- 完成笔记相关的功能设计,详见二(二)