Python利用flask sqlalchemy實(shí)現(xiàn)分頁效果
Flask-sqlalchemy是關(guān)于flask一個針對數(shù)據(jù)庫管理的。文中我們采用一個關(guān)于員工顯示例子。
首先,我們創(chuàng)建SQLALCHEMY對像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ù)庫路徑 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)
以上我們通過查詢,查詢出員工信息,然后傳給前臺一個模板。(以上我們采用了flask的藍(lán)圖進(jìn)行了分模塊,假設(shè)我們把上面這個定義為視圖函數(shù)為:employee.list)
注:paginate是分頁的方法,第一個參數(shù)是頁碼,第二個是每頁顯示多少條。但是這樣得到的結(jié)果不是一列表,需要在傳到前臺的值加一個 .items,下面舉例說明。(利用jinja2模板)
{% for item in employees.items %}
如上所示,在利用Jinja2去取值時,需要在后臺傳過來的值后面,加上.items。
繼續(xù)上面的分頁,這里我們要再次利用jinja2模板來定義一個方法,以實(shí)現(xiàn)分頁的功能,這個頁面名字就叫: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) }}">首頁</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) }}">末頁</a></li>
</ul>
</div>
{% endmacro %}
以上是我們利用jinja2的語法定義了一個分布的方法,這個方法,我們傳了二個參數(shù),第一個是后臺傳過來通過db分頁查詢出來的數(shù)據(jù)。第二個是我們查詢的數(shù)據(jù)的方法。
這里需要特別說明一下,分頁的數(shù)據(jù)有幾個重要的方法:
- has_next:如果在目前頁后至少還有一頁的話,返回 True
- has_prev:如果在目前頁之前至少還有一頁的話,返回 True
- next_num:下一頁的頁面數(shù)
- prev_num:前一頁的頁面數(shù)
通過上面的工作之后,最后就只差一步了,我們需要在我們的模板頁通過Jinja2導(dǎo)入我們剛剛定義的方法,也就是在上面我們的employeelist.html中導(dǎo)入。
{% import 'helper.html' as helper %}
導(dǎo)入之后,我們就可以在我們需要的地方調(diào)用就可以了。
{{ helper.render_pagination(employees,'employee.list') }}
上面就是我們調(diào)用我們之前定義的方法。第一個參數(shù),我們從后臺傳過來的值,第二個就是后臺的那個視圖函數(shù)。
進(jìn)行了以上操作后,我們就大功告成了,下面看一下,我們實(shí)現(xiàn)了的效果圖。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
django rest framework vue 實(shí)現(xiàn)用戶登錄詳解
這篇文章主要介紹了django rest framework vue 實(shí)現(xiàn)用戶登錄詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07
Python自定義scrapy中間模塊避免重復(fù)采集的方法
這篇文章主要介紹了Python自定義scrapy中間模塊避免重復(fù)采集的方法,實(shí)例分析了Python實(shí)現(xiàn)采集的技巧,非常具有實(shí)用價值,需要的朋友可以參考下2015-04-04
Python實(shí)現(xiàn)合并與拆分多個PDF文檔中的指定頁
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)將多個PDF文檔中的指定頁合并生成新的PDF以及拆分PDF,感興趣的小伙伴可以參考一下2025-03-03
Python利用SSH隧道實(shí)現(xiàn)數(shù)據(jù)庫訪問
這篇文章主要為大家詳細(xì)介紹了如何通過sshtunnel類庫建立SSH隧道,再使用paramiko通過SSH來訪問數(shù)據(jù)庫,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-03-03
Flask sqlalchemy一對多與多對一與一對一及多對多關(guān)系介紹
這篇文章主要介紹了Flask sqlalchemy一對多與多對一與一對一及多對多關(guān)系介紹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09
使用Python實(shí)現(xiàn)tail的示例代碼
tail是一個常用的Linux命令, 它可以打印文件的后面n行數(shù)據(jù), 也能實(shí)時輸出文件的追加數(shù)據(jù)。本文就來用Python實(shí)現(xiàn)tail,感興趣的可以了解一下2023-03-03
Python使用gRPC實(shí)現(xiàn)數(shù)據(jù)分析能力的共享
gRPC是一個高性能、開源、通用的遠(yuǎn)程過程調(diào)用(RPC)框架,由Google推出,本文主要介紹了Python如何使用gRPC實(shí)現(xiàn)數(shù)據(jù)分析能力的共享,感興趣的可以了解下2024-02-02

