티스토리 뷰
우리는 컴퓨터가 한 대이다. 그래서 같은 컴퓨터에다 서버도 만들고, 요청도 할 것이다. 즉, 클라이언트가 = 서버가 되는 것이다. => 이런 것을 바로 로컬 개발환경 이라고 한다.
✔사용 IDE: 파이참
flask가 뭔가요?
Flask 프레임워크: 서버를 구동시켜주는 편한 코드 모음. 서버를 구동하려면 필요한 복잡한 일들을 쉽게 가져다 쓸 수 있다. (서버를 직접 구현하는 것은 매우 복잡하고 어려움, 프레임워크를 쓰지 않으면 태양초를 빻아서 고추장을 만드는 격)
flask 시작하기
- 우선 새로운 프로젝트를 만들고 내가 만든 폴더로 경로를 지정해줍니다. (venv가 제대로 생겼는 지 확인)
- 새로 만든 프로젝트에 flask 패키지를 설치해줍니다. (win의 경우, file -> setting -> project -> Python interpreter)
- flask 패키지 검색명: flask
- app.py 파일을 만들어 flask 시작 코드를 붙여넣어준다.
# flask 시작 코드는 아래와 같습니다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'This is Home!'
@app.route('/mypage')
def mypage():
return 'This is myPage!'
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)
⚠ 파일 이름은 app.py가 아니여도 상관은 없지만, 통상적으로 flask서버를 돌리는 파일은 app.py라고 작명합니다.
위의 파일을 파이참으로 실행(run)해보면 빨간색으로 표시된 안내문구를 볼 수 있다. (빨간색이라 오류난 줄 알았음;)
읽어보면 내가 지정한 port5000에 구동중이라는 내용이다.
chrome에서 localhost:5000/으로 접속해봅시다. 'This is Home'이라는 내용이 보이면 성공!
😓파이참 프로세스 종료(=app.py파일 실행 정지)시 단축키 이슈
⚠ 서버 종료: 터미널 창에서 ctrl + c
단, 서버 실행 역시 터미널 창에서 하고 종료도 터미널 창에서 해야 함
실행 명령어: python app.py
*저는 세팅에서 기본 터미널을 cmd -> git bash로 변경했습니다.
파이참 실행창에서는 ctrl + c단축키가 복사기능을 하기 때문에 ctrl + c가 먹질 않더군요
프로세스 종료를 해서 서버연결을 끊고싶은데.. 흠 구글링을 해도 정확한 해답은 아니지만 파이참 실행창에서 ctrl +F2를 하면 app을 중지해줍니다.
🐱👤Flask 세팅 - HTML 파일 주기
- 기본 폴더 구조: 항상 아래와 같이 세팅하고 시작해야 합니다.
❗주의 2가지:
1)기존에 있던 venv는 절대 건들지 말 것(얘는 그냥 없는 애라고 칩시다.)
2)폴더를 만들 때 templates라는 폴더명에 오타가 없이 만들어야 제대로 작동합니다.
(맞음 제가 templetes 라고 썼다가 내부에 있던 index.html을 가져오지 못했음^^)
Flask 서버를 만들 때, 항상, 프로젝트 폴더 안에,
ㄴstatic 폴더(이미지, css파일 등 정적인 데이터를 담아둡니다.)
ㄴtemplates 폴더(html파일을 넣어둡니다)
ㄴapp.py 파일
index.html 파일을 templates 폴더 안에 만들어줍니다.
내용물을 확인용으로 대충 만들어주세요
▶flask 내장함수 render_template 를 이용해서 index.html 파일을 불러오기
app.py
from flask import Flask, render_template
#당연히 render_template를 임포트해야 합니다.
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html') #render_template함수로 index.html가져옴
if __name__ == '__main__':
app.run('0.0.0.0', port=5000, debug=True)
🐱👤Flask 시작하기 - API 만들기
✔은행의 창구가 API와 같다고 했던 것을 기억하세요.
같은 예금 창구에서도 개인 고객이냐 기업 고객이냐에 따라 처리하는 것이 다른 것처럼
클라이언트가 요청할 때에도, '방식'이 존재한다.
HTTP라는 통신 규약을 따른다. 클라이언트는 요청할 때 HTTP request method(요청 메소드)를 통해, 어떤 요청 종류인지 정보를 알려주는 것 to 응답하는 서버 쪽에!
흔히 쓰이는 2가지 방식: GET, POST
<GET>
- 통상적으로 데이터 조회(Read)를 요청할 때 사용 -> 즉 클라이언트가 정보를 서버에서 받아와서 화면에 표시할 때 GET사용
- 데이터 전달: URL 뒤에 물음표를 붙여 key=value로 전달 → e.g) google.com?q=북극곰
<POST>
- 통상적으로! 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청 할 때 → e.g.) 회원가입, 회원탈퇴, 비밀번호 수정
- 데이터 전달 : 바로 보이지 않는 HTML body에 key : value 형태로 전달
🐱👤예시통해 알아보기
✅index.html - GET 요청 Ajax코드 (클라이언트쪽)
- ajax통신은 jQuery가 필요하니 head쪽에 jQuery CDN을 넣어줍니다.
- 아래의 코드는 script 태그를 하나 더 생성하여 넣어준 것
▶GET
//GET 요청 확인 Ajax코드
$.ajax({
type: "GET",
// 슬래쉬test라는 창구에 가는데 title_give라는 이름으로 봄날은 간다라는 데이터를 내가 갖고 감
// 창구에 주민번호 000-0000라는 정보를 가지고 내가 갈게와 같은 맥락
url: "/test?title_give=봄날은간다",
data: {},
success: function (response) {
// 만약 통신이 성공적으로 됐다면 너가 준 정보를 내가 콘솔에 출력할게! 라는 의미
console.log(response)
}
})
▶POST
$.ajax({
type: "POST",
url: "/test",
data: {title_give: '봄날은간다'},
success: function (response) {
console.log(response['msg'])
}
})
✅app.py - GET요청 API코드 (서버쪽 // flask를 통해서 서버 통신 중)
▶GET
# request, jsonify 임포트해야 합니다.
#/test창구에서 데이터를 받아왔음 라는 의미
@app.route('/test', methods=['GET'])
def test_get():
#title_give라는 이름으로 뭔가를 받아와서 변수에 담고 걔를 찍어줬음
title_receive = request.args.get('title_give')
print(title_receive)
return jsonify({'result': 'success', 'msg': '이 요청은 GET!'})
-> 예시에서는 GET요청을 통해서 데이터를 가져오는데 통상적으로 POST요청에서 데이터를 많이 가져가게 된다.
▶POST
# /test라는 창구를 만들었고 POST만 받는 것은 이쪽으로와라
# 같은 /test창구지만 GET을 받으면 저쪽으로 가라
@app.route('/test', methods=['POST'])
def test_post():
title_receive = request.form['title_give']
print(title_receive)
return jsonify({'result': 'success', 'msg': '요청을 잘 받았어요! POST '})
🐱👤새 프로젝트 만들 때 설치 패키지
▶필수 패키지 3가지
- flask // 서버 구축 프레임워크
- dnspython // pymongo를 사용하기 위해서 dnspython을 설치해야 한다. 아틀라스 URL 서식을 위해
- pymongo // DB연결
# 아래가 바로 아틀라스 서식(mongoDB, 즉 아틀라스와 내 application와의 연결을 위해서 사용하는 URL임)
mongodb+srv://test:<password>@cluster0.dod88.mongodb.net/myFirstDatabase?retryWrites=true&w=majority
# test:<password> 와 myFirstDatabase 부분은 예시코드이 내가 설정해 놓은 것으로 변경해야하는 정보이다.
# test는 아이디 <password>는 아이디에 해당하는 비밀번호 myFirstDatabase은 내 데이터베이스명을 채워넣으면 된다.
dnspython에서 급 궁금해진 정보 ▼
Q. DNS란 무엇입니까?
- 도메인 이름 시스템(DNS, Domain Name System)은 사람이 읽을 수 있는 도메인 이름(예: www.amazon.com)을 머신이 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환합니다.
- 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다.
+++크롤링을 하게 된다면 2개 추가
- requests
- bs4 ( beautifulsoup )
🐱👤프로젝트 구현 시 체크사항
✔어떻게 만들 지 파악한다
- 서버 구현
- 클라이언트 구현
- 확인
▶예시
POST 연습(포스팅하기) , 서버측 구현
- 요청 정보: URL = /movie, 요청 방식 = POST
- 클라(ajax)-> 서버(flask): url, star, comment
- 서버 측에서는 클라에서 받은 url데이터를 가지고 image, title, description/ star / comment 데이터를 DB에 저장한 뒤 완료해주면 된다.
- 서버(flask) -> 클라(ajax): 메세지를 보냄 (포스팅 완료!)
GET 연습(보여주기), 클라측 구현
(*API 만들고 사용하기 - 보여주기API(Read -> GET)
- 요청 정보: URL = /movie, 요청 방식 = GET
- 클라(ajax) -> 서버(flask): (없음) // get방식이니 클라측에 가져갈 데이터 필요 x
- 서버(flask) -> 클라(ajax) : 전체 영화를 보내주기
'프로그래밍 > Python' 카테고리의 다른 글
[python] 웹스크래핑(크롤링) 해보기 (0) | 2022.04.29 |
---|---|
[python] 파이썬 새 프로젝트 만들기(with. 파이참) , 파이썬 기본문법 (0) | 2022.04.29 |
- Total
- Today
- Yesterday
- fs모듈 넥스트
- 원티드 3월 프론트엔드 챌린지
- getServerSideProps
- 프리렌더링확인법
- 형제 요소 선택자
- nvm 설치순서
- 항해99프론트
- 원티드 프리온보딩 FE 챌린지
- 타입스크립트 장점
- 부트캠프항해
- float 레이아웃
- grid flex
- ~ ^
- tilde caret
- 원티드 FE 프리온보딩 챌린지
- 원티드 프리온보딩 프론트엔드 챌린지 3일차
- && 셸 명령어
- 프리온보딩 프론트엔드 챌린지 3월
- 항해99프론트후기
- 항해99추천비추천
- is()
- 타입스크립트 DT
- text input pattern
- Prittier
- reactAPI
- D 플래그
- getStaticPaths
- aspect-ratio
- 틸드와 캐럿
- nvm경로 오류
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |