Header Ads

  • Breaking News

    Ứng dụng hiệu suất cao với Python - Hướng dẫn FastAPI

    Khung ngôn ngữ lập trình tốt giúp bạn dễ dàng tạo ra sản phẩm chất lượng nhanh hơn. Các khuôn khổ tuyệt vời thậm chí còn làm cho toàn bộ trải nghiệm phát triển trở nên thú vị. FastAPI là một khung công tác web Python mới mạnh mẽ và thú vị khi sử dụng. Các tính năng sau làm cho FastAPI đáng để thử:
    • Tốc độ: FastAPI là một trong những khung công tác web Python nhanh nhất. Trên thực tế, tốc độ của nó ngang bằng với Node.js và Go. Kiểm tra các bài kiểm tra hiệu suất này .
    • Tài liệu dành cho nhà phát triển chi tiết và dễ sử dụng
    • Nhập gợi ý mã của bạn và nhận xác thực và chuyển đổi dữ liệu miễn phí.
    • Tạo plugin dễ dàng bằng cách sử dụng tính năng tiêm phụ thuộc.

    Xây dựng ứng dụng TODO

    Để khám phá những ý tưởng lớn đằng sau FastAPI, hãy xây dựng một ứng dụng TODO, ứng dụng này thiết lập danh sách việc cần làm cho người dùng. Ứng dụng nhỏ của chúng tôi sẽ cung cấp các tính năng sau:
    • Đăng ký và Đăng nhập
    • Thêm mục TODO mới
    • Nhận danh sách tất cả VIỆC CẦN LÀM
    • Xóa / Cập nhật một mục CẦN LÀM

    SQLAlchemy cho mô hình dữ liệu

    Ứng dụng của chúng tôi chỉ có hai mô hình: Người dùng và VIỆC CẦN LÀM. Với sự trợ giúp của SQLAlchemy, bộ công cụ cơ sở dữ liệu cho Python, chúng ta có thể thể hiện các mô hình của mình như sau:
    class User(Base):
       __tablename__ = "users"
       id = Column(Integer, primary_key=True, index=True)
       lname = Column(String)
       fname = Column(String)
       email = Column(String, unique=True, index=True)
       todos = relationship("TODO", back_populates="owner", cascade="all, delete-orphan")
     
    class TODO(Base):
       __tablename__ = "todos"
       id = Column(Integer, primary_key=True, index=True)
       text = Column(String, index=True)
       completed = Column(Boolean, default=False)
       owner_id = Column(Integer, ForeignKey("users.id"))
       owner = relationship("User", back_populates="todos")
    
    Khi các mô hình của chúng ta đã sẵn sàng, hãy viết tệp cấu hình cho SQLAlchemy để nó biết cách thiết lập kết nối với cơ sở dữ liệu.
    import os
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import sessionmaker
    SQLALCHEMY_DATABASE_URL = os.environ['SQLALCHEMY_DATABASE_URL']
    engine = create_engine(
       SQLALCHEMY_DATABASE_URL)
    SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
    Base = declarative_base()
    

    Giải phóng sức mạnh của loại gợi ý

    Một phần khá lớn của bất kỳ dự án API nào liên quan đến những thứ thông thường như xác thực và chuyển đổi dữ liệu. Hãy giải quyết nó trước khi chúng ta chuyển sang viết các trình xử lý yêu cầu. Với FastAPI, chúng tôi thể hiện lược đồ dữ liệu đến / đi của mình bằng các mô hình pydantic và sau đó sử dụng các mô hình pydantic này để nhập gợi ý và tận hưởng xác thực và chuyển đổi dữ liệu miễn phí. Xin lưu ý rằng các mô hình này không liên quan đến quy trình làm việc cơ sở dữ liệu của chúng tôi và chỉ xác định hình dạng của dữ liệu chảy vào và ra khỏi giao diện REST của chúng tôi. Để viết mô hình pydantic, hãy nghĩ về tất cả các cách thông tin Người dùng và VIỆC CẦN LÀM sẽ chảy vào và ra.
    Theo truyền thống, người dùng mới sẽ đăng ký dịch vụ TODO của chúng tôi và người dùng hiện tại sẽ đăng nhập. Cả hai tương tác này đều xử lý thông tin Người dùng, nhưng hình dạng của dữ liệu sẽ khác nhau. Chúng tôi cần thêm thông tin từ người dùng trong khi đăng ký và tối thiểu (chỉ email và mật khẩu) khi đăng nhập. Điều này có nghĩa là chúng tôi cần hai mô hình khổng lồ để thể hiện hai hình dạng khác nhau này của Thông tin người dùng.
    Tuy nhiên, trong ứng dụng TODO của chúng tôi, chúng tôi sẽ tận dụng hỗ trợ OAuth2 tích hợp trong FastAPI cho luồng đăng nhập dựa trên JSON Web Tokens (JWT). Chúng tôi chỉ cần xác định một UserCreatelược đồ ở đây để chỉ định dữ liệu sẽ chuyển vào điểm cuối đăng ký của chúng tôi và một UserBaselược đồ để trả về dưới dạng phản hồi trong trường hợp quá trình đăng ký thành công.
    from pydantic import BaseModel
    from pydantic import EmailStr
    class UserBase(BaseModel):
       email: EmailStr
    class UserCreate(UserBase):
       lname: str
       fname: str
       password: str
    
    Ở đây, chúng tôi đã đánh dấu họ, tên và mật khẩu là một chuỗi, nhưng nó có thể được thắt chặt hơn nữa bằng cách sử dụng các chuỗi ràng buộc khổng lồ cho phép kiểm tra như độ dài tối thiểu, độ dài tối đa và regexes.
    Để hỗ trợ việc tạo và liệt kê các mục TODO, chúng tôi xác định lược đồ sau:
    class TODOCreate(BaseModel):
       text: str
       completed: bool
    
    Để hỗ trợ cập nhật một mục CẦN LÀM hiện có, chúng tôi xác định một lược đồ khác:
    class TODOUpdate(TODOCreate):
       id: int
    
    Với điều này, chúng ta đã hoàn tất việc xác định lược đồ cho tất cả các trao đổi dữ liệu. Bây giờ chúng tôi chuyển sự chú ý của mình đến yêu cầu trình xử lý nơi các lược đồ này sẽ được sử dụng để thực hiện tất cả các công việc nặng nhọc về chuyển đổi và xác thực dữ liệu miễn phí.

    Không có nhận xét nào

    Post Top Ad

    ad728

    Post Bottom Ad

    ad728