항해/항해99

Today I Learned(TIL) 3

youngble 2021. 11. 6. 22:06

미니프로젝트를 진행하며 완성을 해야된다는 부담감과 끝까지 구현을 시도해보고 밀린 공부로 인해서 그동안 til 을 못써서 지금 이렇게 쓰고있다.

 

11월5일 밤에 마지막 미니프로젝트를 제출후 구현하지 못하거나 질문하고 싶었던것, trouble shooting 을 통해 팀원들과 정리하여 멘토분들에게 피드백을 받았다. 찾아볼시간도 많이 없었고 걸리는 시간도 오래걸려 미뤄 뒀던것이 멘토님의 피드백으로 모두 해소가 되었다 아 이게 현업 선배구나 느낌이 있었다.

 

그럼 오늘까지 밀린 내용을 아래 적으려고한다. 메모해 둔부분들이 많아 형식이 정해지지 않고 랜덤하게 적혀있는 부분은 나중에 수정하기로했다.

 

 

서버 파일 app.py에서

 

경로를 정해줄때 @app.rout(‘경로’)를 쓰는데 이건 flask 에 있는 기능이다. route 장식자는 flask 서버로 ‘경로’ url요청이 들어왔을 때 어떤 함수를 호출할 것인지를 조정한다. 

Route 장식자는 장식된 함수에서 결과를 반환할 때까지 기다리다가 결과가 반환되면 그 결과를 대기중인 웹 브라우저로 반환.

 

 

————

에러코드  :

 

mongo.error.OperationFailure: Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'}

 

>> client = MongoClient('localhost',27017) 에서 27017 다음 , username = ‘아이디’, password = ‘비밀번호’ 부분이 들어가있었을땐 안됐다. 말그대로 권한실패 그부분을 삭제하면 잘된다  

 

 

—————

3일차

 

GIT 기초 개념 :초기화

 

Git 설정이 잘 되지 않아서 프로젝트 파일은 현재 상태 그대로 두고, git 설정만 처음부터 되돌리고 싶은 거라면 내 컴퓨터 프로젝트 폴더 내 .git 폴더를 지워주면 됩니다.

 

미니프로젝트 api 기능과 경로 정리 테이블

번호 기존(나의코딩) 통합(전체바인딩) 방식 method 기능 
1 /sign_up/save  /api/register POST  
2 /sign_up/check_dup /api/id_check POST  
3 (app파일) /api/register 삭제    
4(login.html) 로고버튼 /api/register /    
         

 

Key 와 value

1.

  Login.html 부분 ajax의 data 부분

기존 통일 비고
username_give 그대로 원래 id로 작성하였으나 receive가 id 로 그대로 이고 give 부분은 id 로 쓰는게 아닌 주는것이기 때문에 
password_give 그대로  
Password2 pw2 초기 문서에는 빠졌던 부분인데 추가된 부분으로 비번 확인
     

 

app.py 부분

 

기존 통일
username_receive Id
password_receive Pw
Doc = { “username” : username_receive,                                  “password” : password_hash,                                              “profile_name” : username_receive,                                          “profile_pic": "",                                
"profile_pic_real": "profile_pics/profile_placeholder.png", 
"profile_info": “”,                                                                                  "name": name,
"p_num": p_num,
"address": address,
"email": email }
Doc = { “id” : id,                                                            “pw” : pw,                                                                                       "name": name,
"p_num": p_num,
"address": address,
"email": email    }
   

 

  1. 바뀐사항 

원래기존 /register 경로가 회원가입하는 페이지로 return render_template(‘가입페이지.html’) 식으로 리턴하여 페이지 리로딩을 해야하는데  현재 강의를 들으며 했던 기능은 toggleClass(“클래스이름”)를 사용하였기때문에 화면이동없이 데이터만 주는 방식이다, 원래 설계했던 /api/register 의 기능은 같음. 

그안에 doc객체의 이름과 그전에 가입하기를 누를때 가져오는 변수의 이름이 다 다르다

 

 

정석진 멘토님 피드백 짱짱

 

크롤링,스트래핑할때 어느 영화 사이트는 자세히보면 /t/p 로 주소가 시작해서 데이터를 가져오면 경로가 짤려있어서 안된다 F12 을 통하거나 검사를 통해 이미지 경로를 자세히보면 베이스 url 부분이 빠져있다 따라서 아래를 붙여줘야한다. 아래 사이트를 들어가서 보면 알수있다

 

:베이스 url 를써야함 www.themoviedb.org

 

The Movie Database (TMDB)

Welcome. Millions of movies, TV shows and people to discover. Explore now.

www.themoviedb.org

 

해당 이미지 주소 이미지

사진처럼 주소를 보면 /t/p 로시작하는데  아래처럼 보면 base URL 이 https://www.themoviedb.org 가 있는것을 알수있다.

 

먼저 진행해야 좋다고 하신 부분이 

  1. 백과 프론트 합칠것 
  2. 통합 
  3. Git 일단 크론해놀것

——— 

깃헙 협업 기초

 

issue를 사용해 작업할 수 있습니다

 

1단계. 누가 이 작업 할 것인지 정한다. - Issue 

2단계. 각자 맡은 것을 작업한다. - Branch 

3단계. 각자 작업을 프로젝트에 합친다. - merge (경우에 따라). 작업한 내용을 리뷰하고 최종적으로 프로젝트에 반영한다. - PR 후 merge

 

  • 버그(프로그램이 원하는 대로 동작하지 않는 것)를 신고 (Bug report, 버그 리포트)
  • 기능 추가 등의 프로젝트 개선 제안 (enhancement)
  • 위 문제들을 해결하기 위한 작업단위

