当我第一次开始构建 Real Estate Listing API 时,我不太清楚自己要做什么。作为一名入门级软件开发人员,从头开始开发 API 的想法似乎令人生畏。但我渴望挑战自己,并测试我的 Python 和 SQL 知识。现在,回顾这段旅程,我对自己学到的东西感到惊讶——不仅仅是编码,还包括坚持不懈的重要性、解决问题的乐趣以及看到项目实现的兴奋.
这篇博文反映了我构建这个初学者房地产列表 API 应用程序的经验。我将分享关于 Python 和 SQL 的高潮和低谷、关键学习时刻以及一些有用的技术见解,这些见解使这个项目既具有挑战性又有价值。
我的旅程从 Python 基础知识开始。我首先学习基础知识:数据类型、控制流、函数和面向对象编程。 Python的简单性和可读性使我更容易快速掌握这些概念。然而,当我必须应用这些基础知识来解决现实世界的问题时,真正的挑战来了。
理解面向对象编程(OOP)是一个重要的里程碑。我意识到,通过使用类和对象,我可以在我的房地产列表 API 中创建一种结构化的方式来处理不同的实体,例如用户和属性。这为我的项目奠定了基础,我需要对用户、属性和应用程序等现实世界的实体进行建模。
例如,在我的 API 中,我使用 Python 类定义了一个用户模型,这帮助我理解不同实体之间的关系以及它们如何在系统内交互。这是我的用户模型的简化版本:
class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String, nullable=False) email = db.Column(db.String, nullable=False, unique=True) password = db.Column(db.String, nullable=False) role = db.Column(db.Enum('agent', 'property_owner', 'buyer', name='user_roles'), nullable=False) properties = db.relationship('Property', backref='owner', lazy=True) applications = db.relationship('Application', backref='applicant', lazy=True) favorites = db.relationship('Property', secondary='wishlist', backref='favorited_by', lazy='dynamic')
这是我第一次真正接触到如何使用 Python 在代码中表示现实世界的对象,它为我打开了一个充满可能性的全新世界。
当我对 Python 和面向对象编程有了基本的了解后,我决定开始构建 Real Estate Listing API。目标很简单:创建一个 API,允许业主列出房产,并允许潜在的租户/买家浏览、申请和管理他们喜欢的房产。然而,实现这一目标需要的不仅仅是基础知识。
使用 Flask 进行 RESTful API 开发
Flask 是一个轻量级的 Python Web 框架,成为我构建 API 的首选工具。我喜欢 Flask 的简单性和灵活性;它提供了足够的结构来帮助我入门,而不会让我因不必要的复杂性而感到不知所措。
我首先设置路由来处理不同的 HTTP 方法,如 GET、POST、PATCH 和 DELETE。这使我能够为属性、用户、应用程序和愿望清单实现核心 CRUD(创建、读取、更新、删除)操作。我很快了解到的一件事是返回适当的 HTTP 状态代码和响应的重要性。例如,成功的 POST 请求应返回 201 Created 状态,而对不存在资源的请求应返回 404 Not Found。
这是我创建的用于通过 ID 获取属性的路由示例:
@app.route('/properties/', methods=['GET']) def get_property(id): property = Property.query.get(id) if property: return jsonify(property_schema.dump(property)), 200 else: return jsonify({'error': 'Property not found'}), 404
这段代码帮助我了解如何处理不同的场景并确保 API 向客户提供有意义的反馈。
实现 SQLAlchemy 进行数据库交互
构建此 API 的另一个关键部分是学习如何使用 SQLAlchemy 与数据库进行交互,SQLAlchemy 是一种连接 Python 类和 SQL 数据库的 ORM(对象关系映射)工具。我选择 SQLAlchemy 是因为它与 Flask 集成得很好,并且简化了 SQL 的许多复杂方面,例如创建和管理表之间的关系。
我使用的 SQLAlchemy 最有用的技术方面之一是创建多对多关系。例如,在我的房地产 API 中,用户可以收藏多个房产,并且每个房产可以被许多用户收藏。为了对此进行建模,我使用了一个名为 Wishlist 的链接表来管理这种多对多关系:
wishlist_table = db.Table('wishlist', db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True), db.Column('property_id', db.Integer, db.ForeignKey('property.id'), primary_key=True) )
这个片段使我能够有效地管理用户-属性关系,而无需创建冗余数据。通过使用 SQLAlchemy 的关系函数,我可以轻松查询和管理这些连接。
使用 Flask-Marshmallow 进行序列化
另一个重要的学习经验是使用 Flask-Marshmallow 将我的 SQLAlchemy 模型序列化为 JSON 格式。序列化将复杂的数据类型转换为可以轻松通过网络传输的格式,这对于构建 API 至关重要。我使用 Marshmallow 模式来定义如何将我的模型转换为 JSON。这是我的属性模型的示例架构:
class PropertySchema(ma.SQLAlchemyAutoSchema): class Meta: model = Property load_instance = True property_schema = PropertySchema() properties_schema = PropertySchema(many=True)
使用 Marshmallow 简化了将模型转换为 JSON 的过程,使我能够专注于构建 API 的核心功能。
回首往事,我意识到我在短短的时间内已经走了多远。刚开始的时候,我对 Python 的基础知识几乎一无所知。现在,我已经使用 Flask、SQLAlchemy 和 Marshmallow 构建了一个成熟的 API,并且我对 Web 开发有了更深入的了解。
这段旅程中最有价值的方面之一就是解决问题的感觉。每条错误消息、每一个错误和每一个意外行为都教会了我一些新东西。无论是找出路由不起作用的原因、调试数据库连接问题,还是学习如何正确处理 CORS,每个挑战都帮助我成长为一名开发人员。
但也许我学到的最重要的一课是坚持的价值。有时我感到陷入困境或沮丧,但我继续前进。我学会了将问题分解成更小、更易于管理的部分,然后一一解决。
我发现特别有用的一个技术方面是在我的 Flask 应用程序中配置跨域资源共享 (CORS)。 CORS 对于允许托管在不同域上的 Web 应用程序相互通信至关重要。就我而言,它允许前端(使用 React 构建)向后端 API 发出请求,而不会被浏览器的同源策略阻止。
以下是我在 Flask 应用程序中设置 CORS 的方法:
from flask_cors import CORS app = Flask(__name__) CORS(app)
通过简单地添加 CORS(app),我为应用程序中的所有路由启用了跨域请求,这使得我的前端和后端之间的集成更加顺畅。这是每个 Web 开发人员都应该知道的小而强大的功能。
构建 Real Estate Listing API 是一次充满挑战但收获颇丰的经历。我学到了很多关于 Python、SQL 和 Web 开发的知识,我对自己作为开发人员的能力更有信心了。我很高兴能够在这个领域继续建设、学习和成长,我迫不及待地想看看未来会怎样。
对于刚刚起步的人,我的建议很简单:不断学习,不断尝试,不要害怕犯错误。每个挑战都是成长的机会,每个项目都是您作为开发人员的旅程中向前迈出的一步。
https://github.com/migsldev/real-estate-api
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3