Python利用flask sqlalchemy實(shí)現(xiàn)分頁(yè)效果
Flask-sqlalchemy是關(guān)于flask一個(gè)針對(duì)數(shù)據(jù)庫(kù)管理的。文中我們采用一個(gè)關(guān)于員工顯示例子。
首先,我們創(chuàng)建SQLALCHEMY對(duì)像db。
from flask import Flask, render_template,request from flask_sqlalchemy import SQLAlchemy app = Flask(__name__,static_url_path='') app.debug = True app.secret_key = "faefasdfaf" app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./db/personal.db' # app的配置,指定數(shù)據(jù)庫(kù)路徑 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True app.config['SQLALCHEMY_ECHO'] = True db = SQLAlchemy(app)
然后我們利用db創(chuàng)建員工表:
from datetime import datetime class Employee(db.Model): '''員工''' __tablename__ = 'employee' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) gender = db.Column(db.String) job = db.Column(db.String) birthday = db.Column(db.DateTime) idcard = db.Column(db.String) address = db.Column(db.String) salary = db.Column(db.String) release_time = db.Column(db.DateTime) def __init__(self, name, gender, job, birthday, idcard, address, salary, release_time=None): self.name = name self.gender = gender self.job = job self.birthday = birthday self.idcard = idcard self.address = address self.salary = salary self.release_time = release_time if release_time else datetime.now() def __repr__(self): return '<員工{},{},{},{}>'.format(self.id, self.name, self.salary, self.address)
表創(chuàng)建好之后,我們可以從表中查詢數(shù)據(jù)了。
from flask import render_template from flask.views import MethodView class EmployeeListView(MethodView): # 獲取員工信息 def get(self,page=1): employees = Employee.query.paginate(page,per_page=10) return render_template('employeelist.html', employees=employees)
以上我們通過(guò)查詢,查詢出員工信息,然后傳給前臺(tái)一個(gè)模板。(以上我們采用了flask的藍(lán)圖進(jìn)行了分模塊,假設(shè)我們把上面這個(gè)定義為視圖函數(shù)為:employee.list)
注:paginate是分頁(yè)的方法,第一個(gè)參數(shù)是頁(yè)碼,第二個(gè)是每頁(yè)顯示多少條。但是這樣得到的結(jié)果不是一列表,需要在傳到前臺(tái)的值加一個(gè) .items,下面舉例說(shuō)明。(利用jinja2模板)
{% for item in employees.items %}
如上所示,在利用Jinja2去取值時(shí),需要在后臺(tái)傳過(guò)來(lái)的值后面,加上.items。
繼續(xù)上面的分頁(yè),這里我們要再次利用jinja2模板來(lái)定義一個(gè)方法,以實(shí)現(xiàn)分頁(yè)的功能,這個(gè)頁(yè)面名字就叫:helper.html。
{% macro render_page_data(page_data,page_function) %} <div class="text-center"> <ul class="page_data"> <li><a href="{{ url_for(page_function,page = 1) }}">首頁(yè)</a></li> {% if page_data.has_prev %} <li><a href="{{ url_for(page_function,page = page_data.prev_num) }}">«</a></li> {% endif %} {% for page in page_data.iter_pages() %} {% if page %} {% if page !=page_data.page %} <li><a href="{{ url_for(page_function,page = page) }}">{{ page }}</a></li> {% else %} <li class="active"><a href="#">{{ page }}</a></li> {% endif %} {% endif %} {% endfor %} {% if page_data.has_next %} <li><a href="{{ url_for(page_function,page = page_data.next_num) }}">»</a></li> {% endif %} <li><a href="{{ url_for(page_function,page = page_data.pages) }}">末頁(yè)</a></li> </ul> </div> {% endmacro %}
以上是我們利用jinja2的語(yǔ)法定義了一個(gè)分布的方法,這個(gè)方法,我們傳了二個(gè)參數(shù),第一個(gè)是后臺(tái)傳過(guò)來(lái)通過(guò)db分頁(yè)查詢出來(lái)的數(shù)據(jù)。第二個(gè)是我們查詢的數(shù)據(jù)的方法。
這里需要特別說(shuō)明一下,分頁(yè)的數(shù)據(jù)有幾個(gè)重要的方法:
- has_next:如果在目前頁(yè)后至少還有一頁(yè)的話,返回 True
- has_prev:如果在目前頁(yè)之前至少還有一頁(yè)的話,返回 True
- next_num:下一頁(yè)的頁(yè)面數(shù)
- prev_num:前一頁(yè)的頁(yè)面數(shù)
通過(guò)上面的工作之后,最后就只差一步了,我們需要在我們的模板頁(yè)通過(guò)Jinja2導(dǎo)入我們剛剛定義的方法,也就是在上面我們的employeelist.html中導(dǎo)入。
{% import 'helper.html' as helper %}
導(dǎo)入之后,我們就可以在我們需要的地方調(diào)用就可以了。
{{ helper.render_pagination(employees,'employee.list') }}
上面就是我們調(diào)用我們之前定義的方法。第一個(gè)參數(shù),我們從后臺(tái)傳過(guò)來(lái)的值,第二個(gè)就是后臺(tái)的那個(gè)視圖函數(shù)。
進(jìn)行了以上操作后,我們就大功告成了,下面看一下,我們實(shí)現(xiàn)了的效果圖。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
用python實(shí)現(xiàn)五子棋實(shí)例
這篇文章主要為大家詳細(xì)介紹了用python實(shí)現(xiàn)五子棋實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Python?GDAL庫(kù)在Anaconda環(huán)境中的配置方法
這篇文章主要介紹了Python?GDAL庫(kù)在Anaconda環(huán)境中的配置,本文介紹在Anaconda環(huán)境下,安裝Python中柵格、矢量等地理數(shù)據(jù)處理庫(kù)GDAL的方法,需要的朋友可以參考下2023-04-04分享python機(jī)器學(xué)習(xí)中應(yīng)用所產(chǎn)生的聚類數(shù)據(jù)集方法
本文根據(jù) 機(jī)器學(xué)習(xí)中常用的聚類數(shù)據(jù)集生成方法 中的內(nèi)容進(jìn)行編輯實(shí)驗(yàn)和整理而得,有需要的朋友可以參考想,希望可以對(duì)大家在聚類數(shù)據(jù)方面有所幫助2021-08-08解讀調(diào)用jupyter?notebook文件內(nèi)的函數(shù)一種簡(jiǎn)單方法
這篇文章主要介紹了解讀調(diào)用jupyter?notebook文件內(nèi)的函數(shù)一種簡(jiǎn)單方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01基于keras 模型、結(jié)構(gòu)、權(quán)重保存的實(shí)現(xiàn)
今天小編就為大家分享一篇基于keras 模型、結(jié)構(gòu)、權(quán)重保存的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01python scipy.misc.imsave()函數(shù)的用法說(shuō)明
這篇文章主要介紹了python scipy.misc.imsave()函數(shù)的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05Python語(yǔ)音識(shí)別API實(shí)現(xiàn)文字轉(zhuǎn)語(yǔ)音的幾種方法
本文主要介紹了Python語(yǔ)音識(shí)別API實(shí)現(xiàn)文字轉(zhuǎn)語(yǔ)音的幾種方法,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03