Django天天生鲜项目

2018-02-20  本文已影响0人  简简单单de生活

一.项目的整体架构

二.用户模块

用户注册思路总结:

  1. 获取用户输入的信息(username,password,email)
  2. 校验数据(数据的完整性,emai邮箱格式是否正确)
  3. 查看数据库中是否已经存在用户输入的用户名,用get函数。
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            # 用户名不存在
            user = None  # 重点在这里:小技巧
        if user:
            # 用户名已存在
            return render(request, 'register.html', {'errmsg': '用户名已存在'})
  1. 将用户信息插入到数据库。用create_user函数。
    • create_user函数的参数:username、password、email
    • 认证系统默认的参数:is_active=True、is_staff=False、is_superuser=False
    • 该函数将password用hash算法加密后存储到数据库中
  2. 将is_active的值设置为0,保存。为了用邮箱激活。
  3. 准备发送邮件的参数,用celery发送邮件。
    • 先给用户的id进行加密,先导包from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
        # 参数1:随便给一个字符串用来加密;参数2: 加解密的过期时间
        serializer = Serializer(settings.SECRET_KEY,30)    
        # 将用户id加密,返回一个bytes类型,需要转换为字符串类型
        token = serializer.dumps(user.id).decode()  
    
    • 在settings中配置celery的相关信息。
    • 然后自定义一个celery任务函数,调用django中的send_email()函数。
    • 最后用delay函数发送任务函数。
  4. 将注册信息保存到session中。
    • 用django.contrib.auth包中的login方法,login有两个参数,request和user,user来自authenticate方法。
    • 用login之前必须使用authenticate方法验证数据库中是否有用户信息。否则会抛出异常。
  5. 重定向到首页

用户登录思路总结:

  1. 获取用户输入的数据:username,password,allow
  2. 校验数据
  3. 查看数据库中是否包含账号和密码。user = authenticate(username=username,password=password)
  4. 判断user是否为空,和账号是否激活。
  5. user不为空,账号被激活:
    • login(request,user)方法将用户信息存储到session中。
    • 判断allow记住用户名是否为on,是:将username放到cookie中;否:将cookie中的username删除。
    • 跳转到首页
    • 设置index.html的导航栏。user.is_authenticated判断用户是否登入,user.username取出用户名。
  6. 否则,返回错误信息。

显示登录页面思路总结:

  1. 判断cookie中是否含有username。
  2. 含有:返回username,将checked的值设置为checked并返回。
  3. 没有:username和checked全部返回为空。
上一篇下一篇

猜你喜欢

热点阅读