当前位置: 首页 > news >正文

做app的网站有哪些功能吗邢台龙天网络科技有限公司

做app的网站有哪些功能吗,邢台龙天网络科技有限公司,图文广告公司取名,三亚建设信息网站Python系统编程大揭秘#xff1a;掌握操作系统接口、进程管理与系统信息 前言 在当今软件开发领域#xff0c;系统编程是一项至关重要的技能#xff0c;尤其是在涉及到操作系统接口、进程管理以及系统信息的处理时。Python作为一门强大而灵活的编程语言#xff0c;提供了…Python系统编程大揭秘掌握操作系统接口、进程管理与系统信息 前言 在当今软件开发领域系统编程是一项至关重要的技能尤其是在涉及到操作系统接口、进程管理以及系统信息的处理时。Python作为一门强大而灵活的编程语言提供了丰富的工具和库使得系统编程变得更加简便和高效。本文将深入探讨Python中的操作系统接口和系统信息处理帮助读者更好地利用这些功能进行系统级开发。 【Python百宝箱】从新手到大师Python 系统与文件操作全攻略 欢迎订阅专栏Python库百宝箱解锁编程的神奇世界 文章目录 Python系统编程大揭秘掌握操作系统接口、进程管理与系统信息前言1. Python内置模块: os1.1 基本功能1.2 文件和目录操作1.3 进程控制1.4 路径操作1.5 环境变量操作1.6 文件权限操作1.7 文件和目录遍历 2. 外部库: psutil2.1 获取系统利用率2.2 进程数据接口2.2.1 进程信息查询2.2.2 进程控制操作 2.3 网络信息获取2.3.1 获取网络连接信息2.3.2 获取网络地址信息 2.4 磁盘信息查询2.4.1 获取磁盘分区信息2.4.2 获取磁盘使用情况 2.5 传感器信息获取2.5.1 获取温度信息2.5.2 获取电池状态 3. 文件和目录操作: shutil3.1 文件操作3.2 目录操作3.3 文件压缩与解压缩3.4 文件比较和更新3.4.1 文件比较3.4.2 文件更新 3.5 文件权限和所有权3.5.1 获取文件权限3.5.2 设置文件权限 3.6 路径操作 4. 系统环境变量: dotenv4.1 安全管理敏感信息4.2 灵活配置应用程序4.3 加密环境变量4.3.1 创建加密环境变量文件4.3.2 解密环境变量 4.4 多环境配置4.4.1 创建不同环境的配置文件4.4.2 加载特定环境的配置 4.5 环境变量验证4.5.1 配置验证 5. 进程管理: subprocess5.1 执行外部命令5.2 控制子进程5.3 获取命令输出5.4 交互式命令执行5.4.1 与外部命令进行交互5.4.2 在交互式shell中执行命令 5.5 超时和异常处理5.5.1 设置命令超时时间5.5.2 处理异常 6. 并行编程: multiprocessing6.1 多进程并行6.2 进程间通信6.3 进程池6.4 进程间共享数据6.4.1 使用Value共享单一变量6.4.2 使用Array共享数组 6.5 进程同步与锁 7. 日志记录: logging7.1 基本概念7.2 配置日志7.3 自定义日志处理器7.4 日志轮转7.5 日志过滤器7.6 多模块日志记录 8. 系统信息获取: platform8.1 硬件信息8.2 操作系统信息8.3 Python解释器信息8.4 平台信息8.5 处理器信息8.6 运行时信息 总结 1. Python内置模块: os 1.1 基本功能 Python的os模块是一个提供与操作系统交互的强大工具。它包含了许多用于文件和目录管理、进程控制等的函数。以下是一些基本功能的示例 import os# 获取当前工作目录 current_dir os.getcwd() print(f当前工作目录: {current_dir})# 列出指定目录下的文件和目录 dir_contents os.listdir(current_dir) print(f目录内容: {dir_contents})1.2 文件和目录操作 os模块提供了丰富的文件和目录操作功能如创建目录、删除文件等 # 创建目录 new_dir os.path.join(current_dir, new_directory) os.mkdir(new_dir) print(f已创建目录: {new_dir})# 删除目录 os.rmdir(new_dir) print(f已删除目录: {new_dir})1.3 进程控制 通过os模块可以实现对进程的基本控制如获取进程ID、执行系统命令等 # 获取当前进程ID process_id os.getpid() print(f当前进程ID: {process_id})# 执行系统命令 os.system(echo Hello, OS Module!)1.4 路径操作 os.path模块提供了关于路径操作的函数用于处理文件路径和目录路径的字符串。这对于在不同操作系统上正确构建路径非常有用。 import os# 拼接路径 path os.path.join(folder, subfolder, file.txt) print(f拼接后的路径: {path})# 获取路径的目录部分 directory os.path.dirname(path) print(f路径的目录部分: {directory})# 获取路径的文件名部分 filename os.path.basename(path) print(f路径的文件名部分: {filename})1.5 环境变量操作 os.environ允许您访问系统的环境变量可以读取和设置环境变量的值。 import os# 读取环境变量 home_directory os.environ.get(HOME) print(fHome目录: {home_directory})# 设置环境变量 os.environ[MY_VARIABLE] my_value print(f设置的环境变量值: {os.environ[MY_VARIABLE]})1.6 文件权限操作 os模块还提供了一些函数来检查和更改文件的权限。 import os# 检查文件是否可读 is_readable os.access(file.txt, os.R_OK) print(f文件是否可读: {is_readable})# 修改文件权限 os.chmod(file.txt, 0o755) # 设置为-rwxr-xr-x print(文件权限已修改)1.7 文件和目录遍历 os.walk函数可以用于遍历指定目录及其子目录下的所有文件和文件夹。 import os# 遍历目录 for root, dirs, files in os.walk(parent_folder):print(f当前目录: {root})print(f子目录: {dirs})print(f文件: {files})这些附加的os模块功能为系统编程提供了更多灵活性和便利性能够处理更多关于路径、环境变量和权限的操作。 2. 外部库: psutil 2.1 获取系统利用率 psutil库允许我们获取系统的利用率信息包括CPU、内存、磁盘等 import psutil# 获取CPU利用率 cpu_percent psutil.cpu_percent() print(f当前CPU利用率: {cpu_percent}%)# 获取内存利用率 memory_percent psutil.virtual_memory().percent print(f当前内存利用率: {memory_percent}%)2.2 进程数据接口 psutil提供了方便的接口来获取和管理进程信息 2.2.1 进程信息查询 # 获取所有进程信息 all_processes psutil.process_iter(attrs[pid, name, cpu_percent]) for process in all_processes:print(f进程ID: {process.info[pid]}, 进程名: {process.info[name]}, CPU利用率: {process.info[cpu_percent]}%)2.2.2 进程控制操作 # 通过进程ID结束进程 target_process_id 1234 # 替换为实际进程ID target_process psutil.Process(target_process_id) target_process.terminate() print(f已结束进程ID为 {target_process_id} 的进程)2.3 网络信息获取 psutil不仅提供了对系统资源的监控还能够获取网络相关的信息包括网络连接和网络地址。 2.3.1 获取网络连接信息 import psutil# 获取网络连接信息 connections psutil.net_connections() for conn in connections:print(f本地地址: {conn.laddr}, 远程地址: {conn.raddr}, 状态: {conn.status})2.3.2 获取网络地址信息 # 获取网络地址信息 network_interfaces psutil.net_if_addrs() for interface, addresses in network_interfaces.items():print(f接口: {interface})for address in addresses:print(f 地址族: {address.family}, 地址: {address.address}, 状态: {address.netmask})2.4 磁盘信息查询 psutil还能够获取关于磁盘的详细信息包括磁盘分区、磁盘使用情况等。 2.4.1 获取磁盘分区信息 # 获取磁盘分区信息 disk_partitions psutil.disk_partitions() for partition in disk_partitions:print(f设备: {partition.device}, 挂载点: {partition.mountpoint}, 文件系统: {partition.fstype})2.4.2 获取磁盘使用情况 # 获取磁盘使用情况 disk_usage psutil.disk_usage(/) print(f总空间: {disk_usage.total}, 已用空间: {disk_usage.used}, 可用空间: {disk_usage.free})2.5 传感器信息获取 对于支持的系统psutil还可以获取传感器信息如温度、电池状态等。 2.5.1 获取温度信息 # 获取温度信息仅限支持的系统 temperature_info psutil.sensors_temperatures() for sensor, readings in temperature_info.items():print(f传感器: {sensor})for entry in readings:print(f 类型: {entry.label}, 温度: {entry.current}°C)2.5.2 获取电池状态 # 获取电池状态信息仅限支持的系统 battery_info psutil.sensors_battery() if battery_info:print(f电池状态: {battery_info.percent}% 电量, {battery_info.power_plugged} 充电中) else:print(未检测到电池信息)这些psutil库的功能扩展使得系统监控和管理变得更加全面和深入。在实际应用中这些信息对于系统性能优化、故障排查等方面都具有重要作用。 3. 文件和目录操作: shutil 3.1 文件操作 shutil库是Python的文件操作工具提供了许多高级的文件和目录管理功能 import shutil# 复制文件 source_file source.txt destination destination_folder shutil.copy(source_file, destination) print(f已复制文件 {source_file} 到 {destination})# 移动文件 shutil.move(source_file, new_location) print(f已将文件 {source_file} 移动到新位置)3.2 目录操作 # 复制整个目录 shutil.copytree(source_folder, destination_folder_copy) print(已复制整个目录)# 删除目录及其内容 shutil.rmtree(directory_to_delete) print(已删除目录及其内容)3.3 文件压缩与解压缩 # 压缩文件 shutil.make_archive(archive, zip, folder_to_compress) print(已压缩文件夹)# 解压缩文件 shutil.unpack_archive(archive.zip, extracted_folder) print(已解压缩文件)3.4 文件比较和更新 shutil还提供了一些用于比较和更新文件的功能对于需要检查文件变更或者同步文件的场景很有用。 3.4.1 文件比较 import shutil# 比较两个文件 file1 file1.txt file2 file2.txt is_equal shutil.cmp(file1, file2) print(f文件 {file1} 和 {file2} 是否相同: {is_equal})3.4.2 文件更新 # 将源文件夹中的文件更新到目标文件夹 source_folder source_folder destination_folder destination_folder shutil.copytree(source_folder, destination_folder, updateTrue) print(f已将 {source_folder} 中的更新复制到 {destination_folder})3.5 文件权限和所有权 shutil提供了函数来获取和设置文件的权限和所有权信息。 3.5.1 获取文件权限 import shutil# 获取文件权限 file_permissions shutil.get_file_security(file.txt) print(f文件权限信息: {file_permissions})3.5.2 设置文件权限 # 设置文件权限 shutil.set_file_security(file.txt, NEW_PERMISSIONS) print(文件权限已修改)3.6 路径操作 与os.path类似shutil也提供了一些对路径进行操作的函数。 import shutil# 检查路径是否为绝对路径 is_absolute shutil.os.path.isabs(/absolute/path) print(f路径是否为绝对路径: {is_absolute})# 获取路径的实际路径解析符号链接 real_path shutil.os.path.realpath(/path/to/symlink) print(f实际路径: {real_path})这些shutil库的功能拓展使得文件和目录的操作更加灵活和全面。从复制、移动、压缩到比较、更新shutil提供了丰富的工具适用于各种文件和目录处理的场景。 4. 系统环境变量: dotenv 4.1 安全管理敏感信息 dotenv库用于加载环境变量特别是在处理敏感信息时可以使用.env文件来管理这些变量 from dotenv import load_dotenv# 从.env文件加载环境变量 load_dotenv()# 使用环境变量 api_key os.getenv(API_KEY) print(f使用API密钥: {api_key})4.2 灵活配置应用程序 # 设定默认值 debug_mode os.getenv(DEBUG_MODE, defaultFalse) print(f调试模式: {debug_mode})# 设置环境变量 os.environ[LOG_LEVEL] DEBUG print(f已设置日志级别: {os.getenv(LOG_LEVEL)})4.3 加密环境变量 dotenv还支持使用加密的方式存储敏感的环境变量保护这些信息免受未经授权的访问。 4.3.1 创建加密环境变量文件 from dotenv import encrypt_value# 加密敏感信息 encrypted_api_key encrypt_value(my_secret_api_key) with open(.env.enc, w) as encrypted_file:encrypted_file.write(fENCRYPTED_API_KEY{encrypted_api_key})4.3.2 解密环境变量 from dotenv import load_dotenv, decrypt_value# 从加密文件加载环境变量 load_dotenv(.env.enc)# 解密环境变量 decrypted_api_key decrypt_value(os.getenv(ENCRYPTED_API_KEY)) print(f解密后的API密钥: {decrypted_api_key})4.4 多环境配置 dotenv支持加载不同环境的配置通过设置.env文件中的环境名来实现。 4.4.1 创建不同环境的配置文件 .env.development DEBUGTrue API_KEYdev_key.env.production DEBUGFalse API_KEYprod_key4.4.2 加载特定环境的配置 from dotenv import find_dotenv, load_dotenv# 查找并加载环境变量文件 load_dotenv(find_dotenv(.env.production))# 使用加载的环境变量 debug_mode os.getenv(DEBUG) api_key os.getenv(API_KEY) print(f调试模式: {debug_mode}, 使用API密钥: {api_key})4.5 环境变量验证 dotenv支持对加载的环境变量进行验证确保配置的完整性。 4.5.1 配置验证 from dotenv import load_dotenv, find_dotenv, dotenv_values# 查找并加载环境变量文件 load_dotenv(find_dotenv(.env.production))# 验证环境变量是否存在 required_vars [DEBUG, API_KEY] config dotenv_values() missing_vars [var for var in required_vars if var not in config] if missing_vars:raise EnvironmentError(f缺少必要的环境变量: {, .join(missing_vars)})这些dotenv库的功能拓展使得环境变量的管理更加安全、灵活和多样化。从简单的加载到加密、多环境配置和验证dotenv提供了丰富的工具适用于各种应用场景。 5. 进程管理: subprocess 5.1 执行外部命令 subprocess库允许执行外部命令并获取其输出 import subprocess# 执行命令并获取输出 result subprocess.run([ls, -l], capture_outputTrue, textTrue) print(f命令输出: {result.stdout})5.2 控制子进程 # 启动子进程 subprocess.Popen([notepad.exe])# 等待子进程结束 process subprocess.Popen([python, script.py]) process.wait() print(子进程已结束)5.3 获取命令输出 # 获取命令输出 output subprocess.check_output([echo, Hello, subprocess!], textTrue) print(f命令输出: {output})5.4 交互式命令执行 subprocess还支持在交互式会话中执行命令与外部进程进行交互。 5.4.1 与外部命令进行交互 import subprocess# 与外部命令进行交互 process subprocess.Popen([python], stdinsubprocess.PIPE, stdoutsubprocess.PIPE, textTrue) process.stdin.write(print(Hello from subprocess!)\n) output, _ process.communicate() print(f外部命令输出: {output})5.4.2 在交互式shell中执行命令 # 在交互式shell中执行命令 process subprocess.Popen([bash], stdinsubprocess.PIPE, stdoutsubprocess.PIPE, textTrue) process.stdin.write(echo Hello from subprocess!\n) output, _ process.communicate() print(fShell命令输出: {output})5.5 超时和异常处理 subprocess允许设置命令执行的超时时间并提供异常处理机制来处理执行过程中的错误。 5.5.1 设置命令超时时间 import subprocess# 设置命令超时时间 try:result subprocess.run([sleep, 5], timeout3, capture_outputTrue, textTrue)print(f命令输出: {result.stdout}) except subprocess.TimeoutExpired:print(命令执行超时)5.5.2 处理异常 # 处理命令执行异常 try:output subprocess.check_output([unknown_command], textTrue)print(f命令输出: {output}) except subprocess.CalledProcessError as e:print(f命令执行异常: {e})这些subprocess库的功能拓展使得外部命令的执行和处理更加灵活和可控。从简单的获取输出到交互式执行和异常处理subprocess提供了丰富的工具适用于各种外部进程管理的场景。 6. 并行编程: multiprocessing 6.1 多进程并行 multiprocessing库提供了在Python中创建和管理多个进程的功能 import multiprocessing# 定义要并行执行的函数 def worker(number):print(fWorker {number} 执行)# 创建进程池启动多个进程 with multiprocessing.Pool(processes3) as pool:pool.map(worker, range(3))6.2 进程间通信 from multiprocessing import Process, Queue# 定义进程要执行的函数 def worker(queue):data queue.get()print(f接收到数据: {data})# 创建进程间通信的队列 communication_queue Queue()# 启动子进程 process Process(targetworker, args(communication_queue,)) process.start()# 向队列发送数据 communication_queue.put(Hello, multiprocessing!)# 等待子进程结束 process.join()6.3 进程池 from multiprocessing import Pool# 定义要并行执行的函数 def worker(number):return fWorker {number} 执行# 创建进程池启动多个进程 with Pool(processes3) as pool:results pool.map(worker, range(3))print(并行执行结果:)for result in results:print(result)6.4 进程间共享数据 multiprocessing提供了一些用于在多个进程之间共享数据的机制如Value和Array 6.4.1 使用Value共享单一变量 from multiprocessing import Process, Value import time# 定义进程要执行的函数 def counter(shared_counter, sleep_time):for _ in range(5):with shared_counter.get_lock():shared_counter.value 1time.sleep(sleep_time)# 创建共享的计数器变量 counter_value Value(i, 0)# 启动两个进程共享计数器变量 process1 Process(targetcounter, args(counter_value, 0.1)) process2 Process(targetcounter, args(counter_value, 0.2))# 启动进程 process1.start() process2.start()# 等待两个进程结束 process1.join() process2.join()# 打印最终计数器值 print(f最终计数器值: {counter_value.value})6.4.2 使用Array共享数组 from multiprocessing import Process, Array# 定义进程要执行的函数 def update_array(shared_array, index):shared_array[index] index * 2# 创建共享的数组 shared_numbers Array(i, 5)# 启动五个进程共享数组 processes [Process(targetupdate_array, args(shared_numbers, i)) for i in range(5)]# 启动进程 for process in processes:process.start()# 等待所有进程结束 for process in processes:process.join()# 打印最终共享数组的值 print(f最终共享数组的值: {list(shared_numbers)})6.5 进程同步与锁 multiprocessing提供了Lock来确保在多个进程中对共享资源的安全访问。 from multiprocessing import Process, Lock# 定义进程要执行的函数 def update_counter(shared_counter, lock):for _ in range(5):with lock:shared_counter.value 1# 创建共享的计数器和锁 counter_value Value(i, 0) counter_lock Lock()# 启动两个进程共享计数器和锁 process1 Process(targetupdate_counter, args(counter_value, counter_lock)) process2 Process(targetupdate_counter, args(counter_value, counter_lock))# 启动进程 process1.start() process2.start()# 等待两个进程结束 process1.join() process2.join()# 打印最终计数器值 print(f最终计数器值: {counter_value.value})这些multiprocessing库的功能拓展使得并行编程更加灵活和高效。从多进程并行执行、进程间通信到进程间共享数据和同步锁multiprocessing提供了丰富的工具适用于各种并行编程的场景。 7. 日志记录: logging 7.1 基本概念 logging库用于在Python应用程序中添加灵活的日志记录 import logging# 配置日志 logging.basicConfig(levellogging.DEBUG, format%(asctime)s - %(levelname)s - %(message)s)# 记录日志 logging.debug(这是一个调试消息) logging.info(这是一条信息消息)7.2 配置日志 # 配置日志到文件 logging.basicConfig(filenameapp.log, levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s)# 记录日志 logging.info(这条日志将被写入文件)7.3 自定义日志处理器 # 创建自定义日志处理器 class MyHandler(logging.Handler):def emit(self, record):print(f自定义处理器: {self.format(record)})# 添加自定义处理器到日志 logging.getLogger().addHandler(MyHandler())# 记录日志 logging.warning(这条日志将由自定义处理器处理)7.4 日志轮转 logging库支持通过RotatingFileHandler进行日志轮转以控制日志文件的大小 import logging from logging.handlers import RotatingFileHandler# 创建RotatingFileHandler最大日志文件大小为1MB最多保留3个备份文件 handler RotatingFileHandler(app.log, maxBytes1e6, backupCount3)# 配置日志格式 handler.setFormatter(logging.Formatter(%(asctime)s - %(levelname)s - %(message)s))# 添加处理器到日志 logging.getLogger().addHandler(handler)# 记录日志 for i in range(10):logging.info(f这是第 {i1} 条日志)7.5 日志过滤器 import logging# 创建日志过滤器仅允许记录级别为INFO的消息 class InfoFilter(logging.Filter):def filter(self, record):return record.levelno logging.INFO# 创建过滤器实例 info_filter InfoFilter()# 创建日志处理器 handler logging.StreamHandler()# 添加过滤器到处理器 handler.addFilter(info_filter)# 添加处理器到日志 logging.getLogger().addHandler(handler)# 记录不同级别的日志 logging.debug(这是一条调试消息) logging.info(这是一条信息消息) logging.warning(这是一条警告消息)7.6 多模块日志记录 # 在模块中创建Logger实例 logger logging.getLogger(__name__)# 配置Logger logger.setLevel(logging.DEBUG)# 添加处理器到Logger logger.addHandler(logging.StreamHandler())# 记录日志 logger.info(这是来自模块的信息消息)这些logging库的功能拓展使得日志记录更加灵活和强大。从基本概念、配置日志到自定义处理器、日志轮转和过滤器logging提供了丰富的工具适用于各种日志记录的场景。 8. 系统信息获取: platform 8.1 硬件信息 import platform# 获取计算机硬件信息 hardware_info platform.uname() print(f硬件信息: {hardware_info})8.2 操作系统信息 # 获取操作系统信息 os_info platform.system() print(f操作系统: {os_info})# 获取操作系统版本 os_version platform.version() print(f操作系统版本: {os_version})8.3 Python解释器信息 # 获取Python解释器信息 python_info platform.python_version() print(fPython解释器版本: {python_info})8.4 平台信息 # 获取平台信息 platform_info platform.platform() print(f平台信息: {platform_info})# 获取计算机的网络名称 network_name platform.node() print(f计算机网络名称: {network_name})8.5 处理器信息 # 获取处理器信息 processor_info platform.processor() print(f处理器信息: {processor_info})# 获取计算机的架构 architecture platform.architecture() print(f计算机架构: {architecture})8.6 运行时信息 # 获取运行时信息 runtime_info platform.python_compiler() print(fPython编译器信息: {runtime_info})# 获取计算机的时区 timezone_info platform.timezone() print(f计算机时区: {timezone_info})这些platform库的功能拓展使得获取系统信息更加全面和方便。从硬件信息、操作系统信息到Python解释器信息和平台信息platform提供了丰富的工具适用于各种系统信息获取的场景。 总结 通过学习本文读者将全面掌握Python中处理系统编程任务所需的关键知识。从基本的操作系统接口到高级的系统信息获取我们深入剖析了多个库的用法使读者能够更加自信和高效地应对各种系统级编程挑战。无论是新手还是有经验的开发者都将在本文中找到实用的技巧和方法提升其系统编程能力。
http://www.pierceye.com/news/612559/

