WordPress 开发知识

以下是一篇详细的 WordPress 入门到精通指南,旨在帮助新手从零开始,逐步理解和掌握 WordPress 的使用和开发。

目录

  1. 简介
  2. 初步设置
    • 购买域名和托管
    • 安装 WordPress
  3. 基本操作
    • 登录和仪表盘简介
    • 创建和管理内容
  4. 主题和外观
    • 选择和安装主题
    • 自定义主题
  5. 插件
    • 安装和管理插件
    • 推荐插件
  6. 用户管理和角色
  7. 安全性和备份
  8. 性能优化
  9. 高级开发
    • 创建自定义主题
    • 开发插件
  10. 部署和维护

简介

WordPress 是一个开源的内容管理系统 (CMS),广泛用于创建博客、企业网站、电子商务网站等。它以其易用性和灵活性著称,支持丰富的主题和插件扩展,能够满足各种网站需求。

初步设置

购买域名和托管

  1. 选择域名:选择一个简短易记的域名,并在域名注册商(如 GoDaddy、Namecheap)购买。
  2. 选择托管服务:选择一个可靠的托管服务提供商(如 Bluehost、SiteGround、WP Engine),并购买适合你需求的托管计划。

安装 WordPress

  1. 通过托管服务一键安装:大多数托管服务提供商提供一键安装 WordPress 的选项。
  2. 手动安装
    • 下载 WordPress 安装包:WordPress.org
    • 使用 FTP 客户端(如 FileZilla)上传文件到服务器。
    • 创建数据库和用户。
    • 运行安装脚本,完成设置。

基本操作

登录和仪表盘简介

  • 通过 http://yourdomain.com/wp-admin 访问登录页面。
  • 登录后,进入仪表盘(Dashboard),这里是管理网站的中心。

创建和管理内容

  • 文章 (Posts) :适合博客内容。
    • 创建新文章:文章 -> 写文章
    • 分类和标签管理:文章 -> 分类标签
  • 页面 (Pages) :适合静态内容,如"关于我们"、"联系我们"。
    • 创建新页面:页面 -> 新建页面

主题和外观

选择和安装主题

  • 安装免费主题
    • 外观 -> 主题 -> 添加
    • 浏览并安装喜欢的主题
  • 安装付费主题
    • 从第三方市场(如 ThemeForest)购买并下载主题包。
    • 上传主题包:外观 -> 主题 -> 添加 -> 上传主题

自定义主题

  • 使用 WordPress 自带的自定义工具:外观 -> 自定义
  • 调整站点标题、颜色、菜单、部件等。

插件

安装和管理插件

  • 安装插件
    • 插件 -> 安装插件
    • 搜索、安装并激活所需插件
  • 管理插件
    • 插件 -> 已安装的插件
    • 激活、停用或删除插件

推荐插件

  1. Yoast SEO:优化网站 SEO。
  2. WooCommerce:创建电子商务网站。
  3. Contact Form 7:创建联系表单。
  4. Akismet:防止垃圾评论。
  5. WP Super Cache:提高网站速度。

用户管理和角色

  • 添加新用户用户 -> 新建用户
  • 用户角色
    • 管理员 (Administrator)
    • 编辑 (Editor)
    • 作者 (Author)
    • 投稿者 (Contributor)
    • 订阅者 (Subscriber)

安全性和备份

  • 安全插件
    • Wordfence Security
    • iThemes Security

一些常见的wordpress技术处理:

一. 在开发 WordPress 插件时,如何有效地使用 WordPress 钩子(Actions 和 Filters)来扩展功能?

在开发 WordPress 插件时,熟练使用 WordPress 钩子(Actions 和 Filters)是扩展功能的关键。钩子允许你在特定的点上插入自定义代码,而不需要修改核心文件。以下是如何有效使用这些钩子的方法:

1. 理解 WordPress 钩子的基本概念

  • Actions:允许你在 WordPress 执行一个特定操作时运行你的代码。例如,在页面加载完成后、文章发布时等。
  • Filters:允许你在 WordPress 数据输出之前对数据进行修改。例如,修改文章内容、标题等。

2. 使用 Actions 扩展功能

Actions 通过 add_action 函数来定义。以下是一个基本示例:

