摘要:項目描述管理員用戶可以搜索本部門下所有用戶的各個月份的相關信息。不同的權限搜索頁面是不同的。結果展示第一個頁面第二個頁面這兩個動圖展示的是管理員權限的用戶的搜索查詢界面。
搜索功能是一個項目個性化需求最強烈的部分,用戶想要不同的報表,可以通過搜索不同的字段來實現。項目描述
管理員用戶可以搜索本部門下所有用戶的各個月份的相關信息。
一般用戶只能搜索各個月份自己的相關信息。
實現搜索頁面創建forms 類,使用 flask-wtf 。
創建搜索頁面的 html 模板。
不同的權限搜索頁面是不同的。
此處使用flask的基本功能,不再贅述,詳情請參見代碼。
在試圖函數中實現相關搜索功能views.py 中的內容如下:
@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)
這是第一個頁面的的搜索功能實現方法,使用了 if current_user.role == "admin" else ... 來區分權限。
@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)
這是第二頁面的實現方法。
結果展示第一個頁面
第二個頁面
這兩個動圖展示的是管理員權限的用戶的搜索查詢界面。
總結: 本實現方法還是很繁瑣的,大家如果對 sql 語句很熟悉的話,在區分權限的時候,應該知道 case ... when ... else ... end 這個語句,如何把這樣的 sql 語句 sqlalchemy 化,還得精進自己的技能,如果你恰好會這樣的技能,請通知我一聲。
源碼下載
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41313.html
摘要:本文主要講解如何生成不同需求的報表。項目描述第一個頁面,以和為關聯,查詢出本月職工的關聯客戶及客戶的資產余額。建立上個月的虛字段。,二是利用函數來對初始化數據進行賦值的操作。提示注意的語法。權限為的用戶只顯示本人的相關信息。 曾經,因為對 sqlalchemy 不熟悉,固執的拋棄之,直接引入原生的 cx_Oracle 來生成報表,但是經過一堆的上下文等錯誤后,我幡然悔悟,還是回到了 s...
摘要:一般印象,項目適合做一些短小精悍的項目,特別是與等數據庫結合很是般配。生成報表,不同的查詢結果生成不同的報表。配置從下載客戶端,然后解壓后放入自己指定的目錄。指定數據庫連接池的超時時間。 一般印象,flask 項目適合做一些短小精悍的項目,特別是與 sqlite、mysql 等數據庫結合很是般配。但是在一些大公司,特別是一些金融行業等國企公司,還是以 oracle 居多,那么,這個小辣...
閱讀 1873·2021-09-22 15:29
閱讀 3355·2019-08-30 15:44
閱讀 3568·2019-08-30 15:43
閱讀 1766·2019-08-30 13:48
閱讀 1493·2019-08-29 13:56
閱讀 2480·2019-08-29 12:12
閱讀 973·2019-08-26 11:35
閱讀 1056·2019-08-26 10:25