Flask-sqlalchemy是關(guān)于flask一個針對數(shù)據(jù)庫管理的。文中我們采用一個關(guān)于員工顯示例子。

首先,我們創(chuàng)建SQLALCHEMY對像db。

電腦培訓,計算機培訓,平面設(shè)計培訓,網(wǎng)頁設(shè)計培訓,美工培訓,Web培訓,Web前端開發(fā)培訓

 1 from flask import Flask, render_template,request 2 from flask_sqlalchemy import SQLAlchemy 5  6 app = Flask(__name__,static_url_path='') 7 app.debug = True 8 app.secret_key = "faefasdfaf" 9 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./db/personal.db'  # app的配置,指定數(shù)據(jù)庫路徑10 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True11 app.config['SQLALCHEMY_ECHO'] = True  
12 13 db = SQLAlchemy(app)

電腦培訓,計算機培訓,平面設(shè)計培訓,網(wǎng)頁設(shè)計培訓,美工培訓,Web培訓,Web前端開發(fā)培訓

然后我們利用db創(chuàng)建員工表:

電腦培訓,計算機培訓,平面設(shè)計培訓,網(wǎng)頁設(shè)計培訓,美工培訓,Web培訓,Web前端開發(fā)培訓


from datetime import datetime
     = = db.Column(db.Integer, primary_key== db.Column(db.String(50======= (self, name, gender, job, birthday, idcard, address, salary, release_time========= release_time  release_time   .format(self.id, self.name, self.salary, self.address)

電腦培訓,計算機培訓,平面設(shè)計培訓,網(wǎng)頁設(shè)計培訓,美工培訓,Web培訓,Web前端開發(fā)培訓

表創(chuàng)建好之后,我們可以從表中查詢數(shù)據(jù)了。

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的藍圖進行了分模塊,假設(shè)我們把上面這個定義為視圖函數(shù)為:employee.list)

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

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

繼續(xù)上面的分頁,

這里我們要再次利用jinja2模板來定義一個方法,以實現(xiàn)分頁的功能,這個頁面名字就叫:helper.html。

電腦培訓,計算機培訓,平面設(shè)計培訓,網(wǎng)頁設(shè)計培訓,美工培訓,Web培訓,Web前端開發(fā)培訓

{% 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 %}

電腦培訓,計算機培訓,平面設(shè)計培訓,網(wǎng)頁設(shè)計培訓,美工培訓,Web培訓,Web前端開發(fā)培訓

以上是我們利用jinja2的語法定義了一個分布的方法,這個方法,我們傳了二個參數(shù),第一個是后臺傳過來通過db分頁查詢出來的數(shù)據(jù)。第二個是我們查詢的數(shù)據(jù)的方法。
這里需要特別說明一下,分頁的數(shù)據(jù)有幾個重要的方法:
  • has_next:如果在目前頁后至少還有一頁的話,返回 True

  • has_prev:如果在目前頁之前至少還有一頁的話,返回 True

  • next_num:下一頁的頁面數(shù)

  • prev_num:前一頁的頁面數(shù)

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

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

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

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

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

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

http://www.cnblogs.com/Alin-2016/p/7170243.html