import platform import uuid import hashlib import requests # 常量配置 ACTIVATE_URL = "http://activate.hzsystems.cn/api/activate_machine" PACKAGE_NAME = "hertz_studio_django_xxx" def get_machine_id() -> str: """生成机器码。 根据当前系统信息(平台、架构、MAC地址)生成唯一机器码, 使用 SHA256 取前16位并转大写,前缀为 HERTZ_STUDIO_。 """ system_info = f"{platform.platform()}-{platform.machine()}-{uuid.getnode()}" return 'HERTZ_STUDIO_' + hashlib.sha256(system_info.encode()).hexdigest()[:16].upper() def request_verify_machine_code(package_name: str, machine_code: str): """请求后端校验机器码。 向授权服务器提交包名和机器码,返回 JSON 响应; 如果网络异常,返回 None。 """ try: resp = requests.post( ACTIVATE_URL, json={"package_name": package_name, "machine_code": machine_code}, timeout=10, ) return resp.json() except requests.RequestException as e: print(f"机器码验证请求失败: {e}") return None def verify_machine_license() -> None: """运行时验证授权。 在 Django 应用启动时执行授权验证:打印提示、生成机器码并请求校验; 校验失败则抛出 RuntimeError 阻止应用启动。 """ machine_id = get_machine_id() print(f"您的机器码: {machine_id}, 当前包名: {PACKAGE_NAME}") print("请将此机器码发送给作者进行注册。") resp = request_verify_machine_code(PACKAGE_NAME, machine_id) if resp and resp.get("success") is True: print("=" * 60) print("机器码验证成功!") print("=" * 60) return print("=" * 60) print("机器码验证失败!请联系作者获取运行权限。") print("=" * 60) raise RuntimeError("Hertz Xxxxx license verification failed")