美文网首页
Django天天生鲜项目

Django天天生鲜项目

作者: 简简单单de生活 | 来源:发表于2018-02-20 16:26 被阅读0次

    一.项目的整体架构

    二.用户模块

    用户注册思路总结:

    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全部返回为空。

    相关文章

      网友评论

          本文标题:Django天天生鲜项目

          本文链接:https://www.haomeiwen.com/subject/zsygtftx.html