广州专业网站建设有哪些做网站的思路怎么写
2026/4/17 0:22:52 网站建设 项目流程
广州专业网站建设有哪些,做网站的思路怎么写,网站建设功能覆盖范围,昆明自助建站模板Day 81#xff1a;【99天精通Python】项目篇 - 微信小程序后端开发 (下) - 业务接口实现 前言 欢迎来到第81天#xff01; 在昨天的课程中#xff0c;我们成功搭建了小程序的用户认证系统#xff0c;用户可以通过 wx.login 获取 code#xff0c;后端换取 openid 并返回一个…Day 81【99天精通Python】项目篇 - 微信小程序后端开发 (下) - 业务接口实现前言欢迎来到第81天在昨天的课程中我们成功搭建了小程序的用户认证系统用户可以通过wx.login获取code后端换取openid并返回一个自定义的 JWT Token。今天我们要在登录的基础上开发真正的业务接口。我们将模拟一个简单的电商场景实现商品列表的展示。用户创建订单。用户查看自己的历史订单。这三个接口分别对应了 CRUD 中的R (Read)和C (Create)并且会用到我们昨天写的login_required装饰器。本节内容扩展数据库模型 (Product, Order)实现公开的商品列表 API实现受保护的下单 API实现受保护的用户订单查询 API前后端联调思路一、数据库模型扩展我们需要Product和Order两张表。为了方便我们继续使用 Flask-SQLAlchemy。修改app.py或者新建一个models.py拆分出去# app.pyfromflaskimportFlask,request,jsonify,gfromflask_sqlalchemyimportSQLAlchemy# ... (其他 import)appFlask(__name__)# ... (配置)dbSQLAlchemy(app)classUser(db.Model):iddb.Column(db.Integer,primary_keyTrue)openiddb.Column(db.String(128),uniqueTrue,nullableFalse)classProduct(db.Model):iddb.Column(db.Integer,primary_keyTrue)namedb.Column(db.String(100),nullableFalse)pricedb.Column(db.Float,nullableFalse)image_urldb.Column(db.String(255))classOrder(db.Model):iddb.Column(db.Integer,primary_keyTrue)user_iddb.Column(db.Integer,db.ForeignKey(user.id),nullableFalse)total_pricedb.Column(db.Float,nullableFalse)statusdb.Column(db.String(20),defaultpending)# pending, paid, shippedcreated_atdb.Column(db.DateTime,server_defaultdb.func.now())# 初始化数据库并添加示例商品definit_db():withapp.app_context():db.create_all()# 添加一些商品数据如果它们不存在ifProduct.query.count()0:products[Product(namePython 编程从入门到实践,price68.5,image_url/static/python-book.jpg),Product(nameFlask Web 开发,price55.0,image_url/static/flask-book.jpg)]db.session.add_all(products)db.session.commit()print(示例商品已添加。)二、API 1获取商品列表 (公开)这个接口不需要登录就能访问。app.route(/api/products,methods[GET])defget_products():productsProduct.query.all()# 将对象列表转换为字典列表result[{id:p.id,name:p.name,price:p.price,image_url:p.image_url}forpinproducts]returnjsonify(result)三、API 2创建订单 (受保护)下单操作必须是登录用户才能进行所以我们要用login_required装饰器。# app.pyfromutils.jwt_authimportlogin_required# 引入昨天的装饰器app.route(/api/orders,methods[POST])login_requireddefcreate_order():# 1. 获取请求数据datarequest.get_json()product_iddata.get(product_id)quantitydata.get(quantity,1)# 2. 校验productProduct.query.get(product_id)ifnotproduct:returnjsonify({error:商品不存在}),404# 3. 计算价格totalproduct.price*quantity# 4. 创建订单# g.user_id 是在装饰器里注入的new_orderOrder(user_idg.user_id,total_pricetotal,statuspaid)db.session.add(new_order)db.session.commit()returnjsonify({message:下单成功,order_id:new_order.id}),201四、API 3获取我的订单 (受保护)同样用户只能看自己的订单。app.route(/api/orders,methods[GET])login_requireddefget_my_orders():# 查询当前用户的所有订单user_ordersOrder.query.filter_by(user_idg.user_id).order_by(Order.created_at.desc()).all()result[{id:o.id,total_price:o.total_price,status:o.status,created_at:o.created_at.strftime(%Y-%m-%d %H:%M)}foroinuser_orders]returnjsonify(result)五、联调测试 (Postman)初始化数据库运行pythonfrom app import init_db; init_db()启动 Flaskpython app.py获取商品GET http://127.0.0.1:5000/api/products应该能看到商品列表。登录POST http://127.0.0.1:5000/api/loginBody:{code: 从微信开发者工具拿到的临时code}复制返回的token。下单POST http://127.0.0.1:5000/api/ordersHeaders:Authorization- (刚才复制的 token)Body:{product_id: 1, quantity: 2}应该返回 “下单成功”。查订单GET http://127.0.0.1:5000/api/ordersHeaders:Authorization- (token)应该能看到刚才下的订单。六、常见问题Q1g对象是什么g(global) 是 Flask 提供的一个请求上下文全局变量。它在每次请求开始时创建请求结束时销毁。非常适合在一次请求的不同函数间比如装饰器和视图函数传递数据。Q2server_defaultdb.func.now()有什么用这告诉数据库当插入一条新记录且没有指定created_at时直接使用数据库服务器的当前时间。这比在 Python 里datetime.now()更准。Q3为什么不直接把 openid 存 Token 里JWT 的 payload (载荷) 是 Base64 编码的不是加密的任何人都能解开。绝对不要在里面放敏感信息。user_id是我们自己系统的内部 ID对外无意义相对安全。七、小结这个小小的电商后端已经包含了现代 Web 应用的核心要素分层架构工具类、模型、视图各司其职。用户认证JWT 保证了接口安全。数据交互ORM 简化了数据库操作。RESTful 设计清晰的 URL 和 HTTP 方法。八、课后作业订单详情实现GET /api/orders/order_id接口返回单个订单的详细信息包含商品名、价格等需要多表查询 Join。库存系统给Product模型增加stock(库存) 字段。下单时检查库存如果不足则返回错误下单成功则扣减库存。分页当商品或订单数量很多时需要分页。给GET /api/products接口增加page和per_page参数并实现分页逻辑。下节预告Day 82机器学习入门 - Scikit-Learn- Web 部分暂告一段落。明天我们将进入 Python 的另一个王牌领域——机器学习学习如何用sklearn库进行数据预测系列导航上一篇Day 80 - 小程序后端开发上下一篇Day 82 - 机器学习入门Scikit-Learn待更新

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询