日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Flask入門之分頁的幾種方式

關于flask的分頁,大家都知道有一個Flask-SQLAlchemy提供的paginate()方法,這個方法配合bootstrap簡化了分頁連接代碼的生成,但其實關于分頁數(shù)據(jù)的返回才是最重要和最難的,數(shù)據(jù)的生成由多種方法,有原生SQL,有Flask-SQLAlchemy中的原生SQL,有Flask-SQLAlchemy對象數(shù)據(jù)等等。如何結合數(shù)據(jù)生成方式和分頁組件也算是一個難點吧。

成都網(wǎng)站制作、成都網(wǎng)站建設服務團隊是一支充滿著熱情的團隊,執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標準與要求,同時竭誠為客戶提供服務是我們的理念。創(chuàng)新互聯(lián)把每個網(wǎng)站當做一個產(chǎn)品來開發(fā),精雕細琢,追求一名工匠心中的細致,我們更用心!

不喜歡ORM的同學,尤其如我,更喜歡寫原生SQL多一些,SQL和ORM各有利弊吧。

paginate()方法的返回值是一個Pagination類對象,這個類包含很多的屬性,可以用來在模板中生成分頁的鏈接,因此可以將其作為參數(shù)傳入模板。

Pagination類對象的屬性主要有:

has_next:如果在目前頁后至少還有一頁的話,返回 True。

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

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

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

另外還有如下的可調(diào)用方法:

iter_pages():一個迭代器,返回一個在分頁導航中顯示的頁數(shù)列表。

prev():上一頁的分頁對象。

next():下一頁的分頁對象。

下面是個標準的分頁頁面





Twitter Bootstrap Tutorial - A responsive layout tutorial





















{% for user in pagedata %}








{% endfor %}

ID 姓名 性別 職位 聯(lián)系方式 操作
{{ user.userid }} {{ user.username }} {{ user.sex }} {{ user.postcard }} {{ user.phone }}

{{ pagination.links }}






下面是原生SQL和分頁組件的結合,原生數(shù)據(jù)的輸出需要轉換為字典類型。

# 用戶信息主頁面
@app.route('/test/', defaults={'page': 1})
@app.route('/test/')
def list_of_users(page):
page = request.args.get(get_page_parameter(), type=int, default=int(page))
import sqlite3
database = 'C:\\Python\\Pycharm\\supermarket\\test.db'
conn = sqlite3.connect(database)
cur = conn.cursor()
cur.execute("select username,password,personalname,birthday,sex,phone,postcard,address from userinfo ORDER BY userid ASC LIMIT {limit} offset {offset}".format(limit=5, offset = (5 * int(page)-5)))
data = [dict(((cur.description[i][0]), value)
for i, value in enumerate(row)) for row in cur.fetchall()]
print("data=", data)
pagination = Pagination(page=page, total=12,per_page=5)

return render_template('fenye.html', pagedata = data, pagination=pagination)

下面是db.session.execute和分頁組件的組合

   # 用戶信息主頁面
@app.route('/test2/', defaults={'page': 1})
@app.route('/test2/')
def list_of_users2(page):
# sql主體語句
sqlpart="select username,password,personalname,birthday,sex,phone,postcard,address from userinfo "
# where主體語句
wherepart = " where 1=1 "
# order by 主體語句
orderbypart=" ORDER BY userid ASC "
# 分頁語句
limitpart=" LIMIT {limit} offset {offset} "
# 每頁記錄行數(shù)暫時內(nèi)定5
limit=5
# 獲取當前頁碼
page = request.args.get(get_page_parameter(), type=int, default=int(page))
# 判斷當前行和偏移量
offset=(5 * int(page)-5)
# 把sql主體語句和where主體語句的SQL合并起來,獲取總頁數(shù)
sqlcount = "select count(*) from ( "+ sqlpart + wherepart+" )"
total = db.session.execute(sqlcount).fetchone()[0]
# 把sql主體語句+where主體語句+order by 主體語句+分頁語句合并起來,獲取當前頁的SQL語句
sql = sqlpart + wherepart + orderbypart + limitpart
sql=sql.format(limit=limit, offset=offset)
# 獲取執(zhí)行結果
data=db.session.execute(sql).all()
# 獲取分頁代碼
pagination = Pagination(page=page, total=total, per_page=5)
# 將數(shù)據(jù)和分頁代碼傳給頁面
return render_template('fenye.html', pagedata=data, pagination=pagination)

下面是db.session.query和分頁組件的組合

# 用戶信息主頁面
@app.route('/test3/', defaults={'page': 1})
@app.route('/test3/')
def list_of_users3(page):
page = request.args.get(get_page_parameter(), type=int, default=int(page))
pagination=db.session.query(UserInfo.username, UserInfo.password, UserInfo.personalname,UserInfo.birthday,
UserInfo.sex,UserInfo.phone, UserInfo.postcard, UserInfo.address).order_by(UserInfo.userid.desc()).\
paginate(page=page, per_page=5, error_out=True)

items = pagination.items
total = pagination.total
pagination = Pagination(page=page, total=total, per_page=5)
print('pagination=', pagination)
print('pagination.page=',pagination.page) #當前頁數(shù)
print('pagination.pages=',pagination.pages) #總頁數(shù)
print('pagination.total=',pagination.total) #數(shù)據(jù)總條數(shù)
print('pagination.has_prev=',pagination.has_prev) #是否存在上一頁 返回布爾值
print('pagination.has_next=',pagination.has_next) #是否存在下一頁 返回布爾值
return render_template('fenye.html', pagedata=items, pagination=pagination)

下面是數(shù)據(jù)對象和分頁組件的結合

# -------------------------用戶信息管理------------------------
# 用戶信息主頁面
@app.route('/test4/', defaults={'page': 1})
@app.route('/test4/')
def list_of_users4(page):
page = request.args.get(get_page_parameter(), type=int, default=int(page))

paginate = UserInfo.query.order_by('userid').paginate(page=page, per_page=5, error_out=False)
pagedata = paginate.items # 當前頁數(shù)的記錄列表
total = paginate.total
pagination = Pagination(page=page, total=total, per_page=5)
if pagedata:
return render_template('fenye.html', pagination=pagination, pagedata=pagedata)
else:
return render_template('404.html'), 404

數(shù)據(jù)生成的方式不同,部分數(shù)據(jù)生成方式需要再次轉換,pagination的使用方式是一致的,但pagedata是不同的,需要關注。


文章題目:Flask入門之分頁的幾種方式
標題網(wǎng)址:http://www.5511xx.com/article/cojhpoh.html