can search book

This commit is contained in:
ridethepig 2022-11-13 23:25:53 +08:00
parent a7cd65c3f3
commit 4176572fef
2 changed files with 131 additions and 1 deletions

View File

@ -46,6 +46,84 @@
<div class="panel-title">搜索图书</div>
</div>
<div class="panel-body">
<form class="form-group" method="get">
<div class="container">
<select class="form-select col-3" name="bookattr" id="bookattr">
<!-- <option selected>书名</option>
<option>ISBN</option>
<option>作者</option>
<option>出版社</option>
<option>分类</option> -->
{% for opt in queryattr%}
{% if queryattr[opt]=="selected" %}
<option selected>{{opt}}</option>
{% else %}
<option>{{opt}}</option>
{% endif %}
{% endfor %}
</select>
{% if queryval%}
<input class="form-input form-inline col-8" name="bookname" id="bookname"
value="{{queryval}}">
{% else %}
<input class="form-input form-inline col-8" name="bookname" id="bookname">
{% endif %}
<input class="btn btn-primary input-group-btn form-inline" type="submit" value="搜索">
</div>
<!-- <div class="container">
<label class="form-label form-inline col-5" for="bookname"> 书名
<input class="form-input" name="bookname" id="bookname">
</label>
<label class="form-label form-inline col-2" for="author"> 作者
<input class="form-input" name="author" id="author">
</label>
<label class="form-label form-inline col-2" for="booktype"> 出版社
<input class="form-input" name="booktype" id="booktype">
</label>
<label class="form-label form-inline col-2" for="bookisbn"> 分类
<input class="form-input" name="bookisbn" id="bookisbn">
</label>
</div>
<input class="btn btn-primary input-group-btn p-centered" type="submit" value="搜索"> -->
</form>
<div id="search-result">
{% for book in queryresult%}
<div class="card-header">
<div class="card-title h5">
<a href="/book/{{book['book_id']}}/">{{book['book_name']}}</a>
</div>
<div class="card-subtitle text-gray">
<span>作者: {{book['book_author']}}</span>
<span>语言: {{book['book_lang']}}</span>
<span>出版社: {{book['book_publisher']}}</span>
</div>
</div>
<!-- <div class="card-body">
...
</div>
<div class="card-footer">
<button class="btn btn-primary">...</button>
</div> -->
{% endfor %}
</div>
<div id="pagination-wrapper" class="p-centered">
<ul class="pagination">
{% if page_first%}
<li class="page-item disabled">
{% else %}
<li class="page-item">
{% endif %}
<a href="{{prev_page_link}}">上一页</a>
</li>
{% if page_last%}
<li class="page-item disabled">
{% else %}
<li class="page-item">
{% endif %}
<a href="{{next_page_link}}">下一页</a>
</li>
</ul>
</div>
</div>
<div class="panel-footer">

View File

@ -70,7 +70,7 @@ def addbook():
typeid = typeid['type_id']
try:
db.execute("insert into book_type values(?,?)",
(bookid, typeid))
(typeid, bookid))
db.commit()
except sqlite3.Error as _e:
error = "未知错误: %s" % (_e)
@ -136,3 +136,55 @@ def removetype():
error = "删除(type_id=%s)完成" % tid_to_del
return render_template("user/result.html", opname="删除分类",
opresult=error, cur_time=datetime.datetime.now())
@bp.route("/search", methods=("GET", "POST"))
@login_required
def search():
attr_dict = {"书名":"book_name", "ISBN":"book_isbn",
"作者": "book_author", "出版社":"book_publisher", "分类": "specail1"}
db = get_db()
page = request.args.get('page')
page_lim = 10
page_off = 0
queryval = request.args.get('bookname')
bookattr = request.args.get('bookattr')
queryattr = None
error = None
if page is None or not page.isdecimal():
page = 1
page = int(page)
if page <= 0:
error = "无效的分页 %d" % page
else:
page_off = page_lim * (page - 1)
queryresult = []
if error is None:
if bookattr is not None and bookattr in attr_dict.keys():
queryattr = attr_dict[bookattr]
attr_dict[bookattr] = "selected"
else:
error = "不合法的查询条件: %s" % (bookattr)
attr_dict["书名"] = "selected"
bookattr=""
if error is None:
if queryval is None or len(queryval) == 0:
querystring = "select * from book where user_id=%d" % (g.user['user_id'])
queryval = ""
elif bookattr == "分类":
querystring = "SELECT * from book WHERE user_id=%d AND book_id IN (select book_id from book_type, typetable where type_name LIKE \'%%%s%%\')" % (g.user['user_id'], queryval)
else:
querystring = "select * from book where user_id=%d and %s like \'%%%s%%\'" % (g.user['user_id'], queryattr, queryval)
querystring += " limit %d offset %d" % (page_lim, page_off)
# print(querystring)
queryresult = db.execute(querystring).fetchall()
page_last = False
if len(queryresult) < page_lim:
page_last = True
next_page_link = "/search?bookname=%s&bookattr=%s&page=%d" %(queryval, bookattr, page + 1)
prev_page_link = "/search?bookname=%s&bookattr=%s&page=%d" %(queryval, bookattr, page - 1)
# print(prev_page_link, next_page_link)
return render_template("user/search.html",
cur_time=datetime.datetime.now(), error=error, queryresult=queryresult,
next_page_link=next_page_link, prev_page_link=prev_page_link,
page_last=page_last, page_first=(page==1), queryval=queryval, queryattr=attr_dict)