复制代码
// 在 WordPress 初始化时执行自定义函数
add_action('init', 'my_custom_init_function');

function my_custom_init_function() {
    // 你的自定义代码
    // 例如,注册一个自定义文章类型
    register_post_type('my_custom_post_type', [
        'label' => 'My Custom Post Type',
        'public' => true,
        'supports' => ['title', 'editor', 'thumbnail'],
    ]);
}

3. 使用 Filters 修改数据

Filters 通过 add_filter 函数来定义。以下是一个基本示例:

复制代码
// 修改文章标题
add_filter('the_title', 'my_custom_title_filter');

function my_custom_title_filter($title) {
    // 你的自定义代码
    // 例如,添加前缀到文章标题
    return 'Prefix: ' . $title;
}

4. 查找适合的钩子

WordPress 提供了大量的钩子,基本上覆盖了所有可能的操作和数据处理。你可以在 WordPress Codex 或者 WordPress Developer Handbook 中查找你需要的钩子。

5. 创建自定义钩子

在你的插件中创建自定义钩子,可以让其他开发者扩展你的插件功能。例如:

复制代码
// 定义一个自定义 action
do_action('my_custom_action');

// 在其他地方钩住这个自定义 action
add_action('my_custom_action', 'my_custom_action_handler');

function my_custom_action_handler() {
    // 处理函数逻辑
}

6. 优化钩子的使用

  • 避免重复代码:将钩子的处理逻辑封装在函数中,并在适当的地方调用。

  • 优先级add_actionadd_filter 有一个可选的优先级参数,默认为 10。通过调整优先级,可以控制钩子执行的顺序。

    // 优先级为 15 的 action
    add_action('init', 'my_custom_init_function', 15);

7. 实战示例

假设你要在每篇文章的内容后添加一个广告代码,可以使用 the_content 过滤器:

复制代码
add_filter('the_content', 'add_ad_to_content');

function add_ad_to_content($content) {
    if (is_single()) {
        // 你的广告代码
        $ad_code = '<div class="my-ad">This is an ad.</div>';
        $content .= $ad_code;
    }
    return $content;
}

结论

通过有效地使用 WordPress 钩子,可以在不修改核心代码的情况下扩展 WordPress 的功能。关键在于理解 Actions 和 Filters 的机制,找到合适的钩子,并编写简洁且有效的处理函数。持续学习和实践能够帮助你更好地掌握和应用这些技术。

二. 开发 WordPress 插件时的常见最佳实践

遵循这些可以确保你的插件代码质量高、性能好、易于维护和扩展。以下是一些常见的最佳实践:

1. 遵循编码标准

  • WordPress Coding Standards :遵循 WordPress PHP Coding Standards。这包括文件组织、命名约定、代码格式等。
  • 代码注释:使用清晰的注释和文档,使代码易于理解和维护。

2. 避免命名冲突

  • 前缀 :为函数、类、变量等添加唯一前缀,避免与其他插件或主题冲突。例如,使用 myplugin_ 作为前缀。
  • 命名空间:在 PHP 5.3 及以上版本中使用命名空间来组织代码,进一步减少冲突的可能。

3. 使用适当的文件结构

  • 文件组织:将不同功能的代码分离到不同的文件中。例如,将短代码、钩子、设置页面等各自放在独立的文件中。

  • 主文件:在插件的主文件中包含插件的元数据,并引导其他文件。

    /*
    Plugin Name: My Custom Plugin
    Description: This is a custom plugin.
    Version: 1.0
    Author: Your Name
    */

    // 包含其他文件
    include_once plugin_dir_path(FILE) . 'includes/my-custom-functions.php';
    include_once plugin_dir_path(FILE) . 'includes/my-custom-hooks.php';

4. 使用钩子

  • Actions 和 Filters:尽量使用 WordPress 提供的 Actions 和 Filters 来扩展功能,而不是直接修改 WordPress 核心。
  • 自定义钩子:为你的插件添加自定义钩子,使其更具可扩展性。

5. 安全性

  • 数据验证和消毒:对所有输入数据进行验证和消毒,防止 XSS 和 SQL 注入攻击。

    // 验证和消毒示例
    sanitized_input = sanitize_text_field(_POST['user_input']);

  • 权限检查:在执行敏感操作前检查用户权限。

    // 权限检查示例
    if (current_user_can('manage_options')) {
    // 执行管理员操作
    }

