Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- eclipse
- 이클립스
- db
- 알고리즘
- spring
- javascript
- BOJ
- 백준
- PYTHON
- 스프링
- 오라클
- 웹프로그래밍
- java
- 플라스크
- mybatis
- 데이터베이스
- 에러
- 자바스크립트
- mysql
- 파이썬
- TIL
- 링크
- jQuery
- database
- Oracle
- flask
- 자바
- sql
- rdbms
- Git
Archives
- Today
- Total
기록과 정리의 공간
[프로젝트] Flask로 게시판 만들기 - 4 본문
Flask로 게시판 만들기 - 4 (참고 강의 링크-인프런 강의)
(공부 하며 기록이 필요한 부분들만 정리함)
- 개발 환경 : windows 10 / Python 3.8.1 / vscode
- 검색 기능 구현하기
1. 검색 기능 구현하기 (전체 코드X, 일부 코드만 가져옴)
- list.html
- type이 button인 input엘리먼트를 클릭하면 search()함수가 호출된다.
- 이 함수는 id가 search와 keyword인 엘리먼트를 찾아 해당 엘리먼트 value 속성의 값을 각각 변수에 저장하고, 조건문을 통해 v_search값이 ""가 아닐 때, Window객체의 프로퍼티인 location객체와 Flask의 url_for함수를 통해 파이썬 코드에 작성된 board_list()함수를 실행시키는 url로 이동시킨다. 이 때, 두 변수의 값을 search와 keyword라는 파라미터의 값으로 넘겨준다.
<script>
function search() {
var v_search = document.getElementById("search").value;
var v_keyword = document.getElementById("keyword").value;
if(v_search == "") {
return false
} else {
self.location.href = "{{url_for('board_list')}}?search=" + v_search + "&keyword=" + v_keyword;
}
}
</script>
(중략)
<!-- 검색 기능을 위한 코드 시작 -->
<select name="search" id="search">
<option value="">검색대상</option>
<option value="0" {% if search == '0' %} selected {% endif %}>제목</option>
<option value="1" {% if search == '1' %} selected {% endif %}>내용</option>
<option value="2" {% if search == '2' %} selected {% endif %}>제목+내용</option>
<option value="3" {% if search == '3' %} selected {% endif %}>작성자</option>
</select>
<input type="text" name="keyword" id="keyword" {% if keyword != None %} value={{keyword}} {% endif %}>
<input type="button" value="검색" onclick="search()">
<!-- 검색 기능을 위한 코드 끝 -->
- board_list()함수
- request.args.get()로 list.html의 JS코드 에서 넘겨준 search, keyword파라미터의 값을 받아와 변수에 저장한다.
- query : 최종적으로 완성된 쿼리가 들어갈 변수. 예를 들어, 검색 대상을 제목으로 하고 '기초'로 검색하면 {'$or': [{'title': {'$regex': '기초'}}]}
- search_list : 검색 상태를 추가할 리스트 변수. 예를 들어, 검색 대상을 제목으로 하고 '기초'로 검색하면 [{'title': {'$regex': '기초'}}]
- $regex는 MySQL의 LIKE와 비슷한 역할을 한다고 생각하면 된다. 예를 들어, {"title": {"$regex": keyword}}는 컬렉션에서 title에 keyword가 포함된 모든 데이터를 가져온다. (참고 링크 : (MongoDB - $regex) / (MongoDB - $or) )
- find함수의 인자로 query를 넘긴다.
@app.route("/list")
def board_list():
board = mongo.db.board
# 페이지 값 (값이 없는 경우 디폴트값 = 1)
page = request.args.get("page", 1, type=int)
search = request.args.get("search")
keyword = request.args.get("keyword")
# 최종적으로 완성된 쿼리를 만들 변수
query = {}
# 검색어 상태를 추가할 리스트 변수
search_list = []
if search == '0':
search_list.append({"title": {"$regex": keyword}})
elif search == '1':
search_list.append({"contents": {"$regex": keyword}})
elif search == '2':
search_list.append({"title": {"$regex": keyword}})
search_list.append({"contents": {"$regex": keyword}})
elif search == '3':
search_list.append({"name": {"$regex": keyword}})
# 검색 하고자 하는 대상이 한개라도 존재할 경우 query 변수에 $or 리스트를 쿼리한다.
if len(search_list) > 0:
query = {"$or": search_list}
(중략)
datas = board.find(query).skip((page - 1) * limit).limit(limit) # find()의 인자로 query를 넘겨줌
# 게시물의 총 개수
tot_count = board.find(query).count() # find()의 인자로 query를 넘겨줌
(중략)
return render_template(
"list.html",
datas=datas,
limit=limit,
page=page,
block_start=block_start,
block_end=block_end,
last_page_num=last_page_num,
search=search,
keyword=keyword)
'프로젝트 > 게시판1' 카테고리의 다른 글
[프로젝트] Flask로 게시판 만들기 - 6 (0) | 2020.08.20 |
---|---|
[프로젝트] Flask로 게시판 만들기 - 5 (0) | 2020.08.07 |
[프로젝트] Flask로 게시판 만들기 - 3 (1) | 2020.08.01 |
[프로젝트] Flask로 게시판 만들기 - 2 (0) | 2020.07.29 |
[프로젝트] Flask로 게시판 만들기 - 1 (0) | 2020.07.29 |
Comments