有关“饮食记录”模块,后期主要解决了三大难点,本周三篇就分别记录解决这些难点的过程。
首先本篇是记录分页功能的实现,这一块主要是受到同类功能的同学的大力帮助,在装好东西后,移植调整便基本实现了。
首先导入关键的头文件:
from flask_sqlalchemy import SQLAlchemy
再声明一些数据库配置:
# 数据库配置,以下是本地数据库连接法 数据库配置 mysql://username:password@hostname/database
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://postgres:123@localhost:5432/postgres"
# 指定当视图执行完毕后,自动提交数据库操作
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
# 指定每次执行操作时打印原始的SQL语句
app.config['SQLALCHEMY_ECHO'] = True
# 【手动增加配置选项】关于使用SQLALCHEMY 出现warning 的问题解决
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['SQLALCHEMY_COMMIT_TEARDOWN'] = True
# 创建数据库应用实例
db = SQLAlchemy(app)
然后定义映射数据库表的实体类,要求表明和列名与数据库内表保持一致,还需要标注主键:
# 食谱表的实体类
class Food_inform(db.Model):
# 定义表名
__tablename__ = 'food_{0}'.format(ID)
# 定义列
food_id = db.Column(db.CHAR(10), primary_key=True)
food_name = db.Column(db.CHAR(20))
food_infor = db.Column(db.CHAR(100))
url = db.Column(db.CHAR(100))
time = db.Column(db.CHAR(20))
def __init__(self, food_id, food_name, food_infor, url, time):
self.food_id = food_id
self.food_name = food_name
self.food_infor = food_infor
self.url = url
self.time = time
def __repr__(self):
return '<{},{},{},{},{}>'.format(self.food_id, self.food_name, self.food_infor, self.url, self.time)
最后在def内使用,并传东西到HTML内:
page = request.args.get('page', 1, type=int)
per_page = int(request.args.get('per_page', 6))
paginate = Food_inform.query.paginate(page, per_page, error_out=False)
cuisine = paginate.items
return render_template('circle_show.html', user_data=cuisine, pagination=paginate, user_id=user_ID, user_name=user_name)
HTML利用jianjia2 for循环展现内容:
{% for meals in user_data %}
<div class="main_part" id="part{{ loop.index }}">
<h3>菜名:{{ meals.food_name }}</h3>
<h3 class="limit_line">原料:{{ meals.food_infor }}</h3>
<img class = 'pic' src= {{ meals.url }} alt="没有上传图片"/>
<h3 id='t'>上传时间:{{ meals.time }}</h3>
<input class="button_inform" type="submit" value="详"
onclick="show_inform_{{ loop.index }}()"/>
</div>
{% endfor %}
HTML引入分页文件,并做如下使用:
{% import "_macros.html" as macros %}
<div class="page">
{%if pagination%}
<div class="pagination">
{{ macros.pagination_widget(pagination, '.food_record') }}
</div>
{% endif %}
</div>
最终分页效果如下:
分页流程基本就是这样,属于移植功能适当忽略原理的一个经过。
但终归来讲,能够达成目的便是成功的。