6. 使用 WordPress 提供的 API

  • Settings API :使用 Settings API 创建和管理插件的设置页面。
  • Options API :使用 Options API 存储和检索插件设置。
  • Shortcode API :使用 Shortcode API 创建短代码。

7. 本地化和国际化

  • 翻译准备 :确保插件的所有文本都可以被翻译。使用 __()_e() 函数包裹字符串。

    // 本地化示例
    _e('Hello, World!', 'my-plugin-textdomain');

  • 加载文本域:在插件初始化时加载文本域。

    // 加载文本域
    function myplugin_load_textdomain() {
    load_plugin_textdomain('my-plugin-textdomain', false, basename(dirname(FILE)) . '/languages');
    }
    add_action('plugins_loaded', 'myplugin_load_textdomain');

8. 优化性能

  • 尽量减少数据库查询:缓存结果,减少不必要的数据库查询。
  • 使用合适的数据结构:选择最适合的数据库表和数据存储方式,提高查询效率。

9. 提供卸载功能

  • 清理数据:在插件卸载时清理所有设置和数据,保持数据库干净。

    // 插件卸载钩子
    register_uninstall_hook(FILE, 'myplugin_uninstall');

    function myplugin_uninstall() {
    // 删除插件设置
    delete_option('myplugin_settings');
    }

10. 测试和调试

  • 测试环境:在开发和测试插件时,使用本地或测试服务器,而不是直接在生产环境中进行。
  • 调试工具 :使用调试工具,如 WP_DEBUGQuery Monitor 插件等,帮助发现和解决问题。

三.分享一些在 WordPress 插件开发过程中遇到的常见挑战及解决方案

开发 WordPress 插件时可能会遇到各种挑战。以下是一些常见挑战及其解决方案:

1. 命名冲突

挑战:插件中的函数、类或变量名称可能与其他插件或主题中的名称冲突,导致功能异常或崩溃。

解决方案

  • 使用前缀:为所有函数、类和变量添加唯一前缀。

    function myplugin_custom_function() {
    // Function code here
    }

  • 使用命名空间(适用于 PHP 5.3 及以上版本):

    namespace MyPlugin;

    class CustomClass {
    // Class code here
    }

2. 数据验证和安全

挑战:处理用户输入时,可能会引入安全漏洞,如 XSS、SQL 注入等。

解决方案

  • 验证和消毒:对所有用户输入的数据进行验证和消毒。

    sanitized_input = sanitize_text_field(_POST['user_input']);

  • 使用准备好的语句 :使用 WordPress 提供的数据库接口(如 $wpdb)防止 SQL 注入。

    global wpdb; wpdb->insert(
    wpdb->prefix . 'my_table', array( 'column_name' => sanitize_text_field(_POST['column_value']),
    )
    );

3. 权限管理

挑战:确保只有具备适当权限的用户可以执行某些操作。

解决方案

  • 检查用户权限:在执行敏感操作前检查用户权限。

    if (current_user_can('manage_options')) {
    // Perform admin-specific task
    }

4. 兼容性问题

挑战:插件可能与其他插件、主题或 WordPress 版本不兼容。

解决方案

  • 版本检测:在插件激活时检测 WordPress 版本和其他依赖项。

    function myplugin_activate() {
    global wp_version; if (version_compare(wp_version, '5.0', '<')) {
    deactivate_plugins(plugin_basename(FILE));
    wp_die('This plugin requires WordPress version 5.0 or higher.');
    }
    }
    register_activation_hook(FILE, 'myplugin_activate');

  • 使用钩子和过滤器:尽量通过钩子和过滤器与其他代码交互,而不是直接修改核心文件。

5. 性能优化

挑战:插件可能会导致网站加载变慢或消耗过多服务器资源。

解决方案

  • 缓存:缓存频繁使用的结果,减少数据库查询次数。

    cached_data = get_transient('myplugin_cached_data'); if (false === cached_data) {
    // Perform database query or other time-consuming operation
    cached_data = 'Expensive Data'; set_transient('myplugin_cached_data', cached_data, 12 * HOUR_IN_SECONDS);
    }

  • 优化查询:确保数据库查询高效,使用适当的索引和查询优化技术。

