티스토리 뷰

Creating the URLS and Testing the images serializers

url을 만들기 전에 시리얼라이즈에 대해 좀 더 설명해야 될 부분이 있다. 

DB에 있는 모든 이미지들을 시리얼라이즈 하려면, 이를 내가 이 오브젝트를 위해 생성한 시리얼라이저로 시리얼라이즈 해야한다.


만약 내가 이를 다른 댓글 시리얼라이저로 시리얼라이즈 하면, 에러가 발생한다.

왜냐하면 다른 오브젝트를 위해 생성된 시리얼라이저이기 때문이다.


URL

url은 regular expression, View, name이렇게 총3가지로 구성되어 있다.


Regular expression

정규식 표현은 우리가 텍스트를 매칭하고, 텍스트의 패턴을 만들 수 있는 방법이다. 예를 들어 보면 아래와 같다. 

regex=r'^~redirect/$',

위 정규식의 의미는 redirect라고 작성된 텍스트만 매칭한다.


장고 url시스템의 작동 원리

여기서 잠시 장고 url시스템의 작동 원리에 대해 알아보겠다.

1.  url입력 창에 images/ 라고 입력한다.

2. 장고는 이를 regular expression과 비교한다.

3. 매칭되는지를 검토한다.

4. 매칭되지 않는다면, 그 다음으로 이동 => 또 검토

5. 매칭된다면, 성공  (성공한다면, 그 아래는 더 이상 url 매칭을 시도하지 않는다. 이미 성공했으니까)


이렇게 url과 regular expression이 매칭되면, view를 실행할 것이다.

images -> urls.py

from django.urls import path
from . import views

app_name = "images"
urlpatterns = [

path(
"all/",
view=views.ListAllImages.as_view(),
name="all_images"
),

path(
"comments/",
view=views.ListAllComments.as_view(),
name="all_images"
),

path(
"likes/",
view=views.ListAllLikes.as_view(),
name="all_images"
),
]


images -> views.py

from rest_framework.views import APIView
from rest_framework.response import Response
from . import models, serializers

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)

class ListAllComments(APIView):

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

all_comments=models.Comment.objects.all()
serializer = serializers.CommentSerializer(all_comments, many=True)

return Response(data=serializer.data)

class ListAllLikes(APIView):

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

all_likes = models.Like.objects.all()
serializer = serializers.LikeSerializer(all_likes, many=True)

return Response(data=serializer.data)

먼저 urls.py파일을 봐 보자. urlpatterns 안에 path함수가 존재하는데 장고 1.x에서는 url을 사용하고, 2.x에서는 path를 사용한다. 첫 번째 path와 같이 "all/"이라고 첫 인자에 넣어주면 all과 매칭될 경우 views파일에 ListAllImages로 찾아가 view를 실행시킨다. 


그리고 여기서 추가작업을 해 줘야 하는데, config밑에 urls.py에 images.urls을 찾을 수 있도록 경로를 추가해 줘야 한다.


config -> urls.py

urlpatterns = [
path("", TemplateView.as_view(template_name="pages/home.html"), name="home"),
path(
"about/",
TemplateView.as_view(template_name="pages/about.html"),
name="about",
),
# Django Admin, use {% url 'admin:index' %}
path(settings.ADMIN_URL, admin.site.urls),
# User management
path(
"users/",
include("jwgram.users.urls", namespace="users"),
),
path(
"images/",
include("jwgram.images.urls", namespace="images"),),

path("accounts/", include("allauth.urls")),
# Your stuff: custom urls includes go here
] + static(
settings.MEDIA_URL, document_root=settings.MEDIA_ROOT


이제 위 코드를 저장한 후 어드민 패널을 새로고침해 보자.



위와 같은 화면이 나오려면 http://127.0.0.1:8000/images/likes/ 로 들어가면 된다.


GET을 눌러보면 장고에서는 css를 하지 않았어도 우리의 api를 브라우징 할 수 있는 것을 알 수 있다. 


method도 바꿀 수 있다. 하지만 veiws.py에 get함수만 추가해 뒀기 때문에 get만 가능하다.


그리고 위 화면을 보면 DB에 있는 이미지를 json 자바스크립트 오브젝트로 변환 시키고있다.


그리고 추가적인 노력없이 브라우징 가능한 api도 얻었다. 덕분에 실제로 어떻게 보이는 지 살펴볼 수 있다. ios, android가 얻게 될 json이 어떻게 보이는지도 확인할 수 있다.







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

로그인/로그아웃/회원가입 기능 구현  (0) 2019.01.07
JWT(Json Web Token)  (0) 2019.01.07
The Request Object in Django  (0) 2018.12.25
Hidden Model Fields in Django  (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
글 보관함