C.R.U.D #2 Wrap-Up (What I learned)

jhwang·2022년 5월 11일
0

Django Basics

목록 보기
7/14
post-thumbnail

1.. PIP installed

  • Httpie

    • $ pip install httpie
    • http 통신으로 서버와 연결하여 작업이 가능하게 해주는 도구
    • $ http -v POST 127.0.0.1:8000/owners name='홍길동' email='abc123@naver.com' age=25
    • $ http -v GET 127.0.0.1:8000/owners
  • ipython

    • $ pip install ipython
    • shell을 보기 편하게 만들어줌
  • Django-extensions

    • $ pip install django-extensions
    • shell_plus 사용 가능하게 해줌($ python manage.py shell_plus로 실행)

2.. models.py 관련 정보

  • ForeignKey("class(1)", on_delete=models.CASCADE)

    class name(models.Model):
    		objects = models.ForeignKey('self', on_delete=models.CASCADE)
    		# class ForeignKey(to, on_delete, **options)
    		# 위에서 class(1)에 알맞은 class 이름이 들어가야함)
  • ManyToManyField("class(1)", through="class(2)", related_name="")

    class Actor(models.Model):
    		 movies = models.ManyToManyField("Movie", through="ActorMovie", related_name="actors")
    		 # class(1)에는 할당되는 class 명, thorugh="class(2)"에는 중간테이블(FK를 지닌)의 Class 명을 할당
    		 # related_name을 사용하면 역참조 대신 attribute를 할당할 수 있다.
    		 # 가독성 및 정확한 코드 판별을 위해서 's'를 붙여 'movies'와 같이 할당해줘야한다. (이것이 국룰!!)

3.. views.py 관련 정보

  • from...import...

    import json
    # python built-in module
    # client로부터 받은 Json Data를 python Dictionary 형태로 변환 
    
    from django.views import View
    # 외부 module
    # client 요청을 처리하게되는 view를 작성하려면 Django에서 기본으로 제공해주는 View component 사용
    
    from django.http import JsonResponse
    # 외부 module
    # 다시 응답을 보내줄때 사용할 모듈
    
    from owners.models import Owner, Dog
    # 사용자 정의 module
  • List Comprehension, 2nd List Comprehension (중요!!!!!!!!!!!!!!!)

    ******<<< 2중 For문 사용 >>>******  
    
    def get(self, request):
    		owners = Owner.objects.all()
    		results = []
    
          for owner in owners:
    			dogs_lists = []
    
    			for dog in owner.dog_set.all():
    				dog_list.append({
    					"id" : dog.id,
    					"name" : dog.name,
    					"age" : dog.age
    				})
    
              results.append(
                  {
                      'name' : owner.name,
                      'age'  : owner.age,
                      'email': owner.email,
                      'dogs' : dogs_list,
                  }
              )
    
    
    
    ******<<< List Comprehension >>>*****
    
    "List Comprehension"을 사용하여 for문 대신 사용하여 list를 하나 줄임
    def get(self, request):
        results = []
        owners  = Owner.objects.all()
        for owner in owners: 
            results.append(
                {
                    'name' : owner.name,
                    'age'  : owner.age,
                    'email': owner.email,
                    'dogs' : [{
                        'name': dog.name,
                        'age' : dog.age,
                    } for dog in owner.dog_set.all()]
                }
            )
    
    
    
    ******<<< 2nd List Comprehension >>>******
    
    def get(self, request):  
        results = [
            {
                    'name' : owner.name,
                    'age'  : owner.age,
                    'email': owner.email,
                    'dogs' : [{
                        'name': dog.name,
                        'age' : dog.age,
                    } for dog in owner.dog_set.all()]             
            } for owner in Owner.objects.all()
        ]

4.. urls.py 관련 정보

  • 최상위(project) urls.py 파일에 app 경로 추가

    • setting.py 파일이 있는 폴더 안에 urls.py를 찾으면 편하다.
    from django.urls import path, include
    
      urlpatterns = [
          # owners
          path('', include('owners.urls'))
      ]
  • App 안에 urls.py 생성

    • $ touch urls.py 명령어로 생성
  • App의 urls.py 파일에 view class 경로 추가

    
    from django.urls import path
    from owners.views import OwnersView, DogsView
    
    
    urlpatterns = [
        path('owners', OwnersView.as_view()),
        path('dogs', DogsView.as_view())
    ]
profile
"Your goals, Minus your doubts, Equal your reality"

0개의 댓글