基于 oracle 的 flask 項(xiàng)目(四)——搜索查詢

搜索功能是一個(gè)項(xiàng)目個(gè)性化需求最強(qiáng)烈的部分,用戶想要不同的報(bào)表,可以通過(guò)搜索不同的字段來(lái)實(shí)現(xiàn)。

項(xiàng)目描述

  • 管理員用戶可以搜索本部門(mén)下所有用戶的各個(gè)月份的相關(guān)信息拗秘。
  • 一般用戶只能搜索各個(gè)月份自己的相關(guān)信息。

實(shí)現(xiàn)搜索頁(yè)面

  • 創(chuàng)建forms 類(lèi),使用 flask-wtf 祈惶。
  • 創(chuàng)建搜索頁(yè)面的 html 模板雕旨。
  • 不同的權(quán)限搜索頁(yè)面是不同的。

此處使用flask的基本功能捧请,不再贅述奸腺,詳情請(qǐng)參見(jiàn)代碼。

在試圖函數(shù)中實(shí)現(xiàn)相關(guān)搜索功能

views.py 中的內(nèi)容如下:

@show.route('/01', methods = ['GET', 'POST'])
@login_required
def _01():
    search_form = SearchForm(prefix='search')
    ...
    if current_user.role == 'admin':
    ...
    ...
        if search_form.validate_on_submit():
            database = db.session.query(OusiStaff.department, OusiStaff.name.label('staff_name'), OusiStaff.phone,
                                        OusiStaff.role,
                                        g1.name.label('guest_name'), g1.month, g1.balance,
                                        func.nvl(db.session.query(g2.balance).filter(
                                            g1.name==g2.name,
                                            func.to_date(g2.month, 'yyyy-mm')==func.add_months(
                                                func.to_date(g1.month, 'yyyy-mm'), -1)
                                        ), 0).label('last_balance')
                                        ).filter(
                OusiStaff.phone == g1.staff_phone, current_user.department==OusiStaff.department,
                and_(g1.month.between(search_form.start_time.data.strip(), search_form.end_time.data.strip()),
                     OusiStaff.name.like('%{}%'.format(search_form.name.data.strip())), OusiStaff.phone.like('%{}%'.format(search_form.phone.data.strip())))
            ).order_by(g1.name).group_by(OusiStaff.department, OusiStaff.name.label('staff_name'), OusiStaff.phone,
                                         OusiStaff.role,
                                         g1.name.label('guest_name'), g1.month, g1.balance)
    
    ...
    else:
        ...
        ...
        if search_form.validate_on_submit():
            database = db.session.query(OusiStaff.department, OusiStaff.name.label('staff_name'), OusiStaff.phone,
                                        OusiStaff.role,
                                        g1.name.label('guest_name'), g1.month, g1.balance,
                                        func.nvl(db.session.query(g2.balance).filter(
                                            g1.name == g2.name,
                                            func.to_date(g2.month, 'yyyy-mm') == func.add_months(
                                                func.to_date(g1.month, 'yyyy-mm'), -1)
                                        ), 0).label('last_balance')
                                        ).filter(
                OusiStaff.phone == g1.staff_phone, current_user.phone == OusiStaff.phone,
                g1.month.between(search_form.start_time.data.strip(), search_form.end_time.data.strip())
            ).order_by(g1.name).group_by(OusiStaff.department, OusiStaff.name.label('staff_name'), OusiStaff.phone,
                                         OusiStaff.role,
                                         g1.name.label('guest_name'), g1.month, g1.balance)
    ...
    ...
                                         
    return render_template('show/01.html', data=data, searchForm=search_form)

這是第一個(gè)頁(yè)面的的搜索功能實(shí)現(xiàn)方法血久,使用了 if current_user.role == 'admin' else ... 來(lái)區(qū)分權(quán)限突照。

