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

https://eunjin3786.tistory.com/133

https://dgkim5360.tistory.com/entry/python-requests

'개발합시다. > 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

+ Recent posts