1. URL Argument
2. 쿼리 딕셔너리 받기
장고 기능으로 HTTP request안에 request.GET 그리고 request.POST 객체로 쿼리 딕셔너리를 가질 수 있습니다.
URL이 다음과 같으면, domain/search/?q=haha,
이렇다면 request.GET.get('q','')를 사용하면 됩니다.
q는 당신이 원하는 파라미터이며, ''는 q가 없을 때 기본(default) 값입니다.
request.GET.get에 대해
request.GET은 Http리퀘스트를 사전형 데이터로 얻을 수 있게됨.
그래서 .get 함수를 써서 데이터를 받아올 수 있음.
def fbv(request):
print(request.GET['q'])
return HttpResponse('')
# 아웃풋 100
이렇게 받아올 수도 있지만, 만약에 request.GET에 인자 q가 없으면 에러가 뜬다.
그래서 우리는 .get 함수를 이용
def fbv(request):
print(request.GET.get('somekey'))
return HttpResponse('')
# 아웃풋 None
Https 뜯어보기
서버-클라이언트 통신 시 아래와 같은 절차로 데이터가 오고 갑니다.
1) 특정 페이지가 요청(리퀘스트)되면, 장고는 요청 시 메타데이터를 포함하는 HttpRequest 객체를 생성
2) 장고는 urls.py에서 정의한 특정 View 클래스/함수에 첫 번째 인자로 해당 객체(request)를 전달
3) 해당 View는 결과값을 HttpResponse 혹은 JsonResponse 객체에 담아 전달
1. HTTPRequest
- 주요 속성(Attribute)
HttpRequest.body # request의 body 객체
HttpRequest.headers # request의 headers 객체
HttpRequest.COOKIES # 모든 쿠키를 담고 있는 딕셔너리 객체
HttpRequest.method # reqeust의 메소드 타입
HttpRequest.GET # GET 파라미터를 담고 있는 딕셔너리 같은 객체
HTTpRequest.POST # POST 파라미터를 담고 있는 딕셔너리 같은 객체
- 활용
- request.method
if request.method == 'GET':
do_something()
elif request.method == 'POST':
do_something_else()
- request.headers 가져오기
{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6', ...}
>>> 'User-Agent' in request.headers
True
>>> 'user-agent' in request.headers
True
>>> request.headers['User-Agent']
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
>>> request.headers['user-agent']
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
>>> request.headers.get('User-Agent')
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
>>> request.headers.get('user-agent')
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
2. HttpResponse
HttpResponse(data, content_type)
- response를 반환하는 가장 기본적인 함수
- 주로 html를 반환
# string 전달하기
HttpResponse("Here's the text of the Web page.")
# html 태그 전달하기
response = HttpResponse()
>>> response.write("<p>Here's the text of the Web page.</p>")
3. HttpRedirect
HttpResponseRedirect(url)
- 별다른 response를 하지는 않고, 지정된 url페이지로 redicrect를 함
- 첫번 째 인자로 url를 반드시 지정해야 하며, 경로는 절대경로 혹은 상대경로를 이용할 수 있음
4. Render
render(request(필수), template_name(필수),
context=None, content_type=None,
status=None, using=None)
- render는 httpRespose 객체를 반환하는 함수로 template을 context와 엮어 httpResponse로 쉽게 반환해 주는 함수임
- template_name에는 불러오고 싶은 템플릿명을 적음
- context에는 View에서 사용하던 변수(dictionary 자료형)를 html 템플릿에서 전달하는 역할을 함. key 값이 템플릿에서 사용할 변수이름, value값이 파이썬 변수가 됨
# views.py
from django.shortcuts import render
def my_view(request):
name = "joey"
return render(request, 'app/index.html', {
'name': name,
}
5. JsonResonse
JsonResponse(data, encoder=DjangoJSONEncoder,
safe=True, json_dumps_params=None,
**kwargs)
- HttpResponse의 subclass로, JSON-encoded response를 생성할수 있게 해 줌. 대부분의 기능은 superclass에서 상속받음
- 첫번째 인자로는 전달할 데이터로서 반드시 dictionary 객체여야 함.
- 디폴트 Content-type 헤더는 application/json임
- encoder는 데이터를 serialize할 때 이용됨.
- json_dumps_params는 json.dumps()에 전달할 딕셔너리의 keyword arguments임
# Serializing non-dictionary objects
response = JsonResponse([1, 2, 3], safe=False)
JsonResponse는 response를 커스터마이징 하여 전달하고 싶을때, http status code에 더하여 메세지를 입력해서 전달할 수 있다.
이 메세지는 프론트엔드 개발자와 협의하여 약속된 메시지를 던진다. 만약 딱히 전달할 메시지가 없고, status code만 전달한다면 HttpResponse를 사용하면 된다.
1. Get 요청할때 parameter 전달법
params = {'param1': 'value1', 'param2': 'value'}
res = requests.get(URL, params=params)
2. POST 요청
import requests, json data = {'outer': {'inner': 'value'}}
res = requests.post(URL, data=json.dumps(data))
3. 헤더 추가
headers = {'Content-Type': 'application/json; charset=utf-8'}
cookies = {'session_id': 'sorryidontcare'}
res = requests.get(URL, headers=headers, cookies=cookies)
참고 :
https://velog.io/@swhybein/django-queryurl-%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0
파라미터 전송 : https://nalara12200.tistory.com/172
https://eunjin3786.tistory.com/274
https://fedingo.com/how-to-capture-url-parameters-in-django-request/
https://engineer-mole.tistory.com/125
'개발합시다. > BackEnd 공부' 카테고리의 다른 글
Django의 Session관리 (Redis 활용) (0) | 2021.12.15 |
---|---|
Spring Boot 실습기록 2 (0) | 2021.12.08 |
Redis 추가공부 사항 (0) | 2021.12.08 |
Spring Boot 실습 기록 1 (0) | 2021.12.07 |
Redis의 모든 것 (0) | 2021.12.07 |