개발자들이 쓰는말

  • "회원가입 기능에서 버그있네요. 이슈 등록해둘게요."
  • 여기 버튼을 더 눈에 잘 보이게 고치면 좋겠는데요? 이슈 등록해둘게요.
  • "6번 이슈 제가 처리할게요. 제 앞으로 할당해두겠습니다!"

이슈 예시 : https://github.com/javascript-tutorial/ko.javascript.info/issues

 

Github 외에도 많이 쓰이는 이슈 관리를 할 수 있는 도구는 Jira, Trello, YouTrack 등이 있어요. 이런 도구를 이슈를 추적(tracking)하면서 관리할 수 있다고 해서 이슈 트래커(issue tracker) 또는 이슈 추적도구(Issue Tracking Tool, 이슈 트래킹 툴) 라고 부름

 

  • 제목과 상세 내용은 협업하는 사람도 잘 알아볼 수있도록 적어주는게 좋음
  • Assigness(담당자) : 이 이슈를 작업하거나 연관된 사람을 적어줍니다. 내가 요리법 업데이트 할 꺼니까 나를 선택해주세요.
  • Labels: 이 issue 가 어떤 건지 분류해주는 겁니다. Github이 만들어준 기본 라벨을 사용할 수도 있고, 내가 직접 만들어줄 수도 있어요. 여기서는 enhancement (추가 기능 개선) , good first issue (처음 프로젝트에 참여하는 사람이 작업하기 쉬운 이슈) 를 골라주었어요. 마음에 드는 걸 골라주셔도 됩니다!

프로젝트에 따라 issue 에 적어야하는 내용이 다를수있다. issue 를 잘 적어두면 앞으로 내가 어떤 작업을 해야할지 파악하는데 굉장히 편함

 

목 옆에 있는 #숫자가 이슈의 번호 임

이슈 번호는 여러분들 repo 기준으로 1부터 생성이 됨

 

 

항해99 4일차

더보기

 

 

 

Chromdriver를 사용했을때 기능:

 

스크롤,창끄기, 열기, 클릭 등 창이 뜬 상태에서 실행 

 

driver.execute_script(“window.scrollTo(0, 1000)”).  //쌍따옴표에 들어있는것을 실행해달라는 명령어 즉 0에서 1000까지 스크롤을 내려줘

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")  // document는 내가 보고있는 전체문서 body는 그안에있는 body 태그 그 body태그안에 보여지는 scrollHeight 스크롤높이 이기때문에 코딩해석하면 내가 보는 문서의 전체높이가 된다

 

 

더보기

모달 : 평소에는 모습이 안보였다가 특정 행동이 했을때 이 페이지 위로 등장하는 작은 페이지를 말함

실제 bulma에서는 Is-active 이 있으면 등장, 없으면 등장 하지않음 

 

 

더보기

Login/join logout 에 id 나 클래스를 넣어주고 toggle 을 사용하여 모습을 off on 해준다, block 이 켜주는거였고, none 이 꺼주는거

 

 

 

user_info = db.users.find_one({"id": payload["id"]})

return render_template('index.html', movies=all_movies, user=user_info).  << 강의 10 에 나옴 

user.id

 

 

<nav id="btns-me" class="level is-mobile" style="margin-top:2rem">

    <a class="button level-item has-text-centered is-sparta" aria-label="edit"

       onclick='$("#modal-edit").addClass("is-active")'>

        프로필 수정&nbsp;&nbsp;&nbsp;<span class="icon is-small"><i class="fa fa-pencil"

                                                               aria-hidden="true"></i></span>

    </a>

 

    <a class="button level-item has-text-centered is-sparta is-outlined" aria-label="logout"

       onclick="sign_out()">

        로그아웃&nbsp;&nbsp;&nbsp;<span class="icon is-small"><i class="fa fa-sign-out"

                                                             aria-hidden="true"></i></span>

    </a>

</nav>

 

 

안되는 부분 :

 

 

현재 로그인 했을시 payload 안에 있는 id 값을 db.login 에 데이터를 따로 insert 하고 메인페이지에서 화면 로드시  $(document).ready() 안에 ajax 이용해서 아까 저장한 로그인의 아이디 값을 @app.route(/user) 경로에서 id 값만 가져올려고 하는 중입니다. 로그인화면에서 로그인하는데는 문제가 없는데  메인화면으로 출력시 저런 에러 메세지가 뜨고 제가 테스를위해 넣은 alert()는 화면에 출력되지 않습니다. 제가 접근 방식을 잘못하거나 불러오는 법을 잘못쓰고 있나 알고싶습니다.  제대로 db.login 에 넣은것을 main 화면에 ajax를 통해 id 값을 불러와서 쓰고싶은데 잘안됨

 

해결법 :

jinja2 부분  userId=userId 사용 {{userId}}

 

@app.route('/user')

def myPage(): token_receive = request.cookies.get('mytoken')

  try: payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])

     print(payload)

     userId = payload['id'];

     print(token_receive)

   return render_template('user.html', userId=userId)

      except (jwt.ExpiredSignatureError, jwt.exceptions.DecodeError): return redirect(url_for("home”))

 

 

'항해 > 항해99' 카테고리의 다른 글

(WIL)weekly I learned 02 회고록  (0) 2021.11.14
(WIL)weekly I learned 01  (0) 2021.11.07
Today I Learned(TIL) 2  (0) 2021.11.03
Today I Learned(TIL) 1  (0) 2021.11.01
항해99 15조 미니프로젝트 1일  (0) 2021.11.01