6. 本地化和国际化

挑战:确保插件支持多语言,便于国际化。

解决方案

  • 使用翻译函数 :所有输出到用户界面的文本都应使用 __()_e() 函数。

    _e('Hello, World!', 'my-plugin-textdomain');

  • 加载文本域:在插件初始化时加载文本域。

    function myplugin_load_textdomain() {
    load_plugin_textdomain('my-plugin-textdomain', false, basename(dirname(FILE)) . '/languages');
    }
    add_action('plugins_loaded', 'myplugin_load_textdomain');

7. 提供良好的用户界面

挑战:确保插件的管理界面用户友好且易于使用。

解决方案

  • 使用 WordPress UI 元素:利用 WordPress 提供的 UI 元素和样式,使界面和 WordPress 后台一致。

    function myplugin_settings_page() {
    ?>


    <?php _e('My Plugin Settings', 'my-plugin-textdomain'); ?>


    <form method="post" action="options.php">
    <?php settings_fields('myplugin_options_group'); do_settings_sections('myplugin'); submit_button(); ?>
    </form>

    <?php
    }

  • 使用 Settings API:创建和管理设置页面。

    function myplugin_register_settings() {
    register_setting('myplugin_options_group', 'myplugin_option

四.插件开发过程中遇到任何性能问题的经验?如何优化插件性能?

优化插件性能不仅能提高用户体验,还能减少服务器负载。

以下是一些遇到的性能问题及其优化方案:

1. 高频数据库查询

问题:频繁且不必要的数据库查询会导致页面加载变慢,增加服务器负载。

解决方案

  • 数据库查询优化:优化 SQL 查询,确保只查询必要的数据,并使用适当的索引。

    global wpdb; results = wpdb->get_results(" SELECT id, name FROM {wpdb->prefix}my_table
    WHERE status = 'active'
    ORDER BY created_at DESC
    LIMIT 10
    ");

  • 缓存 :使用 WordPress 内置的缓存机制(如 transients)或外部缓存插件减少数据库查询次数。

    function myplugin_get_cached_data() {
    cached_data = get_transient('myplugin_cached_data'); if (false === cached_data) {
    // Expensive operation
    global wpdb; cached_data = wpdb->get_results("SELECT * FROM {wpdb->prefix}my_table");
    set_transient('myplugin_cached_data', cached_data, 12 * HOUR_IN_SECONDS); } return cached_data;
    }

2. 大量数据处理

问题:在短时间内处理大量数据会导致服务器负载过高,甚至导致超时。

解决方案

  • 分页和分段处理:将大数据处理任务分成小段批量处理。

    function myplugin_process_data_in_batches(batch_size = 100) { global wpdb;
    offset = 0; total = wpdb->get_var("SELECT COUNT(*) FROM {wpdb->prefix}my_table");

    复制代码
      while ($offset < $total) {
          $results = $wpdb->get_results($wpdb->prepare("
              SELECT * FROM {$wpdb->prefix}my_table
              LIMIT %d OFFSET %d
          ", $batch_size, $offset));
    
          foreach ($results as $row) {
              // Process each row
          }
    
          $offset += $batch_size;
      }

    }

3. 不必要的资源加载

问题:在前端页面加载不必要的脚本和样式会增加页面加载时间。

解决方案

  • 条件加载资源:只在必要时加载插件的资源文件。

    function myplugin_enqueue_scripts() {
    if (is_page('special-page')) {
    wp_enqueue_style('myplugin-style', plugins_url('css/style.css', FILE));
    wp_enqueue_script('myplugin-script', plugins_url('js/script.js', FILE), array('jquery'), null, true);
    }
    }
    add_action('wp_enqueue_scripts', 'myplugin_enqueue_scripts');

4. 后台任务处理

问题:在前端页面请求中处理耗时任务会导致页面加载缓慢。

解决方案

  • 使用 WP Cron:将耗时任务移至后台处理,避免影响前端性能。

    // Schedule a cron event
    if (!wp_next_scheduled('myplugin_cron_event')) {
    wp_schedule_event(time(), 'hourly', 'myplugin_cron_event');
    }

    // Hook into the cron event
    add_action('myplugin_cron_event', 'myplugin_cron_task');

    function myplugin_cron_task() {
    // Perform the task
    }

5. 高效使用 WordPress API

问题:忽略或错误使用 WordPress API 可能导致性能问题。

解决方案

  • 使用适当的 API:利用 WordPress 提供的 API,如 Transients API、Options API、WP REST API 等,确保高效和安全的操作。

    // 使用 Transients API 缓存数据
    function myplugin_get_data() {
    data = get_transient('myplugin_data'); if (false === data) {
    // Fetch fresh data
    data = 'Expensive Data'; set_transient('myplugin_data', data, 12 * HOUR_IN_SECONDS);
    }
    return $data;
    }

6. 减少插件冲突

问题:多个插件同时运行可能会引起性能问题和冲突。

解决方案

  • 前缀和命名空间:为插件的所有函数、类、变量添加唯一前缀或使用命名空间,避免冲突。
  • 避免全局变量:尽量避免使用全局变量,改用类属性或函数参数。

7. 监控

8. 使用对象缓存

问题:每次请求都重新计算数据或查询数据库会影响性能。

解决方案

  • 对象缓存:利用 WordPress 的对象缓存机制,确保数据在同一个请求中不会被重复计算或查询。

    function myplugin_get_expensive_data() {
    global $wpdb;

    复制代码
      $cache_key = 'myplugin_expensive_data';
      $data = wp_cache_get($cache_key);
    
      if (false === $data) {
          // Perform the expensive operation
          $data = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}my_table");
          wp_cache_set($cache_key, $data);
      }
    
      return $data;

    }

9. 选择合适的数据存储方式

问题:不正确的数据存储方式可能导致性能问题。

解决方案

  • 选择合适的数据存储方式:根据需求选择合适的数据存储方式。例如,使用 WordPress 的 Options API 存储简单设置,使用自定义数据库表存储大量或复杂的数据。

    // 使用 Options API 存储简单设置
    update_option('myplugin_option', $value);

    // 使用自定义数据库表存储复杂数据
    global wpdb; wpdb->insert(
    wpdb->prefix . 'my_custom_table', array( 'column1' => value1,
    'column2' => $value2,
    )
    );

10. 高效处理 AJAX 请求

问题:过多的 AJAX 请求会影响服务器性能。

解决方案

  • 优化 AJAX 请求:减少不必要的 AJAX 请求,合并请求,确保服务器能高效处理。

    // 注册 AJAX 处理函数
    add_action('wp_ajax_myplugin_action', 'myplugin_ajax_handler');
    add_action('wp_ajax_nopriv_myplugin_action', 'myplugin_ajax_handler');

    function myplugin_ajax_handler() {
    // 检查权限和验证
    check_ajax_referer('myplugin_nonce', 'nonce');

    复制代码
      // 处理请求
      $response = array('message' => 'Success');
      wp_send_json_success($response);

    }

11. 避免全局变量和函数

问题:全局变量和函数可能导致命名冲突和性能问题。

解决方案

  • 使用类和命名空间:将代码组织到类和命名空间中,避免全局命名空间污染。

    namespace MyPlugin;

    class Main {
    public function __construct() {
    // 初始化代码
    }

    复制代码
      public function run() {
          // 运行插件
      }

    }

    plugin = new Main(); plugin->run();

12. 使用异步任务处理

问题:长时间运行的任务会导致页面加载缓慢或超时。

解决方案

  • 异步处理:使用后台或异步处理任务,避免影响用户体验。

    // 使用 WP Background Processing 库
    require_once 'path/to/wp-background-processing.php';

    class MyPlugin_Process extends WP_Background_Process {
    protected $action = 'myplugin_process';

    复制代码
      protected function task($item) {
          // 执行单个任务
          return false; // Return false to indicate the task is complete
      }

    }

    process = new MyPlugin_Process(); process->push_to_queue($item)->save()->dispatch();

13. 减少 HTTP 请求

过多的 HTTP 请求会增加页面加载时间。

解决方案

  • 合并和最小化资源:合并和最小化 CSS 和 JavaScript 文件,减少 HTTP 请求数量。

    function myplugin_enqueue_scripts() {
    wp_enqueue_style('myplugin-style', plugins_url('css/style.min.css', FILE));
    wp_enqueue_script('myplugin-script', plugins_url('js/script.min.js', FILE), array('jquery'), null, true);
    }
    add_action('wp_enqueue_scripts', 'myplugin_enqueue_scripts');

14. 使用高效的加载机制

加载不必要的资源会影响性能。

解决方案

  • 延迟加载和条件加载:只在需要时加载资源,提高页面加载速度。

    function myplugin_enqueue_scripts() {
    if (is_page('specific-page')) {
    wp_enqueue_style('myplugin-style', plugins_url('css/style.css', FILE));
    wp_enqueue_script('myplugin-script', plugins_url('js/script.js', FILE), array('jquery'), null, true);
    }
    }
    add

WordPress 插件的版本更新和发布流程

1. 使用版本控制系统

建议:使用 Git 等版本控制系统来管理代码。

  • 版本控制系统:使用 Git 来管理代码的不同版本,跟踪更改和协作开发。

  • 远程仓库:使用 GitHub、GitLab 或 Bitbucket 来存储代码,并便于协作和代码审查。

    初始化 Git 仓库

    git init

    添加远程仓库

    git remote add origin https://github.com/yourusername/your-plugin.git

    提交更改

    git add .
    git commit -m "Initial commit"

    推送到远程仓库

    git push origin master

2. 遵循语义化版本号

遵循语义化版本号(Semantic Versioning),以便清晰地传达版本变化的影响。

  • 语义化版本号
    • 主版本号 (Major): 重大变更,可能不向后兼容。

    • 次版本号 (Minor): 新功能,向后兼容。

    • 修订号 (Patch): 小修复,向后兼容。

      MAJOR.MINOR.PATCH

3. 自动化构建和测试

使用自动化工具来构建和测试插件。

  • 构建工具:使用 Grunt、Gulp 或 Webpack 自动化构建任务,如代码压缩、CSS 预处理等。

  • 持续集成:使用 Travis CI、GitHub Actions 或 GitLab CI 自动化测试和部署流程。

    GitHub Actions 示例

    name: CI

    on:
    push:
    branches: [ "main" ]
    pull_request:
    branches: [ "main" ]

    jobs:
    build:
    runs-on: ubuntu-latest

    复制代码
      steps:
      - uses: actions/checkout@v2
      - name: Set up PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '7.4'
      - name: Install dependencies
        run: composer install
      - name: Run tests
        run: vendor/bin/phpunit

4. 更新日志和发布说明

维护详细的更新日志(Changelog),记录每个版本的更改内容。

  • Changelog 文件 :在项目根目录下创建 CHANGELOG.md 文件,记录每次发布的更改内容。

    Changelog

    [1.2.0] - 2024-06-11

    Added

    • 新增了一个功能

    Fixed

    • 修复了一个 bug

    [1.1.1] - 2024-05-01

    Fixed

    • 修复了一个重大安全漏洞

5. 版本发布流程

定义清晰的版本发布流程,确保每次发布的质量。

  • 开发分支和发布分支 :使用 Git 分支策略,如 main 分支用于发布,develop 分支用于开发。

  • 发布标签:在每次发布时创建 Git 标签。

    创建发布标签

    git tag -a v1.2.0 -m "Release version 1.2.0"
    git push origin v1.2.0

6. 管理插件目录

利用 WordPress 插件目录发布和更新插件。

  • SVN 仓库:如果你在 WordPress 插件目录发布插件,需要使用 SVN 来管理。

    检出 SVN 仓库

    svn co https://plugins.svn.wordpress.org/your-plugin-name/

    添加新版本

    svn add trunk/* --force

    提交更改

    svn commit -m "Release version 1.2.0"

7. 用户反馈和支持

收集用户反馈,及时修复问题和发布更新。

  • 支持渠道:提供明确的支持渠道,如支持论坛、电子邮件或 GitHub Issues。
  • 反馈机制:利用插件内的反馈机制,收集用户的意见和建议。

8. 文档和教程

提供详细的文档和教程,帮助用户理解和使用插件。

  • README 文件 :在项目根目录下创建 README.md 文件,提供安装、使用
相关推荐
hotlinhao1 小时前
php版的FormCreate使用注意事项
php·crmeb
uzong5 小时前
技术故障复盘模版
后端
GetcharZp5 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程6 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研6 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi6 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国7 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy7 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
鱼鱼说测试8 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
AntBlack8 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt