> 백엔드 개발 > 파이썬 튜토리얼 > Flask-Restless 및 Flask-SQLAlchemy: Python 웹 애플리케이션에서 RESTful API를 구축하기 위한 모범 사례

Flask-Restless 및 Flask-SQLAlchemy: Python 웹 애플리케이션에서 RESTful API를 구축하기 위한 모범 사례

WBOY
풀어 주다: 2023-06-17 19:55:35
원래의
883명이 탐색했습니다.

Python 웹 애플리케이션 개발에서 RESTful API 구축은 피할 수 없는 주제입니다. RESTful API는 HTTP 프로토콜을 통해 가볍고 확장 가능하며 유지 관리가 쉬운 API 인터페이스를 지원하므로 현대 웹 애플리케이션 개발의 표준이 되었습니다. 언급할 가치가 있는 두 가지 Python 라이브러리가 있습니다: Flask-Restless 및 Flask-SQLAlchemy. 이를 사용하여 RESTful API를 구축하는 방법에 대한 모범 사례를 살펴보겠습니다.

Flask-Restless는 RESTful API 개발을 단순화하도록 설계된 강력한 Python 라이브러리입니다. Flask 프레임워크에서 제공하는 라우팅 및 요청 처리 기능을 사용하고 SQLAlchemy를 통합하여 데이터베이스 작업을 처리합니다. Flask-SQLAlchemy는 Flask 애플리케이션의 데이터베이스 작업을 위한 확장입니다. 또한 코드 작성을 더 쉽게 해주는 강력한 ORM 기능도 제공합니다.

먼저 표시할 데이터 모델을 정의해야 합니다. 예를 들어 게시물, 댓글, 사용자에 대한 API를 구현해야 하는 간단한 블로깅 애플리케이션을 생각해 보세요. 다음과 같은 데이터 모델을 정의할 수 있습니다.

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Post(db.Model):
    __tablename__ = 'posts'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    body = db.Column(db.Text)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    comments = db.relationship('Comment', backref='post', lazy='dynamic')

class Comment(db.Model):
    __tablename__ = 'comments'
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.String(140))
    post_id = db.Column(db.Integer, db.ForeignKey('posts.id'))
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True)
    email = db.Column(db.String(120), unique=True)
    posts = db.relationship('Post', backref='user', lazy='dynamic')
    comments = db.relationship('Comment', backref='user', lazy='dynamic')
로그인 후 복사

그런 다음 Flask-Restless를 사용하여 RESTful API를 만들 수 있습니다. Flask-Restless는 API를 생성하는 빠르고 쉬운 방법을 제공합니다. API를 생성하려면 다음 단계를 수행해야 합니다.

1.Flask 애플리케이션을 생성하고 데이터베이스를 구성합니다.

from flask import Flask
from flask_restless import APIManager
from app.models import db, Post, Comment, User

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['JSON_SORT_KEYS'] = False

db.init_app(app)
로그인 후 복사

2. API 관리자 및 API 엔드포인트를 생성합니다.

api_manager = APIManager(app, flask_sqlalchemy_db=db)

api_manager.create_api(Post, methods=['GET', 'POST', 'PUT', 'DELETE'])
api_manager.create_api(Comment, methods=['GET', 'POST', 'PUT', 'DELETE'])
api_manager.create_api(User, methods=['GET', 'POST', 'PUT', 'DELETE'])
로그인 후 복사

3. Flask 애플리케이션을 실행합니다.

if __name__ == '__main__':
    app.run(debug=True)
로그인 후 복사

이제 GET, POST, PUT 및 DELETE HTTP 메서드를 통해 게시물, 댓글 및 사용자에 대해 CRUD 작업을 수행할 수 있는 기본 RESTful API를 만들었습니다. 그러나 이것은 단지 기본적인 예일 뿐입니다. 또한 필터링, 정렬, 페이징과 같은 몇 가지 추가 기능을 구현해야 합니다.

Flask-Restless는 데이터를 필터링하는 매개변수 세트를 제공합니다. 예를 들어, "q" 매개변수를 사용하여 검색 조건을 지정하고, "page" 매개변수를 페이징에 사용하고, "sort" 매개변수를 사용하여 정렬 등을 지정할 수 있습니다.

GET /api/posts?q={"filters":[{"name":"title","op":"like","val":"Flask"}]}&sort=-id&page=1
로그인 후 복사

위 GET 요청은 반환된 후 ID를 기준으로 역순으로 정렬되며, 제목에 "Flask"가 포함된 블로그 게시물 목록의 첫 번째 페이지만 반환됩니다(대소문자 구분 안 함).

또한 Flask-Restless는 필요에 따라 반환할 열을 선택하는 "include_columns" 매개 변수와 원하지 않는 열을 제외하는 "exclude_columns" 매개 변수도 지원합니다. 예를 들어 다음 GET 요청은 기사 ID, 제목 및 작성자 정보가 포함된 목록을 반환하지만 본문 정보는 반환하지 않습니다.

GET /api/posts?include_columns=id,title,user&exclude_columns=body
로그인 후 복사

Flask-SQLAlchemy는 equal_to, like, ilike 등과 같은 몇 가지 유용한 쿼리 필터 도구도 제공합니다. 이러한 도구를 사용하면 보다 복잡한 쿼리를 생성할 수 있습니다.

users = User.query.filter(User.username.ilike('%john%'))
로그인 후 복사

이 예에서 쿼리는 사용자 이름에 "john"이 포함된 모든 사용자와 일치합니다.

요약하자면 Flask-Restless와 Flask-SQLAlchemy는 RESTful API를 생성하기 위한 두 가지 강력한 Python 라이브러리입니다. 이를 조합하여 사용하면 유지 관리 및 확장이 쉬운 API 애플리케이션을 빠르고 간단하게 개발할 수 있습니다. 실제로는 실제 요구 사항에 따라 애플리케이션에 가장 적합한 기능을 선택해야 합니다. 그러나 여기에 언급된 기능은 RESTful API 구축을 위한 모범 사례입니다.

위 내용은 Flask-Restless 및 Flask-SQLAlchemy: Python 웹 애플리케이션에서 RESTful API를 구축하기 위한 모범 사례의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