摘要:項(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
摘要:本文主要講解如何生成不同需求的報(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...
摘要:一般印象,項(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è)小辣...
閱讀 1884·2021-09-22 15:29
閱讀 3361·2019-08-30 15:44
閱讀 3570·2019-08-30 15:43
閱讀 1769·2019-08-30 13:48
閱讀 1497·2019-08-29 13:56
閱讀 2483·2019-08-29 12:12
閱讀 977·2019-08-26 11:35
閱讀 1059·2019-08-26 10:25