- /book/1 이러한 URL로 책 정보를 요청할 때 book이 자원이 됨
- GET/book/1 GET으로 요청
- 표현은 자원과 행위를 합친 내용이라고 생각해도 무방
- URL: http://elice.example.com/index.html(실제로 서버에 그 주소가 있는 것, 그 장소에 그 파일이 있음. 해당하는 리소스의 위치를 표현)
URI: http://elice.example.com/index(실제로는 index 파일이 존재하지 않음.
파일이 실제로 해당하는 주소에 포함이 되는가/안되는가 차이(index 뒤에 do나 nhn 등의 확장자가 붙어 있는데 해당하는 위치에 파일이 없으면 그 주소는 URI이다.)
- 자원에 대한 동작을 꼭 표현해야 한다.
REST API에서 동작을 표현하는 방법은 HTTP Method이다.
- GET/book/1 : book에 해당하는 1번 데이터를 GET 하겠다.
- URI에 동사를 넣어 표시하기 보다는 Method와 명사를 활용
- 확장자가 포함되면 해당 위치에 파일이 존재하는게 되기 때문에 확장자를 포함하지 않음
- Flask는 return 값을 jsonify로 주어서 RESTful API를 만들 수 있다.
하지만, 좀 더 RESTful에 맞게 서버를 만들 수 있는 라이브러리가 있다.
flask-restful을 활용해서 REST API 서버를 만들어 보자
- 어디로 어떻게 무엇을 전송할 것인가
- res에는 데이터가 어떻게 돌아왔는지, 담겨 있는 데이터들과 성공한 status 값들이 돌아오게됨
- html : /ajax test에 GET 방식으로 요청해서 성공한다면 res 객체에 돌아온 어떤 것을 출력
- flask : dict_data에 데이터가 저장되어 json형태로 돌아감
- GET 방식으로 데이터를 받으니까 /mysum?a=~~ & b = ~~ 이렇게 데이터가 온다는 것을 알 수 있다.
- 테스트 코드는 함수 이름 앞에 test를 붙여줘야함
- app.test_client().get() => 여기서 app은 flask app, .get은 GET방식으로 데이터를 받겠다는 뜻
- data는 return jsonify(~~)의 값들을 받아오는 것
- assert response.status_code == 200 : 상태값이 200이면 테스트 패스
- assert data['result'] == 200 : 우리가 원하는 값은 200인데 200이 아니므로 이번 테스트는 통과 X
- get_josn()은 form 데이터로 들어온 것을 json 형태로 묶어줌
- data는 딕셔너리
- request.get_json()에 json.dumps를 통해 ({'a':10, 'b':2})데이터가 묶여서 들어감
- json.loads(response.get_data(as_text=True) : 우리가 jsonify 안에 있는 데이터를 읽을 수 있는 형태로 가져오겠다는 의미
- SQLAlchemy : db를 model로 만들어주기 위한 필수 요소
- id 값은 직접 넣어주지 않아도 autoincrement=True에 의해 하나씩 증가함
- nullable=False : null 값이 들어갈 수 없음
대충 html, css, javascript, bootstrap으로 만듦
- $("#content").val() : 해당하는 공간에 있는 값을 가져옴
- Math.random().toString(20).substr(2,10) : 10자리의 랜덤한 id 생성
- 가져온 데이터(url(flask 서버에서 작성한 url), type(POST), data(글쓰기, 작성자))들을 토대로 Ajax 사용
- Author도 있었다면
- Author = request.form['Author']
post = Post(Author, content)
db.session.add(post)
db.session.commit()
- 게시글 id는 게시글을 특정할 수 있음
- block문법을 사용하면 template을 확장할 수 있음
- test.html에 작성한 내용들이 base.html에 그대로 적용됨