Hướng dẫn flask mongodb crud - bình mongodb crud
Tài liệu về nhà → Hướng dẫn sử dụng MongoDB → MongoDB Manual Các hoạt động CRUD Tạo, đọc, cập nhật và xóa tài liệu. Tạo hoặc chèn các hoạt động Thêm tài liệu mới vào một bộ sưu tập. Nếu bộ sưu tập hiện không tồn tại, các hoạt động chèn sẽ tạo ra bộ sưu tập. MongoDB cung cấp các phương pháp sau để chèn tài liệu vào một bộ sưu tập:
Trong MongoDB, các hoạt động chèn nhắm mục tiêu một bộ sưu tập duy nhất. Tất cả các hoạt động viết trong MongoDB đều là nguyên tử ở cấp độ của một tài liệu. Để biết ví dụ, xem chèn tài liệu. Đọc hoạt động lấy tài liệu từ một bộ sưu tập; tức là truy vấn một bộ sưu tập cho các tài liệu. MongoDB cung cấp các phương pháp sau để đọc tài liệu từ bộ sưu tập:
Bạn có thể chỉ định các bộ lọc truy vấn hoặc tiêu chí xác định các tài liệu để trả về. Để biết ví dụ, xem:
Cập nhật hoạt động sửa đổi các tài liệu hiện có trong một bộ sưu tập. MongoDB cung cấp các phương pháp sau để cập nhật tài liệu của bộ sưu tập:
Trong MongoDB, các hoạt động cập nhật nhắm mục tiêu một bộ sưu tập duy nhất. Tất cả các hoạt động viết trong MongoDB đều là nguyên tử ở cấp độ của một tài liệu. Bạn có thể chỉ định các tiêu chí hoặc bộ lọc, xác định các tài liệu để cập nhật. Các bộ lọc này sử dụng cùng một cú pháp như các hoạt động đọc. Để biết ví dụ, xem tài liệu cập nhật. Xóa hoạt động Xóa các tài liệu khỏi một bộ sưu tập. MongoDB cung cấp các phương pháp sau để xóa tài liệu của bộ sưu tập:
Trong MongoDB, xóa các hoạt động nhắm vào một bộ sưu tập duy nhất. Tất cả các hoạt động viết trong MongoDB đều là nguyên tử ở cấp độ của một tài liệu. Bạn có thể chỉ định các tiêu chí hoặc bộ lọc, xác định các tài liệu để xóa. Các bộ lọc này sử dụng cùng một cú pháp như các hoạt động đọc. Để biết ví dụ, xem xóa tài liệu. MongoDB cung cấp khả năng thực hiện các hoạt động viết với số lượng lớn. Để biết chi tiết, xem hoạt động viết hàng loạt. Đây là phần đầu tiên của một loạt các bài đăng trên blog có tên là "Viết lại nó trong Rust (RIIR)." Đó là một tiêu đề tặc lưỡi cho một số bài đăng sẽ điều tra những điểm tương đồng và khác biệt giữa cùng một dịch vụ được viết bằng Python với Flask và Rust với Actix-Web. Bài đăng này sẽ cho thấy cách tôi xây dựng một API RESTful cho một bộ sưu tập các công thức nấu ăn cocktail mà tôi tình cờ nói dối. Mục đích là để hiển thị một máy chủ API với một số phức tạp, vì vậy mặc dù đó là một ví dụ nhỏ, nó sẽ bao gồm các yếu tố quan trọng như:
Điều kiện tiên quyết
Đây là một hướng dẫn nâng cao, vì vậy nó sẽ bao gồm cả một loạt các thư viện khác nhau có thể được kết hợp với nhau để xây dựng một máy chủ API RESTful khai báo trên đỉnh MongoDB. Tôi sẽ không bao gồm các mẫu lặp lại trong cơ sở mã, vì vậy nếu bạn muốn xây dựng toàn bộ sự việc, tôi khuyên bạn nên kiểm tra mã nguồn, tất cả đều có trên GitHub.advanced guide, so it'll cover a whole bunch of different libraries which can be brought together to build a declarative Restful API server on top of MongoDB. I won't cover repeating patterns in the codebase, so if you want to build the whole thing, I recommend checking out the source code, which is all on GitHub. Nó sẽ không bao gồm những điều cơ bản của Python, Flask hoặc MongoDB, vì vậy nếu đó là những gì bạn đang tìm kiếm, tôi khuyên bạn nên kiểm tra các tài nguyên sau khi giải quyết bài đăng này: Bắt đầuBắt đầu bằng cách nhân bản nguồn mã mẫu từ GitHub. Có bốn thư mục cấp cao nhất:from GitHub. There are four top-level directories:
Có nhiều chi tiết hơn trong repo GitHub, nhưng những điều cơ bản là: Cài đặt dự án với VirtualEnv Active:GitHub repo, but the basics are: Install the project with your virtualenv active: Tiếp theo, bạn nên nhập dữ liệu vào cụm của bạn. Đặt biến môi trường Lưu ý rằng cơ sở dữ liệu của bạn phải được gọi là "cocktail" và việc nhập sẽ tạo ra một bộ sưu tập có tên là "Công thức nấu ăn". Sau khi kiểm tra xem Bây giờ bạn sẽ có thể chạy ứng dụng bình từ thư mục (Bạn có thể chạy Kiểm tra đầu ra để đảm bảo nó hài lòng với cấu hình và sau đó trong một cửa sổ đầu cuối khác, chạy tập lệnh Phá vỡ tất cảMã được chia thành ba mô hình con.
Tôi đã đề cập trước đó rằng mã này sử dụng một số thư viện:
Xác thực và chuyển đổi dữ liệuKhi xây dựng API mạnh mẽ, điều quan trọng là phải xác nhận tất cả dữ liệu được truyền vào hệ thống. Có thể thực hiện việc này bằng cách sử dụng một ngăn xếp các câu lệnh Tôi đã sử dụng một kỹ thuật mà tôi đã học được từ Beanie, một ODM mới và gọn gàng mà tôi không may thực tế không thể sử dụng cho dự án này, bởi vì beanie là async, và Flask là một khung chặn.Beanie, a new and neat ODM that I unfortunately couldn't practically use on this project, because Beanie is async, and Flask is a blocking framework. Beanie sử dụng Pydantic để xác định lược đồ và thêm loại trường tùy chỉnh cho ObjectID.Pydantic to define a schema, and adds a custom Field type for ObjectId. Lược đồ Tôi đã thêm các chức năng tiện lợi để xuất dữ liệu trong trường hợp Phương pháp Phương pháp Cách tiếp cận này gọn gàng cho trường hợp sử dụng cụ thể này, nhưng tôi không thể cảm thấy rằng nó sẽ bị hạn chế trong một hệ thống phức tạp hơn. Có nhiều mẫu để lưu trữ dữ liệu trong MongoDB. Chúng thường dẫn đến việc lưu trữ dữ liệu ở dạng tối ưu cho việc ghi hoặc đọc, nhưng không nhất thiết là đại diện bạn muốn xuất trong API.patterns for storing data in MongoDB. These often result in storing data in a form that is optimal for writes or reads, but not necessarily the representation you would wish to export in an API. Nhìn vào lược đồ ở trên, bạn có thể đã tự hỏi "sên" là gì ... tốt, ngoài một loài gây hại trong vườn nhếch nhác. Một con sên là một url, an toàn, an toàn, được sử dụng để xác định một tài liệu. Tôi đã chọn thuật ngữ như một nhà phát triển Django, nơi thuật ngữ này là một phần của khuôn khổ. Một con sên thường có nguồn gốc từ một lĩnh vực khác. Trong trường hợp này, sên có nguồn gốc từ tên của loại cocktail, vì vậy nếu một ly cocktail được gọi là "rượu whisky lúa mạch đen kiểu cũ", sên sẽ là "Rye-whiskey-old-foothed". Trong API này, loại cocktail đó có thể được truy cập bằng cách gửi yêu cầu Tôi đã giữ trường Trong phiên bản rỉ sét của mã này, tôi đã khỏa thân sử dụng một cách tiếp cận khác. Đó là một chút dài dòng, nhưng cuối cùng tôi đã bị thuyết phục rằng nó sẽ mạnh mẽ và linh hoạt hơn khi hệ thống phát triển. Tạo một tài liệu mớiBây giờ tôi sẽ cho bạn thấy một điểm cuối duy nhất trông như thế nào, trước tiên tập trung vào điểm cuối "Tạo", xử lý yêu cầu POST đến Điểm cuối này sửa đổi trực tiếp JSON đến, để thêm một mục Sau khi xác thực dữ liệu, Sau khi chèn dữ liệu, mã sau đó cập nhật đối tượng cục bộ với Đọc một loại cocktail duy nhấtNhờ Điểm cuối này sẽ hủy bỏ với 404 nếu con sên không thể tìm thấy trong bộ sưu tập. Mặt khác, nó chỉ đơn giản là khởi tạo một ly cocktail với tài liệu từ cơ sở dữ liệu và gọi
Liệt kê tất cả các loại cocktailĐiểm cuối này là một con quái vật, và đó là do phân trang và các liên kết để phân trang. Trong dữ liệu mẫu ở trên, có lẽ bạn đã nhận thấy phần Phần Và đây là mã để tạo tất cả điều này. Đừng hoảng sợ.
Mặc dù có rất nhiều mã ở đó, nhưng nó không phức tạp như lần đầu tiên xuất hiện. Hai yêu cầu được thực hiện cho MongoDB: một cho một công thức nấu ăn cocktail, và một cho tổng số ly cocktail trong bộ sưu tập. Các tính toán khác nhau được thực hiện để tìm ra có bao nhiêu tài liệu để bỏ qua và có bao nhiêu trang cocktail. Cuối cùng, một số liên kết được thêm vào cho các trang "trước" và "tiếp theo", nếu thích hợp (tức là: trang hiện tại không phải là trang đầu tiên hoặc cuối cùng.) Trong một vòng lặp lần này. Bản cập nhật và xóa các điểm cuối chủ yếu là sự lặp lại của mã tôi đã đưa vào, vì vậy tôi sẽ không đưa chúng vào đây. Kiểm tra chúng trong repo GitHub nếu bạn muốn xem cách chúng hoạt động.GitHub repo if you want to see how they work. Xử lý lỗiKhông có gì gây khó chịu cho tôi hơn là sử dụng API JSON trả về HTML khi xảy ra lỗi, vì vậy tôi rất muốn đưa ra một số xử lý lỗi hợp lý để tránh điều này xảy ra. Sau khi mã thiết lập bình và trước các định nghĩa điểm cuối, mã đăng ký hai trình điều khiển lỗi: Trình điều khiển lỗi đầu tiên chặn bất kỳ điểm cuối nào không thành công với mã trạng thái 404 và đảm bảo rằng lỗi được trả về dưới dạng json dict. Trình điều khiển lỗi thứ hai chặn một Khi tôi viết bài này, tôi nhận ra rằng tôi đã bỏ lỡ một tay cầm lỗi để đối phó với dữ liệu cocktail không hợp lệ. Tôi sẽ để thực hiện nó như một bài tập cho người đọc! Thật vậy, đây là một trong những khó khăn với việc viết các ứng dụng Python mạnh mẽ: bởi vì các trường hợp ngoại lệ có thể được nêu ra từ sâu trong đống phụ thuộc của bạn, rất khó để dự đoán toàn diện những ngoại lệ mà ứng dụng của bạn có thể nêu ra trong các trường hợp khác nhau. Đây là một cái gì đó rất khác biệt trong rỉ sét, và mặc dù, như bạn sẽ thấy, việc xử lý lỗi trong rỉ sét có thể là dài dòng và khó khăn, tôi đã bắt đầu yêu ngôn ngữ vì sự khăng khăng của nó về sự đúng đắn. Gói lênKhi tôi bắt đầu viết bài này, mặc dù tôi sẽ tương đối đơn giản. Khi tôi thêm yêu cầu rằng mã không chỉ là một ví dụ về đồ chơi, một số khó khăn vốn có với việc xây dựng API mạnh mẽ trên đỉnh của bất kỳ cơ sở dữ liệu nào trở nên rõ ràng. Trong trường hợp này, Flask có thể không phải là công cụ phù hợp cho công việc. Gần đây tôi đã viết một bài đăng trên blog về việc xây dựng một API với beanie. Beanie và Fastapi là một trận đấu được thực hiện trên thiên đường cho loại ứng dụng này và sẽ xử lý xác nhận, chuyển đổi và phân trang với ít mã hơn. Trên hết, họ tự ghi chép lại và có thể cung cấp lược đồ của dữ liệu ở các định dạng mở, bao gồm Specapi Spec và Lược đồ JSON!building an API with Beanie. Beanie and FastAPI are a match made in heaven for this kind of application and will handle validation, transformation, and pagination with much less code. On top of that, they're self-documenting and can provide the data's schema in open formats, including OpenAPI Spec and JSON Schema! Tôi sẽ sớm xuất bản bài viết thứ hai trong loạt bài này, xây dựng API cocktail với Actix-Web, MongoDB và Rust, và sau đó tôi sẽ kết luận với một bài viết thứ ba, tôi viết lại nó trong Rust. 'LL đánh giá điểm mạnh và điểm yếu của hai thí nghiệm.Build a Cocktail API with Actix-Web, MongoDB, and Rust, and then I'll conclude with a third post, I Rewrote it in Rust—How Did it Go?, where I'll evaluate the strengths and weaknesses of the two experiments. Cảm ơn bạn đã đọc. Hãy chú ý đến các bài viết sắp tới! Nếu bạn có thắc mắc, vui lòng truy cập trang web cộng đồng nhà phát triển của chúng tôi nơi các kỹ sư MongoDB và cộng đồng MongoDB sẽ giúp bạn xây dựng ý tưởng lớn tiếp theo của mình với MongoDB.developer community website where the MongoDB engineers and the MongoDB community will help you build your next big idea with MongoDB. |