Django后端处理数据与Vue通信及相关知识

登录界面后端设计

class LoginView(View):

    def post(self, request):
        username = request.GET.get("username")
        password = request.GET.get("password")
        try:
            user = SysUser.objects.get(username=username, password=password)
            jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
            jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
            # 将用户对象传递进去,获取到该对象的属性值
            payload = jwt_payload_handler(user)
            # 将属性值编码成jwt格式的字符串
            token = jwt_encode_handler(payload)
            roleList = SysRole.objects.raw(
                "SELECT id,name FROM sys_role WHERE id IN (SELECT role_id FROM sys_user_role WHERE user_id="
                + str(user.id) + ")")
            roles = ",".join([role.name for role in roleList])

            menuSet: set[SysMenu] = set()  # 转换为合集数据类型,内容不会重复
            for item in roleList:
                menuList = SysMenu.objects.raw(
                    "SELECT * FROM sys_menu WHERE id IN (SELECT menu_id FROM sys_role_menu WHERE role_id="
                    + str(item.id) + ")")
                for row in menuList:
                    # print(row.id, row.name)
                    menuSet.add(row)
            menuList: list[SysMenu] = list(menuSet)  # set转换为list
            sorted_menuList = sorted(menuList)  # 根据order_num排序
            # print(sorted_menuList)

        except Exception as e:
            print(e)
            return JsonResponse({'code': 500, 'info': '用户名或密码错误'})
        return JsonResponse({'code': 200, 'user': user_data, 'token': token, 'info': '登陆成功',
                             "menuList": serializerMenuList})


class SaveView(View):

    def post(self, request):
        data = json.loads(request.body.decode("utf-8"))  # 从前端获取信息并进行处理
        # print(data)
        if data['id'] == -1:  # 添加
            pass
        else:  # 修改
            obj_sysUser = SysUser(id=data['id'], username=data['username'],
                                  password=data['password'],
                                  avatar=data['avatar'], email=data['email'],
                                  phonenumber=data['phonenumber'],
                                  login_date=data['login_date'],
                                  status=data['status'], create_time=data['create_time'],
                                  update_time=data['update_time'],
                                  remark=data['remark'])
            obj_sysUser.update_time = datetime.now().date()
            obj_sysUser.save()
        return JsonResponse({'code': 200})

登录token设计:引入JWT前后端交互,Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC7519);
JWT就是一段字符串,用来进行用户身份认证的凭证,该字符串分成三段【头部、载荷、签证】。这个字符串就是用户的访问令牌(token),用户可以在后续的请求中使用这个令
牌来访问受保护的资源。

python中try语句:

try:
    # 尝试执行的代码块
    x = 1 / 0  # 这将引发一个ZeroDivisionError异常
except ZeroDivisionError:
    # 当检测到ZeroDivisionError异常时执行的代码
    print("不能除以零!")
except Exception as e:  # 捕获所有其他异常类型
    # 当其他异常发生时执行的代码
    print(f"发生了一个错误:{e}")
else:
    # 如果没有异常发生,执行的代码
    print("操作成功完成。")
finally:
    # 无论是否发生异常,都会执行的代码
    print("此代码块将始终执行。")
posted @ 2025-03-09 17:56  起名字太难0123  阅读(25)  评论(0)    收藏  举报