Python/python 클론코딩

인스타그램 클론코딩 (검색)

SeongWon 2020. 4. 20. 17:57
반응형

인스타그램에서는 해시태그를 통해서 검색이 이루어진다.

 

urls.py

re_path(r'^search/$', searchView, name='search'),

 

searchView.py

def searchView(request):
    cursor = connection.cursor()

    keyword = request.GET.get("keyword")

    if '#' not in keyword:
        keyword = '#' + keyword[0:]



    search_sql = "SELECT post_id, post_hashtag.hashtag_id"
    search_sql += " FROM post_hashtag"
    search_sql += " LEFT OUTER JOIN hashtag on hashtag.hashtag_id = post_hashtag.hashtag_id"
    search_sql += " WHERE keyword = (%s)"

    search_sql_result = cursor.execute(search_sql, (keyword,))
    search_sql_datas = cursor.fetchall()

    # 검색된 해시태그 게시물 count
    count_sql = "SELECT COUNT(post_id)"
    count_sql += " FROM post_hashtag"
    count_sql += " WHERE hashtag_id = (%s)"

    count_sql_result = cursor.execute(count_sql, (search_sql_datas[0][1],))
    count_sql_datas = cursor.fetchall()

    if len(search_sql_datas) != 0:
        search = []
        for search_sql_data in search_sql_datas:
            # 검색결과 포스팅 이미지
            search_result_sql = "SELECT post_img_src"
            search_result_sql += " FROM post"
            search_result_sql += " WHERE post_id = (%s)"

            search_result_sql_result = cursor.execute(search_result_sql, (search_sql_data[0],))
            search_result_datas = cursor.fetchall()

            row = {'post_img_src': search_result_datas[0][0]
                   }

            search.append(row)
    else:
        return render(request, 'search.html')

    return render(request, 'search.html', {"search": search, "keyword": keyword, 'count':count_sql_datas[0][0]})

 

보통 인스타그램에서의 검색은 게시글에 등록된 해시태그를 통해 연결되기 때문에 form에서 받는 검색 키워드 데이터에 "#"으로 묶여있지를 판단한 후 View를 작동시킨다.

if '#' not in keyword:
        keyword = '#' + keyword[0:]

 


클론 인스타그램 페이지를 살펴보면 항상 상위에 검색할 수 있는 검색창이 존재한다.

searchView에서 처리한 방식대로 검색창에 검색을 하면

 

이와같이 검색 키워드가 담겨있는 해시태그로 연결된 게시글들을 모두 가져오게 한다.

반응형