본문 바로가기

개발일지/TIL

TIL 23-04-15

1.[Django - 팀프로젝트] 유저 정보 검색 기능

 문제점

url에 추가 입력하는 방법 말고 html 내에서 해결 가능해야함

 시도해 본 것들

  # urls.py
  path('mypage/<str:username>', views.user_info, name='user_info'),
  
  # views.py
  def user_info(request, username):
    user_info = get_object_or_404(UserModel, username=username)
    return render(request, 'user/user_info.html', {'user_info': user_info})

mypage/ 뒤에 직접 입력해서 결과가 나오는지 확인하고 이걸 기반으로 html을 작성했다.

form으로 post로 username을 전달하려고 함 

<form action="{% url 'user:mypage' user_info=user_info %}" method="post"">

같은 식으로 input에 값을 전달 시도 <- user_info의 전달 방식을 바꿔봐도 해결방법을 못 찾음

사용하기 어려운 <str:username> 포기하고 html 에서 다시 시작

일단 get과 post중 검색이므로 url에서 값을 확인해도 괜찮음 <-get 방식 사용

<form class="form-area search_bar" method="get" action='{% url 'user:search_info' %}'>

html에서 action으로 url만 보내기 

path('user_info/', views.search_info, name='search_info'),

urls.py 수정하기 

def search_info(request):
    # html 검색 입력값 가져 오기
    search_user = request.GET.get('search_user')
    user_info = get_object_or_404(UserModel, username=search_user)
    postings = Posting.objects.filter(username=user_info)
    return render(request, 'user/user_info.html', {'user_info': user_info, 'postings': postings})

매개변수로 입력 받는 게 아니라 request.GET.get('search_user')로 input값 가져오기 

 해결 방법

html

<form class="form-area search_bar" method="get" action='{% url 'user:search_info' %}'>
    <div class=" form-group mt-2 mb-2">
        <input type="text" class="form-control" placeholder="유저 검색" id="search_user" name="search_user">
    </div>
</form>

urls.py

path('user_info/', views.search_info, name='search_info'),

views.py

def search_info(request):
    try:
        # html 검색 입력값 가져 오기
        search_user = request.GET.get('search_user')
        user_info = get_object_or_404(UserModel, username=search_user)
        postings = Posting.objects.filter(username=user_info).order_by('-create_at')
        return render(request, 'user/user_info.html', {'user_info': user_info, 'postings': postings})
    # next로 페이지 돌아올 때도 search_user 정보가 없어서 에러 발생함
    except Http404:
        return HttpResponse(f"<script>alert('{search_user}은 존재하지 않는 유저입니다! or next로 돌아오면서 search_user값이 없어서 에러 발생');location.href='/main';</script>")

 알게 된 점

내가 원하는 결과가 나온다고해서 그게 내가 생각하는 방식으로도 작동한다는 보장은 아니라는 것을 배웠다.

작성할 때 부터 이해가 안가는 코드는 내게 도움이 안된다. 공부도 안되고 제대로된 코드로 만들기도 힘들다.

작성하는 내가 이해 가능한 코드 -> 일주일 뒤의 내가 알아보는 코드-> 같이 협업하는 팀원이 알아보는 코드 -> 완성된 코드를 유지 보수해야 하는 사람이 알아보는 코드의 순서로 발전해보자 

 

 

'개발일지 > TIL' 카테고리의 다른 글

TIL 23-04-17  (0) 2023.04.17
TIL 23-04-16  (0) 2023.04.16
TIL 23-04-14  (3) 2023.04.14
TIL 23-04-13  (2) 2023.04.13
TIL 23-04-12  (0) 2023.04.12