Home >Backend Development >Python Tutorial >Build international web applications using the FastAPI framework

Build international web applications using the FastAPI framework

PHPz
PHPzOriginal
2023-09-29 15:53:081329browse

Build international web applications using the FastAPI framework

Use the FastAPI framework to build international Web applications

FastAPI is a high-performance Python Web framework that combines Python type annotations and high-performance asynchronous support , making developing web applications easier, faster and more reliable. When building an international Web application, FastAPI provides convenient tools and concepts that can make the application easily support multiple languages.

Below I will give a specific code example to introduce how to use the FastAPI framework to build a web application that supports internationalization:

  1. First, we need to install FastAPI and the corresponding dependencies Library. You can use pip to install:
pip install fastapi[all]
  1. Create an app.py file to define the web application:
from typing import Optional
from fastapi import FastAPI
from fastapi import Request, Depends
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
from fastapi.responses import HTMLResponse
from starlette.templating import Jinja2Templates
from starlette.requests import Request
from fastapi.i18n import (
    I18nMiddleware, 
    get_accept_languages
)

app = FastAPI()

# 加载静态文件
app.mount("/static", StaticFiles(directory="static"), name="static")

# 初始化国际化中间件
app.add_middleware(I18nMiddleware, default_language="en", translation_directory="translations")

templates = Jinja2Templates(directory="templates")

# 通过GET方法获取主页面
@app.get("/", response_class=HTMLResponse)
async def read_root(request: Request, languages: str = Depends(get_accept_languages)):
    return templates.TemplateResponse("index.html", {"request": request, "languages": languages})

# 通过POST方法获取表单提交的数据并返回
@app.post("/form")
async def form_post(request: Request):
    form_data = await request.form()
    return {"data": form_data}
  1. In the project root directory Create a translations folder and create an en folder in it to store English translation files. Create a messages.po file in the en folder to define English translation:
msgid "Hello"
msgstr "Hello"

msgid "Submit"
msgstr "Submit"
  1. Create an index.html file in the templates folder to define page templates:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>{{ _('Welcome to my website') }}</title>
</head>
<body>
    <h1>{{ _('Hello') }}</h1>
    <p>{{ _('This is a sample web application') }}</p>
    
    <form action="/form" method="post">
        <input type="text" name="name" placeholder="{{ _('Enter your name') }}">
        <button type="submit">{{ _('Submit') }}</button>
    </form>
    
    <h2>{{ _('Supported Languages') }}</h2>
    <ul>
    {% for language in languages %}
        <li><a href="/?language={{ language }}">{{ language }}</a></li>
    {% endfor %}
    </ul>
</body>
</html>
  1. Start the application:
uvicorn app:app --reload

You can view the application by accessing http://localhost:8000. The default language is English and you can pass the URL parameters language to switch languages, such as http://localhost:8000/?language=zh.

In the above example, we use the internationalization middleware provided by FastAPI to specify the user's language preference by adding Accept-Language in the HTTP request header to achieve multi-language support. In the application, we use the Jinja2 template engine to render the page, and introduce translation by using {{ _('xxx') }} in the template.

Through the above examples, we can easily build a web application that supports internationalization under the FastAPI framework to provide a better user experience and global services.

The above is the detailed content of Build international web applications using the FastAPI framework. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn