<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>隶笔难书</title><link>https://waite.wang/</link><description>Recent content on 隶笔难书</description><generator>Hugo -- 0.147.2</generator><language>zh-cn</language><managingEditor>waite@waite.wang (Waite)</managingEditor><webMaster>waite@waite.wang (Waite)</webMaster><lastBuildDate>Tue, 02 Jun 2026 07:30:38 +0000</lastBuildDate><atom:link href="https://waite.wang/index.xml" rel="self" type="application/rss+xml"/><item><title>Hello—Agent-1</title><link>https://waite.wang/posts/ai/learn-agent-1/</link><pubDate>Tue, 02 Jun 2026 07:30:38 +0000</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/ai/learn-agent-1/</guid><description>&lt;h2 id="agent-基础">Agent 基础&lt;/h2>
&lt;h3 id="agent-的本质">Agent 的本质&lt;/h3>
&lt;p>Agent 就是一个&lt;strong>能自己干活的 AI&lt;/strong>。&lt;/p>
&lt;p>更工程一点：你给它一个目标、一个工具箱和一套边界（预算 / 权限 / 审批 / 沙箱），它在循环里推进任务，直到完成或停下。&lt;/p></description></item><item><title>Sentry 的安装部署以及邮件无法发送问题解决</title><link>https://waite.wang/posts/tools/sentry-can-not-get-mail/</link><pubDate>Wed, 17 Dec 2025 10:05:54 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/tools/sentry-can-not-get-mail/</guid><description>&lt;h2 id="安装">安装&lt;/h2>
&lt;blockquote>
&lt;p>注意 这里安装的是 Sentry 9.1.2 版本，该版本是 Docker 仓库支持的最后一个版本，对服务器要求较低。如果服务器支持，可以安装最新版本，安装方法会有所不同，具体可以参考官方文档
&lt;a href="https://develop.sentry.dev/self-hosted/" target="_blank" >https://develop.sentry.dev/self-hosted/&lt;/a>&lt;/p></description></item><item><title>K8S 学习笔记（一）—— 集群的启动以及部署</title><link>https://waite.wang/posts/k8s/k8s-learn-1/</link><pubDate>Mon, 01 Dec 2025 09:05:54 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/k8s/k8s-learn-1/</guid><description>&lt;h2 id="集群的启动以及部署">集群的启动以及部署&lt;/h2>
&lt;h3 id="kubectl">kubectl&lt;/h3>
&lt;blockquote>
&lt;p>
&lt;a href="https://kubernetes.io/docs/tasks/tools/#kubectl" target="_blank" >https://kubernetes.io/docs/tasks/tools/#kubectl&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>Kubernetes 命令行工具
&lt;a href="https://kubernetes.io/docs/reference/kubectl/kubectl/" target="_blank" >kubectl&lt;/a>允许您对 Kubernetes 集群运行命令。您可以使用 kubectl 部署应用程序、检查和管理集群资源以及查看日志。有关更多信息（包括 kubectl 操作的完整列表），请参阅
&lt;a href="https://kubernetes.io/docs/reference/kubectl/" target="_blank" >&lt;code>kubectl&lt;/code>参考文档&lt;/a>。&lt;/p></description></item><item><title>Vue PDF 预览与标注实现解析</title><link>https://waite.wang/posts/vue/pdf-preview-and-annotation/</link><pubDate>Tue, 11 Nov 2025 12:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/vue/pdf-preview-and-annotation/</guid><description>&lt;p>最近在做一个文件预览功能，需要在浏览器里展示 PDF 并支持位置标记和缩放。折腾了一段时间，把实现思路整理一下。&lt;/p>
&lt;h2 id="pdf-渲染">PDF 渲染&lt;/h2>
&lt;p>PDF 在浏览器里渲染，直接用 &lt;code>@tato30/vue-pdf&lt;/code> 这个库。它基于 pdf.js，用起来还算顺手。&lt;/p></description></item><item><title>WebSocket连接管理与Redis集成实现</title><link>https://waite.wang/posts/python/ws_connect_manage_with_redis/</link><pubDate>Thu, 21 Aug 2025 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/python/ws_connect_manage_with_redis/</guid><description>&lt;p>在构建分布式聊天系统时，我们面临着一个核心挑战：如何在多个服务器实例之间有效管理WebSocket连接，并确保消息能够准确传递到正确的机器人客户端。本文详细介绍了解决方案，包括Redis集成、跨实例消息转发、心跳机制等关键技术实现。&lt;/p></description></item><item><title>Python 实践网页报告生成与邮件分发</title><link>https://waite.wang/posts/python/web-report-generation-and-email-distribution/</link><pubDate>Wed, 07 May 2025 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/python/web-report-generation-and-email-distribution/</guid><description>&lt;h2 id="项目背景">项目背景&lt;/h2>
&lt;p>在现代化应用中，自动化报告生成和邮件分发是常见的需求。本文将介绍两个 Python 工具模块：&lt;code>long_screenshot.py&lt;/code> 和 &lt;code>send_email.py&lt;/code>，它们分别负责网页长截图和邮件发送功能，可以协同工作，实现从网页截图到邮件分发的完整流程。&lt;/p></description></item><item><title>Vue+Flask实现一个最基础的LLM请求响应以及渲染</title><link>https://waite.wang/posts/ai/vue-and-flask-to-do-a-basic-llm-result-and-render/</link><pubDate>Fri, 28 Mar 2025 07:30:38 +0000</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/ai/vue-and-flask-to-do-a-basic-llm-result-and-render/</guid><description>&lt;h2 id="后端请求">后端请求&lt;/h2>
&lt;blockquote>
&lt;p>后端封装&lt;/p>&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">abc&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">ABC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">abstractmethod&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">openai&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">OpenAI&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">config&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">BaseAIService&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ABC&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;AI服务的抽象基类&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nd">@abstractmethod&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">get_stream_completion&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">messages&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;获取流式响应&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">pass&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nd">@abstractmethod&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">process_stream_response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;处理流式响应&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">pass&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">class&lt;/span> &lt;span class="nc">HuoShanAIService&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">BaseAIService&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;火山引擎 AI 服务实现&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">config&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">config&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">HUO_SHAN_COMPLETION_CONFIG&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">OpenAI&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">api_key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">config&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;api_key&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">base_url&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">config&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;base_url&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">get_stream_completion&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">messages&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;获取流式响应&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">chat&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">completions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">config&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;fast_llm&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messages&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">messages&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">temperature&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mf">0.3&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">top_p&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_tokens&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">8192&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">stream&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">process_stream_response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;处理流式响应&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">reasoning_content&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">answer_content&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">is_answering&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">False&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">chunk&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">chunk&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">choices&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">chunk&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">choices&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">delta&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">continue&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">delta&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">chunk&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">choices&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">delta&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 处理思考过程&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="nb">hasattr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">delta&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;reasoning_content&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">delta&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">reasoning_content&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">reasoning_text&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">delta&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">reasoning_content&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">reasoning_text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">end&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">flush&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">reasoning_content&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">reasoning_text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">yield&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;__r__&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">reasoning_text&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;utf-8&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">errors&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;ignore&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 处理回复内容&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="nb">hasattr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">delta&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;content&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">delta&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">content&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">is_answering&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;=&amp;#34;&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;完整回复&amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;=&amp;#34;&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">20&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">is_answering&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">content_text&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">delta&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">content&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">content_text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">end&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">flush&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">answer_content&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">content_text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">yield&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;__a__&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">content_text&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;utf-8&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">errors&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;ignore&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">UnicodeEncodeError&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Encoding error: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">continue&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Error processing chunk: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">yield&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;__a__处理响应时发生错误: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;utf-8&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">errors&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;ignore&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Stream processing error: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">yield&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;__a__处理流式响应时发生错误: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;utf-8&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">errors&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;ignore&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">get_ai_service&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">provider&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;huoshan&amp;#34;&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;工厂函数，根据提供商返回对应的 AI 服务实例&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">providers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;huoshan&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">HuoShanAIService&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 未来可以添加其他提供商&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># &amp;#34;openai&amp;#34;: OpenAIService,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># &amp;#34;azure&amp;#34;: AzureAIService,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">service_class&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">providers&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">provider&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">service_class&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">raise&lt;/span> &lt;span class="ne">ValueError&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;不支持的 AI 提供商: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">provider&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">service_class&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>调用并且返回值&lt;/p></description></item><item><title>Vue 实现公历,农历日期选择效果</title><link>https://waite.wang/posts/vue/vue-for-gregorian-lunar-calendar-date-selection/</link><pubDate>Sat, 22 Mar 2025 21:05:54 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/vue/vue-for-gregorian-lunar-calendar-date-selection/</guid><description>Vue 学习笔记-系统学习 Pinia</description></item><item><title>单例模式以及事件管理器在 Cocos 中的应用</title><link>https://waite.wang/posts/cocos/cocos-with-singleton-and-event-manager/</link><pubDate>Thu, 13 Mar 2025 07:30:38 +0000</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/cocos/cocos-with-singleton-and-event-manager/</guid><description>&lt;h2 id="单例模式">单例模式&lt;/h2>
&lt;p>单例模式是设计模式中最常用的模式之一，它确保一个类只有一个实例，并提供一个全局访问点。在游戏开发中，单例模式尤其有用，因为它能够有效地管理全局资源和状态。&lt;/p></description></item><item><title>Cursor 无限续杯方案</title><link>https://waite.wang/posts/tools/cursor-forever-free/</link><pubDate>Sun, 12 Jan 2025 20:55:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/tools/cursor-forever-free/</guid><description>Cursor 无限续杯.</description></item><item><title>博客迁移小记</title><link>https://waite.wang/posts/blog/first-post-in-hugo/</link><pubDate>Sat, 28 Dec 2024 11:30:03 +0000</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/blog/first-post-in-hugo/</guid><description>这里是副标题.</description></item><item><title>使用Cursor+DevBox 从零创建一个 TodeList 网页应用</title><link>https://waite.wang/posts/project/use-cursor-and-devbox-to-create-todelis-web/</link><pubDate>Fri, 27 Dec 2024 22:02:05 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/project/use-cursor-and-devbox-to-create-todelis-web/</guid><description>使用Cursor+DevBox 从零创建一个 TodeList 网页应用</description></item><item><title>Http 基础</title><link>https://waite.wang/posts/web/http-basic/</link><pubDate>Wed, 23 Oct 2024 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/web/http-basic/</guid><description>&lt;h1 id="http">HTTP&lt;/h1>
&lt;ul>
&lt;li>[HTTP&lt;/li>
&lt;li>](#http)
&lt;ul>
&lt;li>
&lt;p>
&lt;a href="#%e4%b8%80-%e5%9f%ba%e7%a1%80%e6%a6%82%e5%bf%b5" target="_blank" >一 、基础概念&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="#%e8%af%b7%e6%b1%82%e5%92%8c%e5%93%8d%e5%ba%94%e6%8a%a5%e6%96%87" target="_blank" >请求和响应报文&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#url" target="_blank" >URL&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>
&lt;a href="#%e4%ba%8chttp-%e6%96%b9%e6%b3%95" target="_blank" >二、HTTP 方法&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="#get" target="_blank" >GET&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#head" target="_blank" >HEAD&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#post" target="_blank" >POST&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#put" target="_blank" >PUT&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#patch" target="_blank" >PATCH&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#delete" target="_blank" >DELETE&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#options" target="_blank" >OPTIONS&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#connect" target="_blank" >CONNECT&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#trace" target="_blank" >TRACE&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>
&lt;a href="#%e4%b8%89http-%e7%8a%b6%e6%80%81%e7%a0%81" target="_blank" >三、HTTP 状态码&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="#1xx-%e4%bf%a1%e6%81%af" target="_blank" >1XX 信息&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#2xx-%e6%88%90%e5%8a%9f" target="_blank" >2XX 成功&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#3xx-%e9%87%8d%e5%ae%9a%e5%90%91" target="_blank" >3XX 重定向&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#4xx-%e5%ae%a2%e6%88%b7%e7%ab%af%e9%94%99%e8%af%af" target="_blank" >4XX 客户端错误&lt;/a>&lt;/li>
&lt;li>
&lt;a href="#5xx-%e6%9c%8d%e5%8a%a1%e5%99%a8%e9%94%99%e8%af%af" target="_blank" >5XX 服务器错误&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>
&lt;a href="#%e5%9b%9bhttp-%e9%a6%96%e9%83%a8" target="_blank" >四、HTTP 首部&lt;/a>&lt;/p></description></item><item><title>静态文档 Github 自动同步服务器</title><link>https://waite.wang/posts/tools/static-document-compilation-automatic-synchronization-server/</link><pubDate>Fri, 28 Jun 2024 22:05:32 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/tools/static-document-compilation-automatic-synchronization-server/</guid><description>&lt;h1 id="vuepress-或部分静态文档自动同步服务器">Vuepress 或部分静态文档自动同步服务器&lt;/h1>
&lt;blockquote>
&lt;p>使用 Github action 加服务器 git commit hash 匹配&lt;/p>
&lt;p>本文以 Vuepress 为例子, 其他同理&lt;/p>
&lt;p>请确保 服务器 安装 git 环境, 本文不再赘述&lt;/p>&lt;/blockquote>
&lt;h2 id="github-action">Github Action&lt;/h2>
&lt;blockquote>
&lt;p>原理: 通过 Github Action 工作流把代码编译并且部署到 gh_pages 分支&lt;/p></description></item><item><title>Django自带 Auth 数据库扩展字段</title><link>https://waite.wang/posts/python/django-comes-with-auth-database/</link><pubDate>Sat, 22 Jun 2024 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/python/django-comes-with-auth-database/</guid><description>&lt;h2 id="auth模块的介绍">auth模块的介绍&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>1、导包&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">django.contrib&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">auth&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>2、默认使用&lt;code>auth_user&lt;/code>表来存储用户数据&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 默认用户表是位置&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">django.contrib.auth.models&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">User&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sql" data-lang="sql">&lt;span class="line">&lt;span class="cl">&lt;span class="n">mysql&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">show&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">tables&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="c1">----------------------------+
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Tables_in_django_rest01&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="c1">----------------------------+
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">auth_group&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">auth_group_permissions&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">auth_permission&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">auth_user&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">auth_user_groups&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">auth_user_user_permissions&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">django_admin_log&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">django_content_type&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">django_migrations&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">django_session&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="c1">----------------------------+
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">rows&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">in&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">set&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="mi">00&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">sec&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">auth_group&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">存储用户组信息。每个用户组可以有多个权限。&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">auth_group_permissions&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">存储用户组和权限的关联关系。一个用户组可以有多个权限。&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">auth_permission&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">存储系统中定义的所有权限。权限通常与特定的模型和操作相关联。&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">auth_user&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">存储用户账户信息，如用户名、密码、电子邮件等。&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">auth_user_groups&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">存储用户和用户组的关联关系。一个用户可以属于多个用户组。&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">auth_user_user_permissions&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">存储用户特定的权限，这些权限不会通过用户组继承。&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">django_admin_log&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">存储管理站点的操作日志，如添加、更改或删除记录。&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">django_content_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">存储&lt;/span>&lt;span class="n">Django中所有模型的元数据&lt;/span>&lt;span class="err">，包括&lt;/span>&lt;span class="n">app_label和model字段&lt;/span>&lt;span class="err">，用于确定对象类型。&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">django_migrations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">存储关于应用的迁移历史信息，包括迁移的名称和应用时间。&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">django_session&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">存储会话数据，用于支持&lt;/span>&lt;span class="n">Django的会话框架&lt;/span>&lt;span class="err">。&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sql" data-lang="sql">&lt;span class="line">&lt;span class="cl">&lt;span class="n">mysql&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">desc&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">auth_user&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="c1">--------------+--------------+------+-----+---------+----------------+
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Field&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">Type&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">Null&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">Key&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">Default&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Extra&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="c1">--------------+--------------+------+-----+---------+----------------+
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">id&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">11&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">PRI&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NULL&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">auto_increment&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">password&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nb">varchar&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">128&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NULL&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">last_login&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">datetime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">YES&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NULL&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">is_superuser&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">tinyint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NULL&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">username&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nb">varchar&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">150&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">UNI&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NULL&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">first_name&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nb">varchar&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">30&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NULL&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">last_name&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nb">varchar&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">150&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NULL&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">email&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nb">varchar&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">254&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NULL&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">is_staff&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">tinyint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NULL&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">is_active&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">tinyint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NULL&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">date_joined&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">datetime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">NULL&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="c1">--------------+--------------+------+-----+---------+----------------+
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="mi">11&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">rows&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">in&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">set&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="mi">01&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">sec&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">mysql&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="常用方法">常用方法&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>1、&lt;code>authenticate()&lt;/code>用来校验用户名及密码&lt;/p></description></item><item><title>uniapp+vite+vue3+ts配置eslint代码检查及prettier规范检查</title><link>https://waite.wang/posts/mini-program/create-uniapp-standard/</link><pubDate>Thu, 02 May 2024 20:49:12 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/mini-program/create-uniapp-standard/</guid><description>这里是副标题.</description></item><item><title>鸿蒙学习笔记3</title><link>https://waite.wang/posts/harmony/learn-harmony-3/</link><pubDate>Sat, 06 Apr 2024 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/harmony/learn-harmony-3/</guid><description>&lt;h2 id="stage-模型">Stage 模型&lt;/h2>
&lt;p>
&lt;a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/start-with-ets-stage-0000001477980905-V2" target="_blank" >https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/start-with-ets-stage-0000001477980905-V2&lt;/a>&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://qiniu.waite.wang/202404271535958.png">&lt;/p>
&lt;blockquote>
&lt;p>一个应用只能有一个 @EntryAbility，但可以有多个 @PageAbility。&lt;/p>&lt;/blockquote>
&lt;h3 id="stage模型目录结构">（Stage模型）目录结构&lt;/h3>
&lt;p>&lt;img loading="lazy" src="https://qiniu.waite.wang/202404181340550.png">&lt;/p>
&lt;ul>
&lt;li>AppScope &amp;gt; app.json5：应用的全局配置信息。&lt;/li>
&lt;li>entry：HarmonyOS工程模块，编译构建生成一个HAP包。
&lt;ul>
&lt;li>src &amp;gt; main &amp;gt; ets：用于存放ArkTS源码。
src &amp;gt; main &amp;gt; ets &amp;gt; entryability：应用/服务的入口。&lt;/li>
&lt;li>src &amp;gt; main &amp;gt; ets &amp;gt; pages：应用/服务包含的页面&lt;/li>
&lt;li>src &amp;gt; main &amp;gt; resources：用于存放应用/服务所用到的资源文件，如图形、多媒体、字符串、布局文件等。关于资源文件，详见资源分类与访问。&lt;/li>
&lt;li>src &amp;gt; main &amp;gt; module.json5：Stage模型模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。具体的配置文件说明，详见
&lt;a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/module-configuration-file-0000001427744540-V2" target="_blank" >module.json5配置文件&lt;/a>。&lt;/li>
&lt;li>build-profile.json5：当前的模块信息、编译信息配置项，包括buildOption、targets配置等。其中targets中可配置当前运行环境，默认为HarmonyOS。&lt;/li>
&lt;li>hvigorfile.ts：模块级编译构建任务脚本，开发者可以自定义相关任务和代码实现。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>oh_modules：用于存放三方库依赖信息。关于原npm工程适配ohpm操作，请参考历史工程迁移。&lt;/li>
&lt;li>build-profile.json5：应用级配置信息，包括签名、产品配置等。&lt;/li>
&lt;li>hvigorfile.ts：应用级编译构建任务脚本。&lt;/li>
&lt;/ul>
&lt;h3 id="应用配置文件">应用配置文件&lt;/h3>
&lt;p>
&lt;a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/14d_u7f6e_u6587_u4ef6_uff08stage_u6a21_u578b_uff09-0000001427902192-V2" target="_blank" >https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/14d_u7f6e_u6587_u4ef6_uff08stage_u6a21_u578b_uff09-0000001427902192-V2&lt;/a>&lt;/p></description></item><item><title>鸿蒙学习笔记2</title><link>https://waite.wang/posts/harmony/learn-harmony-2/</link><pubDate>Fri, 29 Mar 2024 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/harmony/learn-harmony-2/</guid><description>&lt;h2 id="页面路由">页面路由&lt;/h2>
&lt;p>页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块，通过不同的url地址，可以方便地进行页面路由，轻松地访问不同的页面。&lt;/p></description></item><item><title>鸿蒙学习笔记1</title><link>https://waite.wang/posts/harmony/learn-harmony-1/</link><pubDate>Sat, 23 Mar 2024 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/harmony/learn-harmony-1/</guid><description>&lt;h2 id="编辑器安装">编辑器安装&lt;/h2>
&lt;h3 id="安装">安装&lt;/h3>
&lt;ol>
&lt;li>
&lt;a href="https://developer.huawei.com/consumer/cn/deveco-studio/#download" target="_blank" >下载安装包&lt;/a>&lt;/li>
&lt;li>正常安装包, 下一步安装&lt;/li>
&lt;/ol>
&lt;p>&lt;img alt="image-20240417121723826" loading="lazy" src="https://qiniu.waite.wang/202404171217774.png">&lt;/p>
&lt;ol start="3">
&lt;li>配置开发环境&lt;/li>
&lt;/ol>
&lt;p>&lt;img alt="image-20240417121810196" loading="lazy" src="https://qiniu.waite.wang/202404171218425.png">&lt;/p>
&lt;p>选择 Agree, 进入配置选择页面, 选择不导入配置&lt;/p>
&lt;p>&lt;img alt="image-20240417121841096" loading="lazy" src="https://qiniu.waite.wang/202404171218109.png">&lt;/p>
&lt;p>选择要安装的Node.is和hpm位置，其中ohpm是Open Harmony Package Management的缩写，也就是类似npm的包管理工具。这里有几点注意事项:&lt;/p></description></item><item><title>UniApp 入门</title><link>https://waite.wang/posts/mini-program/learn-uniapp-1/</link><pubDate>Sat, 02 Mar 2024 20:46:38 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/mini-program/learn-uniapp-1/</guid><description>UniApp 学习笔记</description></item><item><title>vue 项目规范设置</title><link>https://waite.wang/posts/vue/vue-project-construction-specification/</link><pubDate>Mon, 22 Jan 2024 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/vue/vue-project-construction-specification/</guid><description>&lt;h2 id="集成editorconfig配置">集成editorconfig配置&lt;/h2>
&lt;p>EditorConfig 有助于为不同 IDE 编辑器上处理同一项目的多个开发人员维护一致的编码风格。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># http://editorconfig.org&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">root = true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="cp">*]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 表示所有文件适用&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">charset = utf-8&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 设置文件字符集为 utf-8&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">indent_style = space&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 缩进风格（tab | space）&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">indent_size = 2&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 缩进大小&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">end_of_line = lf&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 控制换行类型(lf | cr | crlf)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">trim_trailing_whitespace = true&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 去除行首的任意空白字符&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">insert_final_newline = true&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 始终在文件末尾插入一个新行&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="cp">*.md]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 表示仅 md 文件适用以下规则&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">max_line_length = off&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">trim_trailing_whitespace = false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>VSCode需要安装一个插件：EditorConfig for VS Code&lt;/p></description></item><item><title>Vue3 CompositionAPI</title><link>https://waite.wang/posts/vue/vue3-compositionapi/</link><pubDate>Fri, 29 Dec 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/vue/vue3-compositionapi/</guid><description>&lt;h2 id="options-api的弊端">Options API的弊端&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>在Vue2中，我们编写组件的方式是Options API：&lt;/p>
&lt;ul>
&lt;li>Options API的一大特点就是在对应的属性中编写对应的功能模块；&lt;/li>
&lt;li>比如data定义数据、methods中定义方法、computed中定义计算属性、watch中监听属性改变，也包括生命 周期钩子；&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>但是这种代码有一个很大的弊端：&lt;/p></description></item><item><title>七牛云 + Typora + PicGo</title><link>https://waite.wang/posts/tools/qiniucloud-typora-picgo/</link><pubDate>Thu, 28 Dec 2023 22:05:32 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/tools/qiniucloud-typora-picgo/</guid><description>&lt;blockquote>
&lt;p>Typora 免费版本:
&lt;a href="https://github.com/L1ne-cd/Typora_Unlocker" target="_blank" >https://github.com/L1ne-cd/Typora_Unlocker&lt;/a>&lt;/p>&lt;/blockquote>
&lt;h2 id="七牛云">七牛云&lt;/h2>
&lt;blockquote>
&lt;p>七牛云:
&lt;a href="https://www.qiniu.com/" target="_blank" >https://www.qiniu.com/&lt;/a>&lt;/p>&lt;/blockquote>
&lt;ol>
&lt;li>注册实名 2. 对象存储, 新建空间&lt;/li>
&lt;/ol>
&lt;p>&lt;img alt="1" loading="lazy" src="http://qiniu.waite.wang/1.png">&lt;/p>
&lt;ol start="3">
&lt;li>选择离你最近的存储区域(建议服务器哪的就选哪个区) 访问控制选择公有&lt;/li>
&lt;/ol>
&lt;p>&lt;img alt="image-20230529224621032" loading="lazy" src="http://qiniu.waite.wang/image-20230529224621032.png">&lt;/p>
&lt;ol start="4">
&lt;li>个人中心 &amp;gt; 密钥管理 &amp;gt; 复制待用&lt;/li>
&lt;/ol>
&lt;p>&lt;img alt="image-20230529224726314" loading="lazy" src="http://qiniu.waite.wang/image-20230529224726314.png">&lt;/p></description></item><item><title>Pinia 数据持久化储存（pinia-plugin-persistedstate）</title><link>https://waite.wang/posts/web/pinia-plugin-persistedstate/</link><pubDate>Wed, 22 Nov 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/web/pinia-plugin-persistedstate/</guid><description>&lt;p>pinia需要使用pinia-plugin-persistedstate插件来进行数据的存储
插件官网地址：
&lt;a href="https://prazdevs.github.io/pinia-plugin-persistedstate/guide/config.html" target="_blank" >https://prazdevs.github.io/pinia-plugin-persistedstate/guide/config.html&lt;/a>&lt;/p>
&lt;h2 id="安装以及使用">安装以及使用&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">pnpm i pinia-plugin-persistedstate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">npm i pinia-plugin-persistedstate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">yarn add pinia-plugin-persistedstate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">createPinia&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s1">&amp;#39;pinia&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="nx">piniaPluginPersistedstate&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s1">&amp;#39;pinia-plugin-persistedstate&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">pinia&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">createPinia&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">pinia&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">use&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">piniaPluginPersistedstate&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="关于全部缓存及部分缓存的说明">关于全部缓存及部分缓存的说明&lt;/h2>
&lt;p>（1）将store的state中的全部数据进行缓存，直接在state同级下面添加persist对象&lt;/p></description></item><item><title>系统学习 Pinia</title><link>https://waite.wang/posts/vue/system-learn-pinia-1/</link><pubDate>Sat, 11 Nov 2023 21:05:54 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/vue/system-learn-pinia-1/</guid><description>Vue 学习笔记-系统学习 Pinia</description></item><item><title>系统学习 VueX 1</title><link>https://waite.wang/posts/vue/system-learn-vuex-1/</link><pubDate>Sat, 11 Nov 2023 21:05:54 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/vue/system-learn-vuex-1/</guid><description>Vue 学习笔记-VueX</description></item><item><title>Vue3 基本指令(二)</title><link>https://waite.wang/posts/vue/vue3-learn-2/</link><pubDate>Sun, 22 Oct 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/vue/vue3-learn-2/</guid><description>&lt;blockquote>
&lt;p>本文章来源于王红元老师（coderwhy）的 Vue3 + Ts 课程第二章节 - Vue3 基本指令附上链接：https//ke.qq.com/course/3453141
permalink: /archives/vue3-ji-ben-zhi-ling-er&lt;/p></description></item><item><title>邂逅 Vue3 开发(一)</title><link>https://waite.wang/posts/vue/vue3-learn-1/</link><pubDate>Sat, 30 Sep 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/vue/vue3-learn-1/</guid><description>&lt;blockquote>
&lt;p>本文章来源于王红元老师（coderwhy）的 Vue3 + Ts 课程第二章节 - Vue3 基本指令附上链接：https//ke.qq.com/course/3453141
permalink: /archives/vue3-ji-ben-zhi-ling-er&lt;/p></description></item><item><title>Windows11家庭中文版系统安装Docker</title><link>https://waite.wang/posts/win/win11-install-docker/</link><pubDate>Sun, 24 Sep 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/win/win11-install-docker/</guid><description>&lt;hr>
&lt;p>title: Windows11家庭中文版系统安装Docker
id: a293d46a-9b4e-4e42-8bbc-0bcec5c21662
date: 2023-09-24 22:29:15
auther: admin
cover:&lt;/p>
&lt;h2 id="安装到-d-盘软链接">安装到 D 盘(软链接)&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker 默认安装路劲为 C:&lt;span class="se">\P&lt;/span>rogram Files&lt;span class="se">\D&lt;/span>ocker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker 虚拟磁盘默认安装路劲为 C:&lt;span class="se">\U&lt;/span>sers&lt;span class="se">\&amp;lt;&lt;/span>YourName&amp;gt;&lt;span class="se">\A&lt;/span>ppData&lt;span class="se">\L&lt;/span>ocal&lt;span class="se">\D&lt;/span>ocker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol>
&lt;li>用 &lt;strong>管理员身份打开cmd窗口&lt;/strong>&lt;/li>
&lt;li>执行如下命令&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mklink /j &lt;span class="s2">&amp;#34;C:\Program Files\Docker&amp;#34;&lt;/span> &lt;span class="s2">&amp;#34;D:\Program Files\Docker&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>已经安装Docker，需要重新再安装一次。&lt;/li>
&lt;li>安装后C盘下的Docker文件就只是一个软链接了，映射的真实路径在D盘Docker文件夹下(注意: 软链接后需要在相应目录创建文件夹, 不然后续安装会报错)&lt;/li>
&lt;/ol>
&lt;h2 id="hyper-vr">Hyper-Vr&lt;/h2>
&lt;blockquote>
&lt;p>查看自己的系统, 如果你的系统跟我一样是window11家庭
&lt;a href="https://so.csdn.net/so/search?q=%e4%b8%ad%e6%96%87%e7%89%88&amp;amp;spm=1001.2101.3001.7020" target="_blank" >中文版&lt;/a>，则会找不到Hyper-Vr，这时则需要自己创建，讲下述代码复制在txt文本里，并重命名为Hyper.cmd，右键以管理员方式运行，最后输入“Y”重启电脑后即可。&lt;/p></description></item><item><title>cookie、session和localStorage的区别</title><link>https://waite.wang/posts/web/difference-between-cookie-session-localstorage/</link><pubDate>Fri, 22 Sep 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/web/difference-between-cookie-session-localstorage/</guid><description>&lt;h2 id="概念的理解">概念的理解&lt;/h2>
&lt;h3 id="webstorage本地存储">webstorage本地存储&lt;/h3>
&lt;ol>
&lt;li>webstorage是本地存储，存储在客户端，包括localStorage和sessionStorage&lt;/li>
&lt;li>localStorage生命周期是永久，这意味着除非用户显示在浏览器提供的UI上清除localStorage信息，否则这些信息将永远存在。存放数据大小为一般为5MB,而且它仅在客户端（即浏览器）中保存，不参与和服务器的通信&lt;/li>
&lt;li>sessionStorage仅在当前会话下有效，关闭页面或浏览器后被清除。存放数据大小为一般为5MB,而且它仅在客户端（即浏览器）中保存，不参与和服务器的通信。源生接口可以接受，亦可再次封装来对Object和Array有更好的支持&lt;/li>
&lt;li>WebStorage的目标 提供一种在cookie之外存储会话数据的路径 提供一种存储大量可以跨会话存在的数据的机制 HTML5的WebStorage提供了两种API：localStorage（本地存储）和sessionStorage（会话存储）&lt;/li>
&lt;li>作用域的不同： 不同浏览器无法共享localStorage或sessionStorage中的信息。相同浏览器的不同页面间可以共享相同的 localStorage（页面属于相同域名和端口），但是不同页面或标签页间无法共享sessionStorage的信息。这里需要注意的是，页面及标 签页仅指顶级窗口，如果一个标签页包含多个iframe标签且他们属于同源页面，那么他们之间是可以共享sessionStorage的&lt;/li>
&lt;li>存储大小： localStorage和sessionStorage的存储数据大小一般都是：5MB&lt;/li>
&lt;li>存储位置： localStorage和sessionStorage都保存在客户端，不与服务器进行交互通信&lt;/li>
&lt;li>存储内容类型： localStorage和sessionStorage只能存储字符串类型，对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理&lt;/li>
&lt;li>获取方式： localStorage：window.localStorage;；sessionStorage：window.sessionStorage;&lt;/li>
&lt;li>应用场景： localStoragese：常用于长期登录（+判断用户是否已登录），适合长期保存在本地的数据，而sessionStorage：敏感账号一次性登录&lt;/li>
&lt;li>WebStorage的优点： 存储空间更大：cookie为4KB，而WebStorage是5MB 节省网络流量：WebStorage不会传送到服务器，存储在本地的数据可以直接获取，也不会像cookie一样美词请求都会传送到服务器，所以减少了客户端和服务器端的交互，节省了网络流量 对于那种只需要在用户浏览一组页面期间保存而关闭浏览器后就可以丢弃的数据，sessionStorage会非常方便 快速显示：有的数据存储在WebStorage上，再加上浏览器本身的缓存。获取数据时可以从本地获取会比从服务器端获取快得多，所以速度更快 安全性：WebStorage不会随着HTTP header发送到服务器端，所以安全性相对于cookie来说比较高一些，不会担心截获，但是仍然存在伪造问题 WebStorage提供了一些方法，数据操作比cookie方便 setItem (key, value) —— 保存数据，以键值对的方式储存信息。 getItem (key) —— 获取数据，将键值传入，即可获取到对应的value值。 removeItem (key) —— 删除单个数据，根据键值移除对应的信息。 clear () —— 删除所有的数据 key (index) —— 获取某个索引的key&lt;/li>
&lt;/ol>
&lt;h3 id="cookie">cookie&lt;/h3>
&lt;ol>
&lt;li>HTTP Cookie简称cookie,在HTTP请求发送Set-Cookie HTTP头作为响应的一部分。通过name=value的形式存储&lt;/li>
&lt;li>cookie的构成： 名称：name(不区分大小写,但最好认为它是区分的) 值:value(通过URL编码:encodeURIComponent) 域 路径 失效时间:一般默认是浏览器关闭失效,可以自己设置失效时间 安全标志:设置安全标志后只有SSL连接的时候才发送到服务器&lt;/li>
&lt;li>cookie的作用:主要用于保存登录信息&lt;/li>
&lt;li>生命期为只在设置的cookie过期时间之前一直有效，即使窗口或浏览器关闭。 存放数据大小为4K左右 。有个数限制（各浏览器不同），一般不能超过20个。与服务器端通信：每次都会携带在HTTP头中，如果使用cookie保存过多数据会带来性能问题&lt;/li>
&lt;li>cookie的优点：具有极高的扩展性和可用性 通过良好的编程，控制保存在cookie中的session对象的大小 通过加密和安全传输技术，减少cookie被破解的可能性 只有在cookie中存放不敏感的数据，即使被盗取也不会有很大的损失 控制cookie的生命期，使之不会永远有效。这样的话偷盗者很可能拿到的就 是一个过期的cookie&lt;/li>
&lt;li>cookie的缺点： cookie的长度和数量的限制。每个domain最多只能有20条cookie，每个cookie长度不能超过4KB，否则会被截掉 安全性问题。如果cookie被人拦掉了，那个人就可以获取到所有session信息。加密的话也不起什么作用 有些状态不可能保存在客户端。例如，为了防止重复提交表单，我们需要在服务端保存一个计数器。若吧计数器保存在客户端，则起不到什么作用&lt;/li>
&lt;/ol>
&lt;h3 id="sessionstorage">sessionStorage&lt;/h3>
&lt;ol>
&lt;li>sessionStorage是Storage类型的一个对象，拥有clear(),getItem(name),key(index),removeItem(name),setItem(name,value)方法&lt;/li>
&lt;li>sessionStorage对象存储特定于某个会话的数据,也就是该数据只保持到浏览器关闭&lt;/li>
&lt;li>将数据保存在session对象中。所谓session，是指用户在浏览某个网站时，从进入网站到浏览器关闭所经过的这段时间，也就是用户浏览这个网站所花费的时间。session对象可以用来保存在这段时间内所要求保存的任何数据&lt;/li>
&lt;li>sessionStorage为临时保存&lt;/li>
&lt;/ol>
&lt;h3 id="localstorage">localStorage&lt;/h3>
&lt;ol>
&lt;li>localStorage也是Storage类型的一个对象&lt;/li>
&lt;li>在HTML5中localStorage作为持久保存在客户端数据的方案取代了globalStorage(globalStorage必须指定域名)&lt;/li>
&lt;li>localStorage会永久存储会话数据，除非removeItem,否则会话数据一直存在&lt;/li>
&lt;li>将数据保存在客户端本地的硬件设备(通常指硬盘，也可以是其他硬件设备)中，即使浏览器被关闭了，该数据仍然存在，下次打开浏览器访问网站时仍然可以继续使用 5. localStorage为永久保存&lt;/li>
&lt;/ol>
&lt;h2 id="区别的比较">区别的比较&lt;/h2>
&lt;h3 id="本地储存localstorage与cookie的区别">本地储存localStorage与cookie的区别&lt;/h3>
&lt;ol>
&lt;li>cookie在浏览器与服务器之间来回传递 sessionStorage和localStorage不会把数据发给服务器，仅在本地保存&lt;/li>
&lt;li>数据有效期不同 cookie只在设置的cookie过期时间之前一直有效，即使窗口或浏览器关闭 sessionStorage：仅在当前浏览器窗口关闭前有效 localStorage 始终有效，长期保存&lt;/li>
&lt;li>cookie数据还有路径的概念，可以限制cookie只属于某个路径下 存储大小也不同，cookie数据不能超过4k，sessionStorage和localStorage 虽然也有存储大小的限制，但比cookie大得多，可以达到5M或更大&lt;/li>
&lt;li>作用域不用 sessionStorage不在不同的浏览器窗口中共享 localStorage在所有同源窗口中都是共享的 cookie也是在所有同源窗口中都是共享的 WebStorage 支持事件通知机制，可以将数据更新的通知发送给监听者。Web Storage 的 api 接口使用更方便&lt;/li>
&lt;/ol>
&lt;h3 id="cookiesession和localstorage的区别">cookie、session和localStorage的区别&lt;/h3>
&lt;ol>
&lt;li>cookie的内容主要包括：名字、值、过期时间、路径和域，路径与域一起构成cookie的作用范围。若不设置时间，则表示这个cookie的生命期为浏览器会话期间，关闭浏览器窗口，cookie就会消失，这种生命期为浏览器会话期的cookie被称为会话cookie&lt;/li>
&lt;li>会话cookie一般不存储在硬盘而是保存在内存里，当然这个行为并不是规范规定的。若设置了过期时间，浏览器就会把cookie保存到硬盘上，关闭后再打开浏览器这些cookie仍然有效直到超过设定的过期时间。对于保存在内存里的cookie，不同的浏览器有不同的处理方式session机制。&lt;/li>
&lt;li>当程序需要为某个客户端的请求创建一个session时，服务器首先检查这个客户端的请求里是否已包含了一个session标识（称为session id），如果已包含则说明以前已经为此客户端创建过session，服务器就按照session id把这个session检索出来使用（检索不到，会新建一个），如果客户端请求不包含session id，则为客户端创建一个session并且生成一个与此session相关联的session id，session id的值应该是一个既不会重复，又不容易被找到规律以仿造的字符串，这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie，这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。&lt;/li>
&lt;/ol>
&lt;h3 id="cookie和session的区别">cookie和session的区别&lt;/h3>
&lt;ol>
&lt;li>cookie数据存放在客户的浏览器上，session数据放在服务器上&lt;/li>
&lt;li>cookie不是很安全，别人可以分析存放在本地的cookie并进行cookie欺骗，考虑到安全应当使用session&lt;/li>
&lt;li>session会在一定时间内保存在服务器上，当访问增多，会比较占用你服务器的性能，考虑到减轻服务器性能方面，应当使用cookie&lt;/li>
&lt;li>单个cookie保存的数*据不能超过4K，很多浏览器都限制一个站点最多保存20个cookie&lt;/li>
&lt;li>建议将登录信息等重要信息存放为session，其他信息如果需要保留，可以放在cookie中&lt;/li>
&lt;li>session保存在服务器，客户端不知道其中的信心；cookie保存在客户端，服务器能够知道其中的信息&lt;/li>
&lt;li>session中保存的是对象，cookie中保存的是字符串 8. session不能区分路径，同一个用户在访问一个网站期间，所有的session在任何一个地方都可以访问到，而cookie中如果设置了路径参数，那么同一个网站中不同路径下的cookie互相是访问不到的&lt;/li>
&lt;/ol>
&lt;h3 id="web-storage和cookie的区别">web Storage和cookie的区别&lt;/h3>
&lt;ol>
&lt;li>Web Storage的概念和cookie相似，区别是它是为了更大容量存储设计的，cookie的大小是受限的，并且每次请求一个新的页面的时候cookie都会被发送过去，这样无形中浪费了带宽，另外cookie还需要指定作用域，不可跨域调用&lt;/li>
&lt;li>web storage拥有setItem,getItem,removeItem,clear等方法，不像cookie需要前端开发者自己封装setCookie，getCookie&lt;/li>
&lt;li>但是cookie也是不可或缺的，cookie的作用是与服务器进行交互，作为http规范的一部分而存在的，而web Storage仅仅是为了在本地“存储”数据而生 sessionStorage、localStorage、cookie都是在浏览器端存储的数据，其中sessionStorage的概念很特别，引入了一个“浏览器窗口”的概念，sessionStorage是在同源的同窗口中，始终存在的数据，也就是说只要这个浏览器窗口没有关闭，即使刷新页面或进入同源另一个页面，数据仍然存在，关闭窗口后，sessionStorage就会被销毁，同时“独立”打开的不同窗口，即使是同一页面，sessionStorage对象也是不同的&lt;/li>
&lt;li>Web Storage的好处 减少网络流量：一旦数据保存在本地之后，就可以避免再向服务器请求数据，因此减少不必要的数据请求，减少数据在浏览器和服务器间不必要的来回传递 快速显示数据：性能好，从本地读数据比通过网络从服务器上获得数据快得多，本地数据可以及时获得，再加上网页本身也可以有缓存，因此整个页面和数据都在本地的话，可以立即显示 临时存储：很多时候数据只需要在用户浏览一组页面期间使用，关闭窗口后数据就可以丢弃了，这种情况使用sessionStorage非常方便&lt;/li>
&lt;/ol>
&lt;h3 id="浏览器本地存储与服务器端存储的区别">浏览器本地存储与服务器端存储的区别&lt;/h3>
&lt;ol>
&lt;li>数据既可以在浏览器本地存储，也可以在服务器端存储&lt;/li>
&lt;li>浏览器可以保存一些数据，需要的时候直接从本地存取，sessionStorage、localStorage和cookie都是由浏览器存储在本地的数据&lt;/li>
&lt;li>服务器端也可以保存所有用户的所有数据，但需要的时候浏览器要向服务器请求数据&lt;/li>
&lt;li>服务器端可以保存用户的持久数据，如数据库和云存储将用户的大量数据保存在服务器端 ，服务器端也可以保存用户的临时会话数据，服务器端的session机制，如jsp的session对象，数据保存在服务器上&lt;/li>
&lt;li>服务器和浏览器之间仅需传递session id即可，服务器根据session id找到对应用户的session对象，会话数据仅在一段时间内有效，这个时间就是server端设置的session有效期&lt;/li>
&lt;li>服务器端保存所有的用户的数据，所以服务器端的开销较大，而浏览器端保存则把不同用户需要的数据分别保存在用户各自的浏览器中，浏览器端一般只用来存储小数据，而非服务可以存储大数据或小数据服务器存储数据安全一些，浏览器只适合存储一般数据&lt;/li>
&lt;/ol>
&lt;h3 id="sessionstoragelocalstorage和cookie的区别">sessionStorage、localStorage和cookie的区别&lt;/h3>
&lt;ol>
&lt;li>相同点是都是保存在浏览器端、且同源的&lt;/li>
&lt;li>cookie数据始终在同源的http请求中携带（即使不需要），即cookie在浏览器和服务器间来回传递，而sessionStorage和localStorage不会自动把数据发送给服务器，仅在本地保存。cookie数据还有路径（path）的概念，可以限制cookie只属于某个路径下&lt;/li>
&lt;li>存储大小限制也不同，cookie数据不能超过4K，同时因为每次http请求都会携带cookie、所以cookie只适合保存很小的数据，如会话标识。sessionStorage和localStorage虽然也有存储大小的限制，但比cookie大得多，可以达到5M或更大&lt;/li>
&lt;li>数据有效期不同，sessionStorage：仅在当前浏览器窗口关闭之前有效；localStorage：始终有效，窗口或浏览器关闭也一直保存，因此用作持久数据；cookie：只在设置的cookie过期时间之前有效，即使窗口关闭或浏览器关闭&lt;/li>
&lt;li>作用域不同，sessionStorage不在不同的浏览器窗口中共享，即使是同一个页面；localstorage在所有同源窗口中都是共享的；cookie也是在所有同源窗口中都是共享的&lt;/li>
&lt;li>web Storage支持事件通知机制，可以将数据更新的通知发送给监听者&lt;/li>
&lt;li>web Storage的api接口使用更方便&lt;/li>
&lt;/ol>
&lt;h3 id="sessionstorage与页面js数据对象的区别">sessionStorage与页面js数据对象的区别&lt;/h3>
&lt;ol>
&lt;li>页面中一般的js对象的生存期仅在当前页面有效，因此刷新页面或转到另一页面这样的重新加载页面的情况，数据就不存在了&lt;/li>
&lt;li>sessionStorage只要同源的同窗口中，刷新页面或进入同源的不同页面，数据始终存在，也就是说只要浏览器不关闭，数据仍然存在&lt;/li>
&lt;/ol></description></item><item><title>某高考平台逆向</title><link>https://waite.wang/posts/python/cawler-from-zhangshang-college-page/</link><pubDate>Fri, 22 Sep 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/python/cawler-from-zhangshang-college-page/</guid><description>&lt;blockquote>
&lt;p>以下代码取的是院校专业分数线&lt;/p>&lt;/blockquote>
&lt;p>&lt;img alt="_20221027212744" loading="lazy" src="https://qiniu.waite.wang/202309151459082.png">&lt;/p>
&lt;blockquote>
&lt;p>F12 得到接口&lt;br>
&lt;a href="https://api.eol.cn/web/api/?local" target="_blank" >https://api.eol.cn/web/api/?local&lt;/a>_batch_id=14&amp;amp;local_province_id=31&amp;amp;local_type_id=3&amp;amp;page=1&amp;amp;school_id=31&amp;amp;size=10&amp;amp;special_group=&amp;amp;uri=apidata/api/gk/score/special&amp;amp;year=2021&amp;amp;signsafe=6cdbc334a395abd2a99b9bd8cc29c42f&lt;br>
&lt;img alt="_20221027213021" loading="lazy" src="https://qiniu.waite.wang/202309151459515.png">&lt;/p>
&lt;p>推断参数含义
&lt;img alt="_20221027213205" loading="lazy" src="https://qiniu.waite.wang/202309151459905.png">&lt;/p>&lt;/blockquote>
&lt;h3 id="signsafe-数据加密签名获取">signsafe 数据加密签名获取&lt;/h3>
&lt;blockquote>
&lt;p>搜索 锁定 signsafe 字段以及加密&lt;/p>&lt;/blockquote>
&lt;p>&lt;img alt="image" loading="lazy" src="https://qiniu.waite.wang/202309151459897.png">&lt;/p>
&lt;p>以上看到，t就是请求中的signsafe参数。而且，函数中也出现了HmacSHA1、base64等方法。由此可知，定位的加密位置是正确的。接下来需要将加密函数抠下来改写，方便调用。下断点继续跟踪方法调用。跟踪v.a.enc.Utf8.parse方法，如下多次尝试, 最终试出&lt;/p></description></item><item><title>Win11 改虚拟内存到C盘之外的盘</title><link>https://waite.wang/posts/win/modify-virtual-memory-to-other-disk/</link><pubDate>Sun, 03 Sep 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/win/modify-virtual-memory-to-other-disk/</guid><description>&lt;blockquote>
&lt;p>参考
&lt;a href="https://answers.microsoft.com/zh-hans/windows/forum/all/win11%E6%97%A0%E6%B3%95%E6%8A%8A%E8%99%9A%E6%8B%9F/50381a46-ce77-40f5-8bde-a9d01b361e6c" target="_blank" >https://answers.microsoft.com/zh-hans/windows/forum/all/win11%E6%97%A0%E6%B3%95%E6%8A%8A%E8%99%9A%E6%8B%9F/50381a46-ce77-40f5-8bde-a9d01b361e6c&lt;/a>&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>解决: WIN11无法把虚拟内存更改到其他盘，改完后重启显示由于启动页面文件配置的问题,然后虚拟内存又回c盘了&lt;/p>&lt;/blockquote>
&lt;h2 id="分页文件更改">分页文件更改&lt;/h2>
&lt;ol>
&lt;li>此电脑 -&amp;gt; 右键属性 -&amp;gt; 高级系统设置&lt;/li>
&lt;li>选择高级 -&amp;gt; 性能(设置) -&amp;gt; 高级 -&amp;gt; 虚拟内存 -&amp;gt; 更改&lt;/li>
&lt;/ol>
&lt;p>&lt;img loading="lazy" src="https://qiniu.waite.wang/20230903163805.png">&lt;/p></description></item><item><title>初识 Django</title><link>https://waite.wang/posts/python/learn-django-1/</link><pubDate>Sat, 02 Sep 2023 20:40:50 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/python/learn-django-1/</guid><description>Django 是一个高级的 Python Web 框架，它鼓励快速开发和干净、实用的设计。</description></item><item><title>gcc 安装 + vscode 搭建</title><link>https://waite.wang/posts/win/gcc-install-and-use-in-vscode/</link><pubDate>Tue, 22 Aug 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/win/gcc-install-and-use-in-vscode/</guid><description>&lt;h2 id="安装-mingw">安装 MinGW&lt;/h2>
&lt;p>MinGW（Minimalist GNU for Windows）, 是一个适用于微软windows应用程序的极简洁的开发环境。MinGW提供了一个完整的开源编程工具集，适用于原生MS-Windows应用程序的开发，并且不依赖于任何第三方C运行时DLL。MinGW主要供在MS-Windows平台上工作的开发人员使用，但也可跨平台使用。&lt;/p></description></item><item><title>TypeScript 入门</title><link>https://waite.wang/posts/web/ts-learn/</link><pubDate>Tue, 22 Aug 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/web/ts-learn/</guid><description>&lt;h2 id="什么是-typescript">什么是 TypeScript&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>TypeScript既是一种语言又是一组工具。TypeScript是JavaScript的一个超集。换句话说，TypeScript是JavaScript加上一些额外的功能。&lt;/p></description></item><item><title>基于 Win10 管理员权限不足的升权操作</title><link>https://waite.wang/posts/win/power-up-operation-based-on-insufficient-aministrator-uthority-in-win10/</link><pubDate>Tue, 22 Aug 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/win/power-up-operation-based-on-insufficient-aministrator-uthority-in-win10/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>首先由于 Win10 家庭版没有 gpedit.msc (本地策略组编辑器), cmd 以下代码将电脑模拟为 专业版&lt;/strong>&lt;/p>&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">@echo off
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pushd &amp;#34;%~dp0&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum &amp;gt;List.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum &amp;gt;&amp;gt;List.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">for /f %%i in (&amp;#39;findstr /i . List.txt 2^&amp;gt;nul&amp;#39;) do dism /online /norestart /add-package:&amp;#34;C:\Windows\servicing\Packages\%%i&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pause
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>&lt;strong>Win + R 打开 gpedit.msc, 将 &amp;ldquo;以管理员批准模式运行所有管理员&lt;/strong>&lt;/p></description></item><item><title>Alist 美化指南</title><link>https://waite.wang/posts/tools/alist-beautiful-guide/</link><pubDate>Thu, 22 Jun 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/tools/alist-beautiful-guide/</guid><description>&lt;h2 id="窗口透明">窗口透明&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="nx">style&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">hope&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">ui&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">light&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">background&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">image&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">url&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;https://www.dmoe.cc/random.php&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="nx">important&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">background&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">repeat&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="nx">no&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">repeat&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="nx">background&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">size&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="nx">cover&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="nx">background&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">attachment&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="nx">fixed&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="nx">background&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">position&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">x&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="nx">center&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">obj&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">box&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">border&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">radius&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="mi">15&lt;/span>&lt;span class="nx">px&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="nx">important&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">hope&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">ui&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">light&lt;/span> &lt;span class="p">.&lt;/span>&lt;span class="nx">obj&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">box&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">background&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">color&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="nx">ffffff70&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="nx">important&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">hope&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">c&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">PJLV&lt;/span> &lt;span class="p">.&lt;/span>&lt;span class="nx">hope&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">c&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">PJLV&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">ikSuVsl&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">css&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">border&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">radius&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="mi">15&lt;/span>&lt;span class="nx">px&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="nx">important&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">background&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">color&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="nx">ffffff70&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="nx">important&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">hope&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">c&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">PJLV&lt;/span> &lt;span class="p">.&lt;/span>&lt;span class="nx">hope&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">c&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">PJLV&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">ibtHApG&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">css&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">border&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">radius&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="mi">15&lt;/span>&lt;span class="nx">px&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="nx">important&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">background&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">color&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="err">#&lt;/span>&lt;span class="nx">ffffff70&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="nx">important&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="err">/style&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="看板娘">看板娘&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;https://eqcn.ajz.miesnfu.com/wp-content/plugins/wp-3d-pony/live2dw/lib/L2Dwidget.min.js&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c">&amp;lt;!-- 看板娘 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">link&lt;/span> &lt;span class="na">rel&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;stylesheet&amp;#34;&lt;/span> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;https://cdn.jsdelivr.net/npm/font-awesome/css/font-awesome.min.css&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;https://cdn.jsdelivr.net/gh/stevenjoezhang/live2d-widget@latest/autoload.js&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="鼠标点击效果">鼠标点击效果&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="c">&amp;lt;!--鼠标点击效果--&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@3.0.8/js/maodian.js&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="aplayermeting">Aplayer、Meting&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="c">&amp;lt;!-- aplayer、meting --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c">&amp;lt;!-- require APlayer --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">link&lt;/span> &lt;span class="na">rel&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;stylesheet&amp;#34;&lt;/span> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c">&amp;lt;!-- require MetingJS --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c">&amp;lt;!-- 不显示歌词 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">function&lt;/span> &lt;span class="nx">removelrc&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">//检测是否存在歌词按钮
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">querySelector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;.aplayer-icon-lrc&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">//触发以后立刻移除监听
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">removeEventListener&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;DOMNodeInserted&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nx">removelrc&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">//稍作延时保证触发函数时存在按钮
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nx">setTimeout&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kd">function&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">//以触发按钮的方式隐藏歌词，防止在点击显示歌词按钮时需要点击两次才能出现的问题
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">querySelector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;.aplayer-icon-lrc&amp;#34;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">click&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;success&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">addEventListener&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;DOMNodeInserted&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">removelrc&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Meting Body部分&lt;/strong>&lt;/p></description></item><item><title>Vite B端后台管理起始项</title><link>https://waite.wang/posts/project/vite-shopmall-project-begin/</link><pubDate>Wed, 05 Apr 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/project/vite-shopmall-project-begin/</guid><description>&lt;h2 id="创建vite项目并安装vscode插件">创建vite项目并安装vscode插件&lt;/h2>
&lt;h3 id="vite">Vite&lt;/h3>
&lt;p>&lt;strong>Vite 是一个 web 开发构建工具，由于其原生 ES 模块导入方式，可以实现闪电般的冷服务器启动.通过在终端中运行以下命令，可以使用 Vite 快速构建 Vue 项目&lt;/strong>&lt;/p></description></item><item><title>电商后台管理系统后端api接口文档</title><link>https://waite.wang/posts/project/shop-mall-api-docs/</link><pubDate>Wed, 05 Apr 2023 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/project/shop-mall-api-docs/</guid><description>&lt;h2 id="一api-v2-接口说明">一、API V2 接口说明&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>接口基准地址：&lt;code>http://www.tangxiaoyang.vip:8888/api/v2/&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>服务端已开启 CORS 跨域支持&lt;/p>
&lt;/li>
&lt;li>
&lt;p>API V2 认证统一使用 Token 认证&lt;/p></description></item><item><title>系统学习 Vue -- 3-脚手架学习</title><link>https://waite.wang/posts/vue/system-learn-vue-3-cli/</link><pubDate>Sat, 11 Mar 2023 21:05:54 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/vue/system-learn-vue-3-cli/</guid><description>Vue 学习笔记-Vue脚手架学习</description></item><item><title>系统学习 Vue -- 4. 动画和路由</title><link>https://waite.wang/posts/vue/system-learn-vue-4-animation-router/</link><pubDate>Sat, 11 Mar 2023 21:05:54 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/vue/system-learn-vue-4-animation-router/</guid><description>Vue 学习笔记-Vue 动画和路由</description></item><item><title>微信小程序入门</title><link>https://waite.wang/posts/mini-program/learn-wechat-minipro-1/</link><pubDate>Thu, 02 Mar 2023 20:52:46 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/mini-program/learn-wechat-minipro-1/</guid><description>微信小程序学习笔记</description></item><item><title>系统学习 Vue -- 2-深入组件</title><link>https://waite.wang/posts/vue/system-learn-vue-2-component/</link><pubDate>Tue, 07 Feb 2023 21:05:54 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/vue/system-learn-vue-2-component/</guid><description>Vue 学习笔记-Vue组件化</description></item><item><title>系统学习 Vue 1</title><link>https://waite.wang/posts/vue/system-learn-vue-1/</link><pubDate>Mon, 02 Jan 2023 21:05:54 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/vue/system-learn-vue-1/</guid><description>Vue 学习笔记-Vue基础</description></item><item><title>Idea2023.2 创建 Servlet 项目</title><link>https://waite.wang/posts/jsp/idea-create-project-of-servlet/</link><pubDate>Sun, 23 Oct 2022 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/jsp/idea-create-project-of-servlet/</guid><description>&lt;h2 id="idea20232-创建-servlet-项目">Idea2023.2 创建 Servlet 项目&lt;/h2>
&lt;h2 id="前期准备">前期准备&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>正常创建 Java 项目, 添加框架支持 Web 模块&lt;/p>
&lt;ul>
&lt;li>2023.2 之后 Idea 新 UI 把添加框架支持移到了 Ctrl + Alt + Shift + S(项目结构) -&amp;gt; 模块 -&amp;gt; +&lt;/li>
&lt;li>如果想要之前一样右键添加框架支持, 可以设置 -&amp;gt; 添加按键映射 -&amp;gt; 添加快捷键 -&amp;gt; 之后用快捷键使用即可&lt;/li>
&lt;/ul>
&lt;p>&lt;img loading="lazy" src="https://qiniu.waite.wang/202311021151150.png">&lt;/p></description></item><item><title>JSP 访问数据库</title><link>https://waite.wang/posts/jsp/jsp-connect-mysql/</link><pubDate>Sun, 23 Oct 2022 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/jsp/jsp-connect-mysql/</guid><description>&lt;h1 id="jsp-访问数据库">JSP 访问数据库&lt;/h1>
&lt;h2 id="mysql-connector-java的jar包下载">mysql-connector-java的jar包下载&lt;/h2>
&lt;ol>
&lt;li>官方下载地址
&lt;a href="https://dev.mysql.com/downloads/connector/j/" target="_blank" >https://dev.mysql.com/downloads/connector/j/&lt;/a>&lt;/li>
&lt;/ol>
&lt;p>&lt;img loading="lazy" src="https://qiniu.waite.wang/202310121220594.png">&lt;/p>
&lt;ol start="2">
&lt;li>解压, 把JDBC驱动放在lib文件夹下（直接复制过来就可以了）&lt;/li>
&lt;/ol>
&lt;p>&lt;img loading="lazy" src="https://qiniu.waite.wang/202310121223954.png">&lt;/p>
&lt;blockquote>
&lt;p>记得导入, 不然会报错&lt;/p>&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;%&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">page&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">import&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;java.sql.*&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">%&amp;gt;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="基本用法">基本用法&lt;/h2>
&lt;h3 id="连接mysql数据库">连接MySQL数据库&lt;/h3>
&lt;p>在JSP中连接MySQL数据库的步骤如下：&lt;/p></description></item><item><title>nvm 的使用</title><link>https://waite.wang/posts/web/how-to-use-nvm/</link><pubDate>Sat, 22 Oct 2022 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/web/how-to-use-nvm/</guid><description>&lt;h1 id="nvm-的使用">&lt;strong>nvm 的使用&lt;/strong>&lt;/h1>
&lt;blockquote>
&lt;p>nvm 可以快速的切换 nodejs 的版本&lt;/p>&lt;/blockquote>
&lt;h2 id="nvm-是什么">&lt;strong>nvm 是什么？&lt;/strong>&lt;/h2>
&lt;p>nvm 是一个 node 的版本管理工具，可以简单操作 node 版本的切换、安装、查看。。。等等，与 npm 不同的是，npm 是依赖包的管理工具。&lt;/p></description></item><item><title>Tomcat + Idea 配置及使用</title><link>https://waite.wang/posts/win/tomcat-idea-install/</link><pubDate>Sat, 22 Oct 2022 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/win/tomcat-idea-install/</guid><description>&lt;h2 id="jdk-安装">Jdk 安装&lt;/h2>
&lt;p>&lt;img loading="lazy" src="https://qiniu.waite.wang/0_0_13.png">&lt;/p>
&lt;h2 id="tomcat">Tomcat&lt;/h2>
&lt;blockquote>
&lt;p>注意 Tomcat 版本与 Jdk 匹配&lt;/p>&lt;/blockquote>
&lt;p>&lt;img loading="lazy" src="https://qiniu.waite.wang/20230906133609.png">&lt;/p>
&lt;p>官网地址：https://tomcat.apache.org/&lt;/p>
&lt;p>我这里选择的是Tomcat9.0版本，大家可以选择自己需要的版本&lt;/p></description></item><item><title>hadoop的安装与配置</title><link>https://waite.wang/posts/bigdata/hadoop-install-and-config/</link><pubDate>Mon, 10 Oct 2022 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/bigdata/hadoop-install-and-config/</guid><description>hadoop的安装与配置</description></item><item><title>hadoop集群的安装与配置</title><link>https://waite.wang/posts/bigdata/hadoop-group-install-and-config/</link><pubDate>Mon, 10 Oct 2022 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/bigdata/hadoop-group-install-and-config/</guid><description>hadoop集群的安装与配置</description></item><item><title>Vue2 核心语法</title><link>https://waite.wang/posts/vue/vue2-core-learn/</link><pubDate>Sat, 22 Jan 2022 16:04:23 +0800</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/posts/vue/vue2-core-learn/</guid><description>&lt;blockquote>
&lt;p>
&lt;a href="https://v2.cn.vuejs.org/" target="_blank" >https://v2.cn.vuejs.org/&lt;/a>&lt;/p>&lt;/blockquote>
&lt;h2 id="简单使用">简单使用&lt;/h2>
&lt;blockquote>
&lt;p>
&lt;a href="https://v2.cn.vuejs.org/v2/guide/installation.html" target="_blank" >https://v2.cn.vuejs.org/v2/guide/installation.html&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>
&lt;a href="https://v2.cn.vuejs.org/v2/guide/installation.html#%e7%9b%b4%e6%8e%a5%e7%94%a8-lt-script-gt-%e5%bc%95%e5%85%a5" target="_blank" >&lt;strong>直接用 script 引入&lt;/strong>&lt;/a>&lt;/p>
&lt;ol>
&lt;li>
&lt;p>直接下载并用 &lt;!-- raw HTML omitted --> 标签引入，&lt;code>Vue&lt;/code> 会被注册为一个全局变量。(在开发环境下不要使用压缩版本，不然你就失去了所有常见错误相关的警告!)&lt;/p></description></item><item><title>友链</title><link>https://waite.wang/links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>waite@waite.wang (Waite)</author><guid>https://waite.wang/links/</guid><description>links</description></item></channel></rss>