@show.route('/02', methods = ['GET', 'POST'])
@login_required
def _02():
    search_form = SearchForm(prefix='search')
    ...
    ...
    if current_user.role == 'admin':
    ...
    ...
    if search_form.validate_on_submit():
            database = db.session.query(sbq.c.department, sbq.c.role, sbq.c.staff_name, sbq.c.staff_phone,
                                        sbq.c.month, func.count(sbq.c.guest_name).label('members'),
                                        func.sum(sbq.c.balance).label('balance'),
                                        func.sum(sbq.c.last_balance).label('last_balance')). \
                filter(and_(sbq.c.month.between(search_form.start_time.data.strip(), search_form.end_time.data.strip()),
                            sbq.c.staff_name.like('%{}%'.format(search_form.name.data.strip())),
                            sbq.c.staff_phone.like('%{}%'.format(search_form.phone.data.strip())))
                       ).group_by(sbq.c.department, sbq.c.role,
                                                                               sbq.c.staff_name, sbq.c.staff_phone,
                                                                               sbq.c.month)
    else:
    ...
    ...
        if search_form.validate_on_submit():
            database = db.session.query(sbq.c.department, sbq.c.role, sbq.c.staff_name, sbq.c.staff_phone,
                                        sbq.c.month, func.count(sbq.c.guest_name).label('members'),
                                        func.sum(sbq.c.balance).label('balance'),
                                        func.sum(sbq.c.last_balance).label('last_balance')). \
                filter(sbq.c.month.between(search_form.start_time.data.strip(), search_form.end_time.data.strip())).group_by(sbq.c.department, sbq.c.role,
                                                                               sbq.c.staff_name, sbq.c.staff_phone,
                                                                               sbq.c.month)
    ...
    ...
                                                                               
   return render_template('show/02.html', data=data, searchForm=search_form)

這是第二頁(yè)面的實(shí)現(xiàn)方法。

結(jié)果展示

第一個(gè)頁(yè)面

016.gif

第二個(gè)頁(yè)面

017.gif

這兩個(gè)動(dòng)圖展示的是管理員權(quán)限的用戶的搜索查詢界面氧吐。

總結(jié): 本實(shí)現(xiàn)方法還是很繁瑣的讹蘑,大家如果對(duì) sql 語(yǔ)句很熟悉的話,在區(qū)分權(quán)限的時(shí)候筑舅,應(yīng)該知道 case ... when ... else ... end 這個(gè)語(yǔ)句座慰,如何把這樣的 sql 語(yǔ)句 sqlalchemy 化,還得精進(jìn)自己的技能翠拣,如果你恰好會(huì)這樣的技能版仔,請(qǐng)通知我一聲。

源碼下載

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末误墓,一起剝皮案震驚了整個(gè)濱河市蛮粮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谜慌,老刑警劉巖然想,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異欣范,居然都是意外死亡变泄,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)恼琼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妨蛹,“玉大人,你說(shuō)我怎么就攤上這事晴竞⊥苈保” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵颓鲜,是天一觀的道長(zhǎng)表窘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)甜滨,這世上最難降的妖魔是什么乐严? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮衣摩,結(jié)果婚禮上昂验,老公的妹妹穿的比我還像新娘。我一直安慰自己艾扮,他們只是感情好既琴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著泡嘴,像睡著了一般甫恩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酌予,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天磺箕,我揣著相機(jī)與錄音,去河邊找鬼抛虫。 笑死松靡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的建椰。 我是一名探鬼主播雕欺,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼棉姐!你這毒婦竟也來(lái)了屠列?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤伞矩,失蹤者是張志新(化名)和其女友劉穎脸哀,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體扭吁,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撞蜂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侥袜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝌诡。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖枫吧,靈堂內(nèi)的尸體忽然破棺而出浦旱,到底是詐尸還是另有隱情,我是刑警寧澤九杂,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布颁湖,位于F島的核電站宣蠕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏甥捺。R本人自食惡果不足惜抢蚀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望镰禾。 院中可真熱鬧皿曲,春花似錦、人聲如沸吴侦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)备韧。三九已至劫樟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間织堂,已是汗流浹背毅哗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捧挺,地道東北人虑绵。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像闽烙,于是被迫代替她去往敵國(guó)和親翅睛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 22年12月更新:個(gè)人網(wǎng)站關(guān)停黑竞,如果仍舊對(duì)舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,184評(píng)論 22 257
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,149評(píng)論 25 707
  • 魂?duì)繅?mèng)縈的箭扣長(zhǎng)城 多少驢友捕发、色友向往之地, 許多人想征服你很魂、描寫(xiě)你扎酷, 卻總是顯得哪么蒼白無(wú)力…… ——題記 ...
    叢林野兔閱讀 212評(píng)論 0 0
  • 那花開(kāi)了 黃黃的,高高的 我輕輕地走進(jìn)去 卻久久未能找到那出路 那花開(kāi)了 藍(lán)藍(lán)的遏匆,嫩嫩的 我細(xì)細(xì)地?fù)崦?卻絲絲沒(méi)...
    啞喏閱讀 243評(píng)論 0 0
  • 外婆去世后 我又回到上海 和謝先生 開(kāi)始經(jīng)歷漫長(zhǎng)磨合期 這個(gè)男人一開(kāi)始 又小氣又難搞 去超市買(mǎi)個(gè)枕頭 這男人說(shuō)一起...
    龍姑娘哎閱讀 238評(píng)論 0 0