
这个错误是PowerShell的安全机制在起作用,但它并不是一个难以解决的问题。 好消息是,要解决它,你不需要重装Python,也不需要删除虚拟环境,更不需要“以毒攻毒”地采用不安全的策略。下面是几种安全且有效的解决方法,你可以根据需要选择: ### 🥇 方案一:快速无痕,临时绕过(最推荐) 这是最安全、最便捷的方法,特别适合你当前的场景。 1、在VS Code或你电脑的PowerShell终端中,执行以下命令。这行命令只会改变当前这个终端窗口的执行策略,关闭窗口后会自动恢复原状。 ```PowerShell Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass ``` 2、接着,再运行虚拟环境的激活命令即可: ```PowerShell .\venv\Scripts\activate ``` 运行效果预览:执行命令后,命令行提示符前应出现 (venv),表示已成功激活虚拟环境。 🥈 方案二:一劳永逸,永久修改 如果你希望以后所有PowerShell窗口都允许运行脚本,这个方案最适合你。 1、在Windows搜索框输入 PowerShell,在搜索结果中右键点击“Windows PowerShell”,选择 “以管理员身份运行”。 2、在弹出的用户账户控制窗口中点击“是”。 3、在打开的PowerShell窗口中,输入以下命令并按回车: ```PowerShell Set-ExecutionPolicy RemoteSigned -Scope CurrentUser ``` > 这条命令将执行策略设置为 RemoteSigned,它允许运行你自己编写的本地脚本,而网络下载的脚本则必须有可信的数字签名才能运行。这是在安全和便利之间最好的平衡。-Scope CurrentUser 参数指定这个设置只应用于你当前的Windows用户账户,不会影响电脑上的其他人。 4、系统会提示你确认更改,输入 Y 然后按回车即可。 5、之后,你就可以随时正常使用 .\venv\Scripts\activate 来激活虚拟环境了。 ### 🥉 方案三:另辟蹊径,更换终端(巧妙的绕行方案) 这个方法巧妙地避开了问题本身。 在VS Code中,你可以轻松地将默认终端从PowerShell更换为命令提示符(cmd),因为CMD没有PowerShell这样的执行策略限制。 1、在VS Code中打开任意一个终端。 2、点击终端窗口右上角的下拉菜单(通常显示为“1: powershell”或一个“+”号旁边的图标)。 3、在下拉菜单中选择 “Command Prompt”。 4、在新打开的CMD终端中,使用以下命令激活虚拟环境: ```cmd .\venv\Scripts\activate.bat ```
作者:PMCODER,发布时间:2026-05-20 10:53:35,预览量:79,点赞量:0
## 一、环境准备 ### 1.1 检查 Python 版本 FastAPI 需要 Python 3.7 或更高版本。在终端执行以下命令检查版本: ```bash python --version # 或 python3 --version ``` 如果版本低于 3.7,请先升级 Python。 ### 1.2 创建虚拟环境(推荐) 使用虚拟环境可以隔离项目依赖,避免与全局环境冲突(请先选定一个空目录作为项目更目录,然后在选定的根目录下运行命令): macOS/Linux: ```bash python -m venv fastapi_env source fastapi_env/bin/activate ``` Windows: ```bash python -m venv fastapi_env fastapi_env\Scripts\activate ``` 激活成功后,终端提示符前会出现 (fastapi_env) 字样。 ## 1.3 安装 FastAPI 和 Uvicorn 在激活的虚拟环境中安装依赖: ```bash pip install fastapi uvicorn[standard] ``` > fastapi:框架核心 > uvicorn[standard]:ASGI 服务器,[standard] 选项会安装必要的中间件依赖 💡 如果安装速度较慢,可使用国内镜像源加速,例如: ```bash pip install fastapi uvicorn[standard] -i https://pypi.tuna.tsinghua.edu.cn/simple ``` ## 二、创建 FastAPI 应用 ### 2.1 编写入口文件 创建一个名为 main.py 的文件,写入以下代码: ```python from fastapi import FastAPI # 创建 FastAPI 应用实例 app = FastAPI() # 定义根路由 @app.get("/") async def read_root(): return {"message": "Welcome to FastAPI"} ``` 这里 @app.get("/") 装饰器将函数 read_root 映射到根路径 / 的 GET 请求上,返回一个 JSON 格式的响应。 ### 2.2 启动服务 在终端中(确保当前目录包含 main.py),执行以下命令: ```bash uvicorn main:app --reload ``` 命令解析: > main:app:main 表示 Python 文件名,app 是文件中创建的 FastAPI 实例变量名 > --reload:启用自动重载,代码修改后服务器会自动重启,便于开发调试 ## 三、访问路由与 API 文档 ### 3.1 访问根路由 打开浏览器,访问以下地址: ```text http://127.0.0.1:8000 ``` 你应该能看到返回的 JSON 数据: ```json {"message": "Welcome to FastAPI"} ``` ### 3.2 查看自动生成的 API 文档 FastAPI 基于代码中的类型注解自动生成交互式 API 文档,默认提供以下访问端点: > Swagger UI(交互式):访问 http://127.0.0.1:8000/docs,可以直接在浏览器中测试 API > ReDoc(文档式):访问 http://127.0.0.1:8000/redoc,适合浏览和查阅 API 定义 > OpenAPI JSON(原始规范):访问 http://127.0.0.1:8000/openapi.json,可供 Postman 等工具消费 💡 Swagger UI 支持点击 "Try it out" 发送真实请求,非常适合调试 POST 等浏览器无法直接测试的接口。 ## 四、项目结构规划(可选) 当项目逐渐复杂时,建议采用模块化的项目结构: ```text project/ ├── app/ │ ├── main.py # 入口文件 │ ├── routers/ # 路由模块 │ │ ├── __init__.py │ │ └── items.py │ ├── models/ # 数据模型 │ ├── schemas/ # 请求/响应模型 │ └── dependencies.py # 依赖注入 └── requirements.txt # 依赖清单 ``` ## 五、总结 通过以上步骤,你已经完成了: > 1. Python 虚拟环境的创建与依赖安装 > 2. FastAPI 应用的编写与启动 > 3. 路由的访问与自动生成 API 文档的查看 FastAPI 凭借其异步支持、自动文档生成、类型提示校验等特性,成为现代 Web API 开发的优选方案。接下来可以继续深入学习依赖注入、异步 API 开发、中间件等进阶内容。
作者:PMCODER,发布时间:2026-05-13 15:00:35,预览量:97,点赞量:0
#### 宿主机-容器互拷贝命令: ```shell # 从宿主机拷贝至容器指定目录 docker cp /root/mkserver/vim-8.2.0100.tar.gz nginx:/root/ # 从容器拷贝至宿主机 docker cp nginx:/root/vim-8.2.0100.tar.gz / /root/mkserver/ ``` #### 镜像-文件转换命令: ```shell # 将镜像保存为压缩文件 docker save -o oricos_bi_nginx_v1.0.1.tar pmcoder/oricos_bi_nginx:v1.0.1_res # 将文件加载为镜像 docker load -i oricos_bi_nginx_v1.0.1.tar ``` #### 容器生成镜像命令: ```shell docker commit -m "创建生产环境镜像" oricos_bi_nginx_build pmcoder/oricos_bi_nginx:v1.0.1_res ``` #### 容器更新配置命令: ```shell # 设置容器自动重启 docker update --restart=always log_record ``` #### docker配置命令: ```shell # 设置跟随系统启动 systemctl enable docker ``` #### docker设置重启命令: ```shell # 将容器设置为"总是重启" docker update --restart=always <容器名或ID> # 将容器设置为"仅在退出时异常时重启"(最多3次) docker update --restart=on-failure:3 <容器名或ID> # 将容器设置为"除非手动停止" docker update --restart=unless-stopped <容器名或ID> # 禁用自动重启 docker update --restart=no <容器名或ID> ```
作者:PMCODER,发布时间:2025-07-31 12:43:56,预览量:91,点赞量:4
## 一、前言 在日常开发中,前端和服务端数据交互时,使用最多的大概就是 HTTP 请求了,今天我们就来总结一下所有的 HTTP 请求方法,并且了解一下后台返回的一些常见状态码的含义。 ## 二、请求方法汇总 根据 HTTP 标准,HTTP 请求可以使用多种请求方法。 HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。 HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。 ## 三、GET 方法 GET 是最常用的 HTTP 请求方法,会显示请求指定的资源,并返回响应主体,一般对它的期望是安全且幂等的。 所谓安全是指该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改和增加数据,不会影响资源的状态。 这里安全的含义仅仅是指是非修改信息。幂等的概念简单点来说,就是指对同一个 URL 的多个请求应该返回同样的结果。查询字符串(名称/值对)是在 GET 请求的 URL 中发送的,在 URL 后加 ? 连接查询字符串,多条查询字符串通过 & 来连接,比如: `` ```html https://cn.bing.com/search?q=%E7%BC%96%E7%A8%8B%E4%B8%89%E6%98%A7&PC=U316&FORM=CHROMN ``` `` ###### GET 请求的一些其他特性: > - GET 请求可被缓存 > - GET 请求保留在浏览器历史记录中 > - GET 请求可被收藏为书签 > - GET 请求不应在处理敏感数据时使用 > - GET 请求有长度限制 > - GET 请求只应当用于取回数据(不修改) ## 四、HEAD 方法 与 GET 方法一样,都是向服务器发出指定资源的请求,只不过服务器将不传回资源的本文部分,只返回头部消息。 它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据),对资源的首部进行检查,比如: > - 如果 GET /users 返回用户列表, > - 那么 HEAD /users 将发出相同的请求,但不会返回用户列表。 ###### HEAD 方法的使用场景: > - 在不获取资源的情况下,了解资源的一些信息,比如资源类型; > - 通过查看响应中的状态码,可以确定资源是否存在; > - 通过查看首部,测试资源是否被修改。 ## 五、POST 方法 POST 方法用于向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件),数据被包含在请求本文中。 POST 请求可能会创建新的资源或修改现有资源,或二者皆有。每次提交,表单的数据被浏览器用编码到HTTP请求的body里。 ##### 浏览器发出的POST请求的body的主要格式: | 格式 |说明 | | - | - | |application/x-www-form-urlencoded |用来传输简单的数据,如 "key1=value1&key2=value2" 这样的格式。 | |multipart/form-data |主要用来传输文件内容。 | |application/json |告诉服务端消息主体是序列化后的 JSON 字符串。 | |text/plain |纯文本格式 | > 采用 multipart/form-data 是因为 application/x-www-form-urlencoded 的编码方式对于文件这种二进制的数据非常低效。 除了原生的content-type,开发人员也可以完全自定义数据提交格式! ##### POST 请求的其他特性: - POST 请求不会被缓存 - POST 请求不会保留在浏览器历史记录中 - POST 不能被收藏为书签 - POST 请求对数据长度没有要求 ## 六、PUT 方法 PUT 方法用于将数据发送到服务器来创建/更新资源。 PUT 与 POST 方法的区别在于,PUT 方法是幂等的:调用一次与连续调用多次是等价的(即没有副作用),而连续调用多次 POST 方法可能会有副作用,比如将一个订单重复提交多次。 ##### PUT 方法可能的响应 如果目标资源不存在,并且PUT方法成功创建了一份,那么源头服务器必须返回 201(Created) 来通知客户端资源已创建。 如果目标资源已经存在,并且依照请求中封装的表现形式成功进行了更新,那么,源头服务器必须返回 200 (OK) 或者 204 (No Content) 来表示请求的成功完成。 ## 七、DELETE 方法 DELETE 方法就是请求服务器删除指定 URL 所对应的资源。但是,客户端无法保证删除操作一定会被执行,因为 HTTP 规范允许服务器在不通知客户端的情况下撤销请求。 ##### DELETE 方法可能的响应码 如果 DELETE 方法成功执行,那么可能会有以下几种状态码: > - 状态码 202 (Accepted) 表示请求的操作可能会成功执行,但是尚未开始执行。 > - 状态码 204 (No Content) 表示操作已执行,但是无进一步的相关信息。 > - 状态码 200 (OK) 表示操作已执行,并且响应中提供了相关状态的描述信息。 ## 八、TRACE 方法 TRACE 方法实现沿通向目标资源的路径的消息“回环”(loop-back)测试 ,提供了一种实用的 debug 机制。 请求的最终接收者应当原样反射(reflect)它接收到的消息,作为一个 Content-Type 为 message/http 的200(OK)响应的消息的主体(body)返回给客户端 。 最终接收者是指初始(origin)服务器,或者第一个接收到 Max-Forwards 值为 0的请求的服务器。 我们都知道,客户端在发起一个请求时,这个请求可能要穿过防火墙、代理、网关、或者其它的一些应用程序。这中间的每个节点都可能会修改原始的 HTTP 请求。由于有一个“回环”诊断,在请求最终到达服务器时,服务器会弹回一条 TRACE 响应,并在响应主体中携带它收到的原始请求报文的最终模样。这样客户端就可以查看 HTTP 请求报文在发送的途中,是否被修改过了。 ## 九、PATCH 方法 在HTTP协议中,请求方法 PATCH 用于对资源进行部分修改。 在HTTP协议中, PUT 方法已经被用来表示对资源进行整体覆盖, 而 POST 方法则没有对标准的补丁格式的提供支持。不同于 PUT 方法,而与 POST 方法类似,PATCH 方法是非幂等的,这就意味着连续多个的相同请求会产生不同的效果。 要判断一台服务器是否支持 PATCH 方法,那么就看它是否将其添加到了响应首部 Allow 或者 Access-Control-Allow-Methods (在跨域访问的场合,CORS)的方法列表中 。 另外一个支持 PATCH 方法的隐含迹象是 Accept-Patch 首部的出现,这个首部明确了服务器端可以接受的补丁文件的格式。 ##### 响应 > 204 状态码表示这是一个操作成功的响应,因为响应中不带有消息主体。 ## 十、OPTIONS 方法 OPTIONS 方法用于获取目的资源所支持的通信选项。 客户端可以对特定的 URL 使用 OPTIONS 方法,也可以对整站(通过将 URL 设置为“*”)使用该方法。 若请求成功,则它会在 HTTP 头中包含一个名为 “Allow” 的头,值是所支持的方法,如 “GET, POST”。 ##### 使用示例 可以使用 OPTIONS 方法对服务器发起请求,以检测服务器支持哪些 HTTP 方法,响应报文包含一个 Allow 首部字段,该字段的值表明了服务器支持的所有 HTTP 方法: ```html HTTP/1.1 200 OK Allow: OPTIONS, GET, HEAD, POST Cache-Control: max-age=604800 Date: Thu, 13 Oct 2016 11:45:00 GMT Expires: Thu, 20 Oct 2016 11:45:00 GMT Server: EOS (lax004/2813) x-ec-custom-error: 1 Content-Length: 0 ``` ## 十一、CONNECT 方法 CONNECT 方法可以开启一个客户端与所请求资源之间的双向沟通的通道。它可以用来创建隧道(tunnel)。 ## 十二、总结 以上就是 HTTP 方法的内容总结,根据场景合理使用各个方法,可以起到优化性能、增加网络安全的效果。
作者:PMCODER,发布时间:2025-07-30 02:00:01,预览量:113,点赞量:0
@青柠豆腐
产品经理 / Python开发工程师
专业技能
擅长领域