标签: fastapi

Jinja2 模板中 url_for 创建的 FastAPI 链接使用 HTTP 而不是 HTTPS

我将 Flask 中由 waitress 提供的应用程序迁移到由 uvicorn 提供的 FastAPI,但我无法强制链接(由 index.html 模板内的 url_for 生成)使用 HTTPS 而不是 HTTP。

我和女服务员一起使用:

from waitress import serve
import flask_app

PORT=5000
HOST_IP_ADDRESS='0.0.0.0'

serve(flask_app.app, host=HOST_IP_ADDRESS, port=PORT, url_scheme="https")
Run Code Online (Sandbox Code Playgroud)

对于 uvicorn,我尝试使用 proxy_headers,但这不起作用。我在index.html中使用了解决方法

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
Run Code Online (Sandbox Code Playgroud)

它正确地从静态文件加载了 style.css,但到另一个端点的链接仍然使用 HTTP。

有没有一种简单的方法可以强制 url_for 创建的所有链接都使用 HTTPS?

https jinja2 fastapi uvicorn

3
推荐指数
1
解决办法
5003
查看次数

Heroku 部署在 uvicorn 上运行的 Fastapi (Python):Web 进程无法绑定到 $PORT

我们有一个 python 3.9 fastapi 服务器,我们试图在 heroku 上的 uvicorn 上运行它。\n当我们在实例上启动它时,它运行良好,heroku run bash但当它在 dyno 流形上正常启动时,端口不会绑定。

\n
heroku/web.1 Starting process with command `uvicorn app.main:app --workers 4 --port 42374`\napp/web.1 INFO:     Uvicorn running on http://127.0.0.1:42374 (Press CTRL+C to quit)\napp/web.1 INFO:     Started parent process [4]\napp/web.1 INFO:     Started server process [13]\napp/web.1 INFO:     Waiting for application startup.\napp/web.1 INFO:     Started server process [10]\napp/web.1 INFO:     Waiting for application startup.\napp/web.1 INFO:     Started server process [12]\napp/web.1 INFO:     Waiting for application startup.\napp/web.1 INFO:     Started server process [11]\napp/web.1 INFO:     Waiting for application …
Run Code Online (Sandbox Code Playgroud)

python heroku fastapi uvicorn

3
推荐指数
1
解决办法
1580
查看次数

使用不支持查询参数的 python fast api 代理外部网站

我正在尝试使用 python Fast API 框架代理外部网站(在不同容器上运行的 Flower 监控 URL):

\n
client = AsyncClient(base_url=f'http://containername:7800/monitor')\n\n@app.get(\xe2\x80\x9c/monitor/{path:path}\xe2\x80\x9d)\nasync def tile_request(path: str):\n    req = client.build_request("GET", path)\n    r = await client.send(req, stream=True)\n    return StreamingResponse(\n        r.aiter_raw(),\n        background=BackgroundTask(r.aclose),\n        headers=r.headers\n   )\n
Run Code Online (Sandbox Code Playgroud)\n

它能够代理每个路径的容器 URL。对于前。

\n

http://python_server:8001/monitor/dashboard --> http://containername:7800/monitor/dashboard

\n

http://python_server:8001/monitor/tasks --> http://containername:7800/monitor/tasks

\n

效果很好。但是当 PATH 的 URL 中有一些查询参数时,它会失败。

\n

对于前。

\n
http://python_server:8001/monitor/dashboard?json=1&_=1641485992460 --> redirects to http://containername:7800/monitor/dashboard \n
Run Code Online (Sandbox Code Playgroud)\n

(请注意,URL 中不会附加任何查询参数)。

\n

任何人都可以帮助我们如何使用任何查询参数代理此外部网站的任何路径。

\n

python fastapi httpx

3
推荐指数
1
解决办法
4230
查看次数

在 AWS App Runner 上运行的 FastAPI 服务器在 24 小时后失败

我有一个配置了 Gunicorn 的 FastAPI 服务器,部署在 AWS App Runner 上。当我尝试访问端点时,它工作正常,但是,24 小时后,当我尝试访问同一端点时,我收到 502 bad gateway 错误,此后 cloudWatch 上没有记录任何内容,直到我重新部署应用程序,然后它再次开始正常工作。

我怀疑这与我的 Gunicorn 配置本身有关,它在一段时间后以某种方式关闭了我的 API,而不是 AWS App Runner,但我还没有找到任何解决方案。我还在下面展示了我的 Gunicorn 设置。任何帮助将不胜感激。

from fastapi import FastAPI
import uvicorn
from fastapi.middleware.cors import CORSMiddleware
from gunicorn.app.base import BaseApplication
import os
import multiprocessing

api = FastAPI()


def number_of_workers():
    print((multiprocessing.cpu_count() * 2) + 1)
    return (multiprocessing.cpu_count() * 2) + 1


