Prisma로 Flask API를 구축하기 위한 초보자 가이드
먼저 새 가상 환경
python -m venv env
을 만들고 활성화합니다. Windows에서는 .\env\Scripts\activate
을(를) 수행할 수 있습니다.이제 이 프로젝트에 필요한 패키지를 설치해 보겠습니다.
pip install flask prisma
그런 다음
app.py
라는 새 파일을 만들고 플라스크 앱이 작동하는지 확인하기 위해 상용구를 넣어 봅시다.from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['GET'])
def index():
return {
"ping": "pong"
}
if __name__ == "__main__":
app.run(debug=True, port=5000, host='0.0.0.0')
이제
python app.py
로 앱을 시작하고 http://127.0.0.1:5000/
로 이동하면 엔드포인트 응답이 표시됩니다 🎉.데이터베이스 모델
프리즈마 부분으로 가봅시다. 먼저 데이터베이스를 모델링해야 합니다. 이 예에서는 사용자와 게시물이 있습니다.
나는
sqlite
를 사용할 것이지만 postgres와 같은 다른 것을 사용하려면 provider
및 url
를 변경해야 합니다. 예를 들면 다음과 같습니다.datasource db {
provider = "postgresql"
url = "postgresql://postgres_user:postgres_password@localhost:5432/db_name"
}
schema.prisma
라는 파일을 만들고 그 안에 다음을 넣습니다.datasource db {
provider = "sqlite"
url = "file:database.db"
}
generator db {
provider = "prisma-client-py"
interface = "sync"
}
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
published Boolean @default(false)
title String
author User @relation(fields: [authorId], references: [id])
authorId Int
}
여기에서 사용자와 게시물 사이에
one to many relationship
가 있습니다.Prisma 스키마에서 관계를 구축하는 방법에 대해 자세히 알아보려면 공식 jsdocumentation를 확인할 수 있습니다.
이제 Prisma로 데이터베이스를 생성해 봅시다. 다음을 사용하여 마이그레이션을 생성하면 됩니다.
prisma migrate dev
마이그레이션 이름을 제공합니다(예:
init
).그런 다음 루트 폴더 안에 sqlite 데이터베이스가 생깁니다.
파이썬과 프리즈마
이제 파이썬 쪽에서.
Flask에 Prisma를 등록해 봅시다.
from flask import Flask
from prisma import Prisma, register
db = Prisma()
db.connect()
register(db)
app = Flask(__name__))
# rest of the file
...
노선
경로를 체계적으로 유지하는 것을 좋아하므로
routes
라는 폴더를 만들고 그 안에 다음 내용이 포함된 user.py
라는 파일을 만들어 보겠습니다.from flask import Blueprint, request
from prisma.models import User
user_blueprint = Blueprint('user', __name__)
@user_blueprint.route('/', methods=['GET','POST'])
def list_create():
if request.method == 'GET':
users = User.prisma().find_many(include={'posts': True})
return {
"data": [user.dict() for user in users]
}
if request.method == 'POST':
data = request.json
if data is None:
return
name = data.get('name')
email = data.get('email')
if name is None or email is None:
return {"error": "You need to provide name and email"}
user = User.prisma().create(data={'email': email, 'name': name})
return dict(user)
그런 다음 내부에 청사진을 등록해야 합니다
app.py
.from flask import Flask
from prisma import Prisma, register
from routes.user import user_blueprint
# from routes.post import post_blueprint
db = Prisma()
db.connect()
register(db)
app = Flask(__name__)
@app.route('/', methods=['GET'])
def index():
return {
"ping": "pong"
}
app.register_blueprint(user_blueprint, url_prefix='/user')
# app.register_blueprint(post_blueprint, url_prefix='/post')
if __name__ == "__main__":
app.run(debug=True, port=5000, threaded=True)
이제 다음 페이로드가 있는
http://127.0.0.1:5000/user
메서드로 엔드포인트POST
에 도달하면:{
"name": "Mihai2",
"email": "[email protected]"
}
생성된 사용자를 수신합니다.
{
"data": [
{
"createdAt": "Fri, 01 Jul 2022 07:25:34 GMT",
"email": "[email protected]",
"id": 1,
"name": "Mihai2",
"posts": null
}
]
}
이제 프리즈마 부분에 대해 조금 설명드리겠습니다.
prisma.schema
에서 만든 모든 모델은 이제 prisma.models
에서 사용할 수 있으며 다음과 같이 사용할 수 있습니다.from prisma.models import User
해당 모델을 사용하여
create, update, find_many
등과 같은 특정 쿼리를 만들 수 있습니다. 모든 쿼리here 및 모델 기반 액세스here를 확인할 수 있습니다.요청 방법이
GET
인 경우 데이터베이스에서 모든 사용자를 검색하고 그 후에 사전 목록으로 형식을 지정하기 위해 목록 이해를 사용합니다(Flask 때문에 이렇게 해야 합니다. 해당 모델을 반환합니다). 요청이 POST
인 경우 데이터베이스에 해당 레코드를 생성하고 사전으로 반환합니다.Prisma는 매우 우수한 자동 완성 기능을 제공하므로 VSCode를 사용하는 경우 Ctrl + Space가 가장 좋은 친구입니다 😀 대부분의 경우 문서가 필요하지 않습니다.
이제 포스트 경로를 만들어 봅시다. 마찬가지로
routes
폴더에서 청사진이 있는 post.py
파일을 만듭니다.from flask import Blueprint, request
from prisma.models import Post
post_blueprint = Blueprint('post', __name__)
@post_blueprint.route('/', methods=['GET','POST'])
def list_create():
if request.method == 'GET':
posts = Post.prisma().find_many()
return {
"data": [post.dict(exclude={'author'}) for post in posts]
}
if request.method == 'POST':
data = request.json
if data is None:
return
title = data.get('title')
published = data.get('published')
authorId = data.get('authorId')
if title is None or published is None or authorId is None:
return {"error": "You need to provide title, published and authorId"}
post = Post.prisma().create(data={'title': title, 'authorId': authorId, 'published': published })
return post.dict()
@post_blueprint.route('/<int:id>', methods=['GET','PUT', 'DELETE'])
def view_update_delete(id):
if request.method == 'GET':
post = Post.prisma().find_unique(where={'id': id}, include={'author': True})
if post is None:
return {'error': 'Post doesn`t exist'}, 404
return post.dict()
if request.method == 'PUT':
data = request.json
if data is None:
return
title = data.get('title')
published = data.get('published')
authorId = data.get('authorId')
if title is None or published is None or authorId is None:
return {"error": "You need to provide title, published and authorId"}
post = Post.prisma().update(where={'id': id }, include={'author': True}, data={'title': title, 'published': published, 'author': {'connect': {'id': authorId}}})
if post is None:
return {'error': 'Post doesn`t exist'}, 404
return post.dict()
if request.method == 'DELETE':
post = Post.prisma().delete(where={'id': id})
if post is None:
return {'error': 'Post doesn`t exist'}, 404
return post.dict(exclude={'author'})
그리고 청사진을
app.py
에 추가합니다.from routes.post import post_blueprint
app.register_blueprint(post_blueprint, url_prefix='/post')
포스트 경로의 경우 전체 CRUD API를 만들었습니다. 목록 및 생성 끝점은 사용자와 동일합니다. 또한 3가지 유형의 요청을 처리하는
view_update_delete
함수를 만들었습니다.페이로드 예시:
{
"title": "Post1 updated",
"published": false,
"authorId": 1
}
그리고 그게 다야 🎉! 이제 앱을 시작하고 더 많은 기능을 추가할 수 있습니다. Prisma로 데이터베이스와 쉽게 상호작용할 수 있기 때문입니다.
나는 자바스크립트에서 Prisma를 사용하는 것을 정말 즐겼고 Robert이 client for python 을(를) 생성한 것을 기쁘게 생각합니다. 🔥🔥
질문이 있으시면 의견에서 논의할 수 있습니다. 💬
Reference
이 문제에 관하여(Prisma로 Flask API를 구축하기 위한 초보자 가이드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mihaiandrei97/a-beginners-guide-to-building-a-flask-api-with-prisma-1g6i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)