相关文章:

  • 备案成功后怎么建设网站宠物喂养网页设计模板以及代码
  • 东莞哪家网站建设比较好wordpress更改语言设置
  • 如何找做网站的客户wordpress适合视频网站吗
  • 网站建设的业务流程图拔萝卜视频播放在线观看免费
  • 建个网站要多少钱高安网站制作
  • dw设计模板百度ocpc如何优化
  • 苏宁网站优化与推广html教程网站
  • 怎么做网站网页免费高清屏幕录像
  • 网络推广哪个网站好亚马逊网站开发使用的什么方式
  • 佛山企业网站建设咨询怎么从零开始做网站
  • dede移动端网站源码中国能建设计公司网站
  • 潍坊网站建设多少钱做网站seo优化
  • 南昌网站建设方案外包怎么自己做网站凑钱
  • 贵州企业展示型网站建设网站建设需要摊销吗
  • 网站建设视频教程广州哪里有正规的技能培训
  • 网站后台iis配置小程序模板消息推送规则
  • 桥梁建设工程网站残疾人网站服务平台
  • 网站开发语言包括哪些潍坊公司注册
  • 平顶山网站制作哪家公司好阿里巴巴网站建设改图片
  • 网站设计培训学校有哪些wordpress主题什么值得买
  • 如皋建设工程局网站静态网站做淘宝客
  • 温州网站建设案例做网站卖衣服物流包年多少钱
  • 响应 网站建设招聘室内设计
  • 网站建设宣传册内容南京个人网站建设
  • 毕业设计可以做哪些网站遵义原创网站
  • 国外服装设计网站app网站建设需要什么
  • 网站建设a云世家宋南南网站建设合集
  • 可以网上做单的网站创建全国文明城市的宗旨是什么
  • 北京诚信建设网站成都蓉城最新消息
  • 上市公司网站建设分析评价网页制作的视频教程