class StandaloneApplication(BaseApplication):
    def __init__(self, app, options=None):
        self.options = options or {}
        self.application = app
        super().__init__()

    def load_config(self):
        config = {
            key: …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services gunicorn fastapi

3
推荐指数
1
解决办法
1855
查看次数

使用 Fast API 收到无效的 HTTP 请求

我有一个 React 前端向运行 FastAPI 的 Discord.py 机器人发出请求。在我的测试环境中一切都很好,但是当我部署到远程主机时 uvicorn 抱怨

    WARNING:  Invalid HTTP request received.
Traceback (most recent call last):
  File "/home/container/uvicorn/protocols/http/h11_impl.py", line 136, in handle_events
    event = self.conn.next_event()
  File "/home/container/h11/_connection.py", line 443, in next_event
    exc._reraise_as_remote_protocol_error()
  File "/home/container/h11/_util.py", line 76, in _reraise_as_remote_protocol_error
    raise self
  File "/home/container/h11/_connection.py", line 425, in next_event
    event = self._extract_next_receive_event()
  File "/home/container/h11/_connection.py", line 367, in _extract_next_receive_event
    event = self._reader(self._receive_buffer)
  File "/home/container/h11/_readers.py", line 68, in maybe_read_from_IDLE_client
    raise LocalProtocolError("illegal request line")
h11._util.RemoteProtocolError: illegal request line
2022-01-15 22:59:11,310 - Invalid HTTP …
Run Code Online (Sandbox Code Playgroud)

reactjs fastapi uvicorn

3
推荐指数
1
解决办法
2万
查看次数

SqlModel 日期时间字段在执行时抛出错误

我在 python 3.8 中使用 SQLModel

当我添加日期时间字段时created_at: datetime = Field(default_factory=utcnow(), nullable=False)

我收到此 错误

File "./app/main.py", line 16, in <module>
    class Post(SQLModel, table=True):
  File "/Users/markwardell/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/sqlmodel/main.py", line 277, in __new__
    new_cls = super().__new__(cls, name, bases, dict_used, **config_kwargs)
  File "pydantic/main.py", line 204, in pydantic.main.ModelMetaclass.__new__
  File "pydantic/fields.py", line 488, in pydantic.fields.ModelField.infer
  File "pydantic/fields.py", line 419, in pydantic.fields.ModelField.__init__
  File "pydantic/fields.py", line 539, in pydantic.fields.ModelField.prepare
  File "pydantic/fields.py", line 801, in pydantic.fields.ModelField.populate_validators
  File "pydantic/validators.py", line 718, in find_validators
RuntimeError: error checking inheritance of <module 'datetime' from '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/datetime.py'> …
Run Code Online (Sandbox Code Playgroud)

python datetime fastapi sqlmodel

3
推荐指数
2
解决办法
8720
查看次数

我要在本地运行 python FastAPI,但是当尝试通过容器运行时,浏览器上没有得到任何响应。也没有错误

我能够在本地运行 python FastAPI(连接到本地主机http://127.0.0.1:8000/),但是当我尝试通过容器运行时,在浏览器上没有得到任何响应。也没有错误消息。

main.py 的内容

from typing import Optional
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}
Run Code Online (Sandbox Code Playgroud)

Dockerfile 的内容

FROM python:3.9.5

WORKDIR /code

COPY ./docker_req.txt /code/docker_req.txt

RUN pip install --no-cache-dir --upgrade -r /code/docker_req.txt

COPY ./app /code/app

CMD ["uvicorn", "app.main:app", "--reload", "--host", "0.0.0.0"]
Run Code Online (Sandbox Code Playgroud)

运行容器时在 cmd 上输出:-

docker run --name my-app1 python-fastapi:1.5
INFO:     Will watch for changes in these directories: ['/code']
INFO: …
Run Code Online (Sandbox Code Playgroud)

python containers docker fastapi

3
推荐指数
1
解决办法
8138
查看次数

FastAPI:拒绝带有 HTTP 响应的 WebSocket 连接

在基于 FastAPI 的 Web 应用程序中,我有一个 WebSocket 端点,仅当满足某些条件时才应允许连接,否则它应返回答复HTTP 404而不是升级与HTTP 101.

据我了解,协议完全支持这一点,但我找不到任何方法可以使用 FastAPI 或 Starlette 来做到这一点。

如果我有类似的东西:

@router.websocket("/foo")
async def ws_foo(request: WebSocket):
    if _user_is_allowed(request):
        await request.accept()
        _handle_ws_connection(request)
    else:
        raise HTTPException(status_code=404)
Run Code Online (Sandbox Code Playgroud)

该异常不会转换为 404 响应,因为 FastAPIExceptionMiddleware似乎无法处理此类情况。

是否有任何本机/内置方式支持这种“拒绝”流程?

python websocket asgi starlette fastapi

3
推荐指数
1
解决办法
7718
查看次数

BigInteger 与 fastapi 和 sqlmodel

我将 FastAPI 与 SQLModel 结合使用,它基于 pydantic、SQLAlchemy 和类型提示。我正在尝试创建一个BitIntegerint64就足够了)专栏。我怎么做?

我的 sql 模型声明看起来像这样

class ItemBase(sqlmodel.SQLModel):
    name: str
    price: int  


class Item(ItemBase, table=True):
    id: int = sqlmodel.Field(default=None, primary_key=True)


class ItemCreate(ItemBase):
    pass
Run Code Online (Sandbox Code Playgroud)

提前致谢!

python sqlalchemy pydantic fastapi sqlmodel

3
推荐指数
1
解决办法
3182
查看次数

在 FastAPI 中渲染 NumPy 数组

我发现如何使用 FastAPI 将 numpy 数组作为图像返回?然而,我仍然在努力展示图像,它看起来只是一个白色的方块。

io.BytesIO我像这样读入一个数组:

def iterarray(array):
    output = io.BytesIO()
    np.savez(output, array)
    yield output.get_value()
Run Code Online (Sandbox Code Playgroud)

在我的端点中,我的回报是StreamingResponse(iterarray(), media_type='application/octet-stream')

当我留空media_type以推断时,会下载一个 zip 文件。

如何将数组显示为图像?

python numpy bytesio fastapi

3
推荐指数
1
解决办法
7176
查看次数