国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python利用flask sqlalchemy實現分頁效果

2019-11-25 16:01:02
字體:
來源:轉載
供稿:網友

Flask-sqlalchemy是關于flask一個針對數據庫管理的。文中我們采用一個關于員工顯示例子。

首先,我們創建SQLALCHEMY對像db。

from flask import Flask, render_template,requestfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__,static_url_path='')app.debug = Trueapp.secret_key = "faefasdfaf"app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./db/personal.db' # app的配置,指定數據庫路徑app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Trueapp.config['SQLALCHEMY_ECHO'] = True db = SQLAlchemy(app)

然后我們利用db創建員工表:

from datetime import datetimeclass 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)

表創建好之后,我們可以從表中查詢數據了。

from flask import render_templatefrom flask.views import MethodViewclass EmployeeListView(MethodView): # 獲取員工信息  def get(self,page=1):    employees = Employee.query.paginate(page,per_page=10)    return render_template('employeelist.html', employees=employees)

以上我們通過查詢,查詢出員工信息,然后傳給前臺一個模板。(以上我們采用了flask的藍圖進行了分模塊,假設我們把上面這個定義為視圖函數為:employee.list)

注:paginate是分頁的方法,第一個參數是頁碼,第二個是每頁顯示多少條。但是這樣得到的結果不是一列表,需要在傳到前臺的值加一個 .items,下面舉例說明。(利用jinja2模板)

 {% for item in employees.items %}

如上所示,在利用Jinja2去取值時,需要在后臺傳過來的值后面,加上.items。

繼續上面的分頁,這里我們要再次利用jinja2模板來定義一個方法,以實現分頁的功能,這個頁面名字就叫: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的語法定義了一個分布的方法,這個方法,我們傳了二個參數,第一個是后臺傳過來通過db分頁查詢出來的數據。第二個是我們查詢的數據的方法。

這里需要特別說明一下,分頁的數據有幾個重要的方法:

  • has_next:如果在目前頁后至少還有一頁的話,返回 True
  • has_prev:如果在目前頁之前至少還有一頁的話,返回 True
  • next_num:下一頁的頁面數
  • prev_num:前一頁的頁面數

通過上面的工作之后,最后就只差一步了,我們需要在我們的模板頁通過Jinja2導入我們剛剛定義的方法,也就是在上面我們的employeelist.html中導入。

{% import 'helper.html' as helper %}

導入之后,我們就可以在我們需要的地方調用就可以了。

{{ helper.render_pagination(employees,'employee.list') }}

上面就是我們調用我們之前定義的方法。第一個參數,我們從后臺傳過來的值,第二個就是后臺的那個視圖函數。

進行了以上操作后,我們就大功告成了,下面看一下,我們實現了的效果圖。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 普陀区| 莱阳市| 云龙县| 独山县| 东乡县| 拉孜县| 修水县| 大姚县| 桃园市| 饶河县| 石家庄市| 荆州市| 金川县| 阿拉尔市| 潞城市| 昌黎县| 甘德县| 会理县| 龙门县| 扶余县| 贺兰县| 邻水| 河北省| 安乡县| 长春市| 延川县| 阿拉善左旗| 乌恰县| 宣城市| 离岛区| 修水县| 凌源市| 晋江市| 岚皋县| 双鸭山市| 通江县| 濉溪县| 新昌县| 盐城市| 大余县| 奉新县|