成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

MyFaith / 2888人閱讀

摘要:項(xiàng)目描述管理員用戶可以搜索本部門下所有用戶的各個(gè)月份的相關(guān)信息。不同的權(quán)限搜索頁面是不同的。結(jié)果展示第一個(gè)頁面第二個(gè)頁面這兩個(gè)動(dòng)圖展示的是管理員權(quán)限的用戶的搜索查詢界面。

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

管理員用戶可以搜索本部門下所有用戶的各個(gè)月份的相關(guān)信息。

一般用戶只能搜索各個(gè)月份自己的相關(guān)信息。

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

創(chuàng)建forms 類,使用 flask-wtf 。

創(chuàng)建搜索頁面的 html 模板。

不同的權(quán)限搜索頁面是不同的。

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

在試圖函數(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è)頁面的的搜索功能實(shí)現(xiàn)方法,使用了 if current_user.role == "admin" else ... 來區(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)

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

結(jié)果展示

第一個(gè)頁面

第二個(gè)頁面

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

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

源碼下載

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41313.html

相關(guān)文章

  • 基于 oracle flask 項(xiàng)目(三)——生成報(bào)表

    摘要:本文主要講解如何生成不同需求的報(bào)表。項(xiàng)目描述第一個(gè)頁面,以和為關(guān)聯(lián),查詢出本月職工的關(guān)聯(lián)客戶及客戶的資產(chǎn)余額。建立上個(gè)月的虛字段。,二是利用函數(shù)來對(duì)初始化數(shù)據(jù)進(jìn)行賦值的操作。提示注意的語法。權(quán)限為的用戶只顯示本人的相關(guān)信息。 曾經(jīng),因?yàn)閷?duì) sqlalchemy 不熟悉,固執(zhí)的拋棄之,直接引入原生的 cx_Oracle 來生成報(bào)表,但是經(jīng)過一堆的上下文等錯(cuò)誤后,我幡然悔悟,還是回到了 s...

    sixgo 評(píng)論0 收藏0
  • 基于 oracle flask 項(xiàng)目(一)——配置項(xiàng)目

    摘要:一般印象,項(xiàng)目適合做一些短小精悍的項(xiàng)目,特別是與等數(shù)據(jù)庫結(jié)合很是般配。生成報(bào)表,不同的查詢結(jié)果生成不同的報(bào)表。配置從下載客戶端,然后解壓后放入自己指定的目錄。指定數(shù)據(jù)庫連接池的超時(shí)時(shí)間。 一般印象,flask 項(xiàng)目適合做一些短小精悍的項(xiàng)目,特別是與 sqlite、mysql 等數(shù)據(jù)庫結(jié)合很是般配。但是在一些大公司,特別是一些金融行業(yè)等國企公司,還是以 oracle 居多,那么,這個(gè)小辣...

    xialong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

MyFaith

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<