티스토리 뷰

WEB/Django

The Request Object in Django

취뽀가자!! 2018. 12. 25. 01:43

The Request Object in Django

우리 function에서 진행하는 http request는 브라우저가 우리에게 보내는 http request와는 다르다.

브라우저나 아이폰이 보내는 http request는 정상적인 요정이다.


여기서 진행하는 http request는 많은 과정을 거쳐 우리의 view function에 도달하게 된다. 아래의 코드가 그 예시다.

class ListAllImages(APIView):

def get(self, request, format=None):
all_images = models.Image.objects.all()

serializer = serializers.imageSerializer(all_images, many=True)

return Response(data=serializer.data)


그 사이에는 여러 개의 middleware가 존재한다. 우리가 세팅을 진행할 때 확인했던, middleware(운영체제에서 제공되지 않는 서비스를 에플리케이션에 제공하는 소프트웨어)들은 여러 개를 체크하겠지만, 동시에 여러 개 attribute를 추가할 것이다.


그래서 http request를 우리가 view function으로 받아볼 때에는 미들웨어들이 추가한 여러 요소들을 볼 수 있다.


이 요청을 접근하는 방식은 view functions의 두 번째 (명확하게는 첫 번째) attribute를 확인하면 된다. 이 경우 request가 된다.


이건 장고의 규칙이다!. view를 만들 때마다, 장고는 request object를 첫 번째 argument안에 놓을 것이다.


HttpRequest

def get(self, request, format=None):


장고는 view function의 첫 번째 argument로 HttpRequest를 전달한다.


http request objects가 갖고있는 여러 attribute를 살펴보자.


HttpRequest.scheme

A string representing the scheme of the request (http or https usually).

scheme를 사용하면, http인지 https인지 확인할 수 있다. 확인해보자.

def get(self, request, format=None):
print(request.scheme)

all_likes = models.Like.objects.all()

serializer = serializers.LikeSerializer(all_likes, many=True)

return Response(data=serializer.data)


http인게 확인된다.


이와 같이 여러가지 request를 실험해볼 수 있다. 중요한 것은, 이 모든 attributes는 나를 위해 장고가 만들어줬다는 것이다.


수행하는 방법은 request를 통해 여러 개의 middleware를 실행해서 가능하다.


모든 데이터를 받을 것이기 때문에 중요한 request는 POST이다. 예를 들면, 사진을 업로드할 때, http request POST를 사용한다.


request.user

request user를 이해하는 것도 중요하다.


이건 승인-middleware에서 오는 건데, 우리가 사용할 수 있는 유저 오브젝트를 제공할 것이다. 예를 들면, 요청받은 유저가 승인이 되었는지 체크할 수 있다. 


users -> models.py

website = models.URLField(null=True)


images -> views.py

class ListAllLikes(APIView):
def get(self, request, format=None):

all_likes = models.Like.objects.all()

print(request.user.website)

serializer = serializers.LikeSerializer(all_likes, many=True)

return Response(data=serializer.data)


위 코드로 요청받은 유저가 승인이 되었는지 확인해 보면 None이라 뜬다.


name = models.CharField(_('Name of User'), blank=True, max_length=255)
website = models.URLField(null=True)
bio = models.TextField(null=True)
phone = models.CharField(max_length=140, null=True)
gender = models.CharField(max_length=80, choices=GENDER_CHOICES, null=True)
followers = models.ManyToManyField("self")
following = models.ManyToManyField("self")

유저의 여러가지 오브젝트 중에 웹사이트를 혹은 원하는 것을 골라서 체크할 수 있다.


그래서 유저가 승인된 유저인지, 아닌지 확인할 수 있게 웹사이트 외에도 전화번호, 성별 등 확인할 수 있다.

왜냐하면, 장고는 유저 오브젝트를 request 오브젝트에 붙여줄거니까. 또한 나는 유저가 승인을 받았는지, 안받았는지도 체크할 수 있다. 

그래서 승인받지 않은 유저에게는 정보를 제공하지 않도록 말이다.


Documents에 나와있는 attribute들을 이해할 필요가 있다. 거의 다 request를 통해서 관리가 된다. 예를 들면, 내가 팔로잉하는 유저에 대한 것이다.  


print(request.user.following)


위와 같이 입력, 이를 통해 해당 페이지를 request하는 유저가 팔로잉하는 유저가 누군지 얻을 수 있다.

'WEB > Django' 카테고리의 다른 글

로그인/로그아웃/회원가입 기능 구현  (0) 2019.01.07
JWT(Json Web Token)  (0) 2019.01.07
Hidden Model Fields in Django  (0) 2018.12.24
Creating the URLS and Testing the images serializers  (0) 2018.12.24
Customizing the Django Admin  (0) 2018.12.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함