fromapplication.utils.modelsimportBaseModel,dbclassGoods(BaseModel):"""商品基本信息"""__tablename__="mf_goods"remark=db.Column(db.String(255),comment="商品描述")price=db.Column(db.Numeric(7,2),comment="商品价格")image=db.Column(db.String(255),comment="商品图片")3.为用户添加果子积分字段apps/users/models.py,模型代码:
fromwerkzeug.securityimportgenerate_password_hash,check_password_hashfromapplication.utils.modelsimportBaseModel,dbclassUser(BaseModel):"""用户基本信息"""__tablename__="mf_user"#为用户表添加果子积分字段credit=db.Column(db.Numeric(7,2),default=0,comment="果子积分")4.将商品基本信息模型注册到admin中在admin站点中进行模型管理注册,apps/orchard/admin.py,代码:
无法获取数据的原因是,当前APP中获取数据是通过ajax来发送请求的,因为我们当前的APP是混合APP,所以实际来说,这种混合APP就是一个浏览器内核构建的。因此也会存在同源策略的访问限制,因此我们需要在服务端实现跨域资源共享。
服务端终端运行:
pipinstall-Uflask-corsCORS初始化:
application/__init__.py,代码:
fromflask_corsimportCORS#flask_corscors=CORS()definit_app(config_path):"""全局初始化"""#corscors.init_app(app,resources={r"/api/*":{"origins":"*"}})4.商品列表后端接口实现1.视图部分提供商品列表给客户端,apps/orchard/views.py,代码:
fromapplicationimportjsonrpcfromstatusimportAPIStatusasstatusfrommessageimportErrorMessageasmessagefromapplicationimportredisfrom.modelsimportGoodsfromapplication.apps.users.modelsimportUserfromflask_jwt_extendedimportjwt_required,get_jwt_identityfrom.marshmallowimportGoodsInfoSchema@jsonrpc.method(name="Orchard.goods.list")@jwt_required#验证jwtdefgoods_list(page=1,limit=10):"""商品列表"""current_user_id=get_jwt_identity()user=User.query.get(current_user_id)ifuserisNone:return{"errno":status.CODE_NO_USER,"errmsg":message.user_not_exists,}pagination=Goods.query.filter(Goods.is_deleted==False,Goods.status==True).paginate(page,per_page=limit)#转换数据格式gis=GoodsInfoSchema()goods_list=gis.dump(pagination.items,many=True)return{"errno":status.CODE_OK,"errmsg":message.ok,"goods_list":goods_list,"pages":pagination.pages}2.序列化器部分marshmallow.py,代码:
frommessageimportErrorMessageasMessagefrom.modelsimportGoods,dbfrommarshmallow_sqlalchemyimportSQLAlchemyAutoSchema,auto_fieldfrommarshmallowimportpost_dumpclassGoodsInfoSchema(SQLAlchemyAutoSchema):id=auto_field()name=auto_field()price=auto_field()image=auto_field()remark=auto_field()classMeta:model=Goodsfields=["id","name","price","image","remark"]sql_session=db.session@post_dump()defmobile_format(self,data,**kwargs):data["price"]="%.2f"%data["price"]ifdata["image"]==None:data["image"]=""returndata5.前端获取商品列表并显示客户端就可以在打开商品的时候,获取商品列表,shop.html代码:
2.点击Alipayplus进入模块详情。
3.把模块使用到指定APP中。[下图只做参看,项目已定义叫Mofang]
接下来,服务端中需要完成的就是生成订单参数和接收支付结果,所以我们先安装alipay的sdk,集成到flask项目中。
终端运行:
pipinstallpython-alipay-sdk--upgrade2.配置支付宝的公钥和私钥配置支付宝的公钥和私钥,保存到application/apps/users/keys目录下。
cdapplication/apps/users/mkdirkeyscdkeysopensslOpenSSL>genrsa-outapp_private_key.pem2048#私钥OpenSSL>rsa-inapp_private_key.pem-pubout-outapp_public_key.pem#导出公钥OpenSSL>exit保存商户公钥到支付宝开放平台,并从开放平台中把支付宝公钥保存到项目中
users/models.py,代码:
classRecharge(BaseModel):__tablename__="mf_user_recharge"status=db.Column(db.Boolean,default=True,comment="状态(是否支付)")out_trade_number=db.Column(db.String(64),unique=True,comment="订单号")user_id=db.Column(db.Integer,comment="用户")money=db.Column(db.Numeric(7,2),comment="账户余额")trade_number=db.Column(db.String(64),unique=True,comment="流水号")