暑期实训log9

利用flask实现算法嵌入。

协同过滤推荐不同于随机推荐,随机推荐逻辑只需要写js就够了,但是协同过滤必须要调用python算法。

在HTML中直接调用本地Python程序是十分不推荐的,一是因为网页调用本地程序的权限正在被取消,二是因为真不如JS写直接,三是只能在自己本地调用。

项目统一使用了flask,所以通过flask实现python算法的嵌入。

app.py文件

from flask import Flask, render_template, request, redirect
from flask_sqlalchemy import SQLAlchemy
import csv
import os
from rec import recommend_food


basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)

#建立数据库
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.db')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SECRET_KEY'] = '1234567'

db = SQLAlchemy(app)


class Food(db.Model):
    __tablename__ = 'food'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=True)
    img = db.Column(db.String(64), nullable=True)
    material = db.Column(db.String(255), nullable=True)


db.create_all()


@app.route('/')
def hello_world():
    return redirect('/food/')


@app.route('/food/')
def food():
    page = int(request.args.get('page', 1))
    per_page = int(request.args.get('per_page', 6))
    #用户模块接口,从用户模块获取用户id,调用rec.py里recommend_food()函数,返回推荐食品的id
    #recommend_food()函数为空时,为默认参数,即def recommend_food(latent_len=64, user_num=33278, item_num=172946, user=20, k=30)
    #此函数用户模块需要传的值仅有user(第四个参数),即用户id
    food_id_list = recommend_food()
    id_type=[type(i)for i in food_id_list]
    paginate = Food.query.filter(Food.id.in_(food_id_list)).paginate(page, per_page, error_out=False)#从数据库用食品id查询name、img名称、materials,并传递给前端
    # paginate = Food.query.order_by(Food.id).paginate(page, per_page, error_out=False)


    items = paginate.items
    print(items)
    return render_template('index.html', items=items, paginate=paginate, page=page)

#读csv建立数据库,读一次即可
# with open('static/食谱.csv', 'r', encoding='utf-8') as f:
#     reader = csv.reader(f)
#     for row in reader:
#         food = Food(id=int(row[0]), name=row[1], material=row[2], img=str(row[0]) + '.jpg')
#         db.session.add(food)
#         db.session.commit()

if __name__ == '__main__':
    app.run()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值