Django实战项目-学习任务系统-用户注册

接着上期代码框架,开发第2个功能,用户注册,在原有用户模型基础上,增加一个学生用户属性表,用来关联学生用户的各种属性值,这个属性表是参考网络小说里系统属性值设计的,方便直观了解用户的能力高低,等级以及积分值等信息。

第一步:编写第二个功能-用户注册

1,编辑模型文件:

./mysite/study_system/models.py:

class StudyUserAttribute(models.Model):
    user = models.OneToOneField(StudyUser, on_delete=models.CASCADE, primary_key=True, verbose_name='用户属性ID')
    study_level = models.IntegerField(verbose_name='学习级别: 1-小学,2-初中,3-高中,4-本科,5-硕士,6-博士,7-博士后')
    intelligence = models.IntegerField(verbose_name='智力')
    memory = models.IntegerField(verbose_name='记忆力')
    diligence = models.IntegerField(verbose_name='勤奋力')
    physical_fitness = models.IntegerField(verbose_name='体能')
    total_points = models.IntegerField(verbose_name='总积分')
    other_subjects = models.CharField(max_length=100, verbose_name='其他学科属性')
    notes = models.TextField(verbose_name='备注')
    update_time = models.DateTimeField(verbose_name='更新时间')

    class Meta:
        verbose_name = '学生用户属性表'
        verbose_name_plural = '学生用户属性表'
        # 用于模型的数据库表的名称
        db_table = "study_user_attributes"

    def __str__(self):
        return str(self.user)

2,编辑urls配置文件:
./mysite/study_system/urls.py

urlpatterns = [
    # 登录首页url
    path('', views.index, name='index'),
    path('login/', LoginView.as_view(), name='login'),
    # 登录主页url
    path('home/', views.home, name='home'),
    # 注册url
    path('register/', views.register, name='register'),
]

3,编辑视图文件:
./mysite/study_system/views.py

def register(request):
    '''
    @方法名称: ajax请求, 表单视图,注册用户
    @作    者: PandaCode辉
    @weixin公众号: PandaCode辉
    @创建时间: 2023-10-10
    '''
    # 初始化响应容器
    rsp_dict = {"result": "error", "errorMsg": "系统错误"}
    # 是否ajax请求
    if request.is_ajax():
        try:
            rest = request.POST
            # 角色:1: 系统管理员;2: 辅导员;3: 学生;4-自导自学
            role = rest['role']
            username = rest['username']
            password = rest['password']
            email = rest['email']
            # print('email : '+str(email))
            # 根据邮箱查询校验账号是否存在
            exists = StudyUser.is_email_exists(email)
            # print('exists : '+str(exists))
            if exists:
                # 用户注册校验失败,显示错误信息
                rsp_dict["errorMsg"] = "该邮箱已经存在注册用户,不能重复注册."
                # 错误返回json数据格式
                return JsonResponse(rsp_dict)
            # 手机号初始为空
            phone_num = ""
            # 辅导员用户ID,学生用户必输
            parent_id = 0
            # 今天
            # UTC格式当前时区时间
            t = time.localtime()
            work_date = time.strftime("%Y-%m-%d %H:%M:%S", t)
            print('当前日期时间:' + str(work_date))
            # 3: 学生,需要关联对应辅导员账号
            if role == '3':
                # 根据辅导员邮箱查询辅导员的用户信息
                parent_email = rest['parent_email']
                parent_user = StudyUser.get_user_by_email(parent_email)
                # print('parent_user : '+str(parent_user))
                if parent_user:
                    # 找到了与邮箱匹配的用户,访问用户的属性,辅导员用户ID
                    parent_id = parent_user.user_id
                else:
                    # 没有找到与邮箱匹配的用户,执行相应的逻辑
                    # 用户注册校验失败,显示错误信息
                    rsp_dict["errorMsg"] = "没有找到与辅导员邮箱匹配的用户,注册失败."
                    # 错误返回json数据格式
                    return JsonResponse(rsp_dict)

            # 创建用户对象并保存到数据库
            user = StudyUser(role=role, username=username, password=password,
                             email=email, phone_num=phone_num, parent_id=parent_id,
                             created_time=work_date, update_time=work_date)
            # 保存用户表数据
            user.save()
            # 3: 学生;4-自导自学'。增加属性表数据
            if role in ('3', '4'):
                # 创建用户对象并保存到数据库,首次注册,所有属性值初始化为0或空
                userAttribute = StudyUserAttribute(user=user, study_level=1, intelligence=0, memory=0,
                                                   diligence=0, physical_fitness=0,
                                                   total_points=0, other_subjects="",
                                                   notes="", update_time=work_date)
                # 保存属性表数据
                userAttribute.save()
            # 注册成功
            rsp_dict["result"] = "success"
            rsp_dict["errorMsg"] = "注册成功,请登录."
            # 成功返回json数据格式
            return JsonResponse(rsp_dict)
        except Exception as e:
            rsp_dict["errorMsg"] = "注册用户失败."
            # 错误返回json数据格式
            return JsonResponse(rsp_dict)
    else:
        # 跳转到注册页面
        return render(request, "study_system/register.html", rsp_dict)

4,编辑页面模板代码:

4.1. 用户注册页面
./mysite/study_system/templates/study_system/register.html




    
    
    
    study system
    
    
    

    


注册用户

{# 在Django中提交数据到后端服务的时候,为了安全,要使用CSRF(跨站请求伪造)。#} {% csrf_token %}

第二步:运行测试-用户注册功能

1,双人模式

1.1,先注册一个辅导员用户

  作为老师/辅导员/家长等角色,用来发布任务,配置定时任务,维护兑换物品,发放奖励物品等,监督管理学生作用,因为没有真正的智能系统,需要人工监管学生的行为规范,督促学生完成学习任务,一个辅导员可以关联多个学生用户。

Django实战项目-学习任务系统-用户注册_第1张图片

1.2,再注册一个学生用户

  作为学生角色,用来接收对应辅导员和系统发布的任务,完成任务,获取积分,兑换物品,扣除积分,拥有属性表值等,学生用户必须绑定关联一个辅导员用户。

Django实战项目-学习任务系统-用户注册_第2张图片

1,单人模式

  自己发布任务给自己,自己学习完成任务,自己维护兑换物品,自己兑换奖励物品,没有其他人监督管理,该模式需要较强的自学能力。

Django实战项目-学习任务系统-用户注册_第3张图片

-------------------------------------------------end -------------------------------------------------

你可能感兴趣的:(Python,django,python)