[C.R.U.D.] Django Post, Get

제갈창민·2021년 11월 17일
0

learningbook

목록 보기
20/32
post-custom-banner

Django setting brief Summary

가상환경 생성
DB(Mysql) 생성
Django 및 mysqlclient install
새 프로젝트 생성
my_settings.py 생성
settings.py 에서 기초 세팅 진행
(주석처리, IP허용, my_settings.py 연동)
(SECRET_KEY, DATABASE 는 copy & paste to my_settings.py>이후 default 값 수정)
urls.py = [from django.urls import path] 내용 삭제
django-cors-headers 설치
settings.py > INSTALLD_APPS, MIDDLEWARE 및 CORS 추가
서버 시험 실행

 ** git & github **

프로젝트용 repository 생성(SSH Clone Copy)
git 초기화, .gitignore 폴더 생성
아래 사이트를 이용하여 필요한 code 복사
.gitignore 파일 생성 후 paste(최하단에 my_settings.py 추가)
add > commit -m 추가
Branch 생성 & 이동
프로젝트용 App 생성 후 settings.py에 추가
add > commit -m 재추가
git push origin "브랜치 명"

모델링 -> models.py 공사 -> migration products & migrate 를 거쳐, 
mysql -u root -p 로 Mysql에 진입한 뒤, DB 확인
zsh도 실행해서 본격 data 입력 진행


-------여기까지가 기본 세팅--------

객체 관계성 매핑(ORM)?

  • Object Relational Mapping(ORM): Object(객체)는 OOP에서 사용되는 객체 그 자체를 의미하고,
    Relational(관계)는 흔히 사용하는 관계형 DB를 의미함
  • 즉, 객체와 관계형DB를 매핑해주는 개념
  • 예를 들어, Django(Python)에서 작성한 코드를 관계형 DB의 SQL 쿼리로 자동 변환 시켜서
    개발자가 따로 SQL쿼리를 작성할 필요 없이 파이썬 코드 작성만으로 DB를 조작할 수 있게 해 주는 것

HTTP(Post 와 Get)

POST

"post를 이용해서 Owners and Doggies info 입력하기;

import json
from django.http    import JsonResponse
from django.views   import View
from owners.models  import Owner, Dog

class OwnersView(View):
    def post(self, request):
        data    = json.loads(request.body)
        Owner.objects.create(
            name    = data['name'],
            email   = data['email'],
            age     = data['age']
        )
        return JsonResponse({'MESSAGE':'WELUVDOGGY!'}, status=201)

class DogsView(View):
    def post(self, request):
        data    = json.loads(request.body)
        Dog.objects.create(
            owner   = Owner.objects.get(name=data['owner']),
            name    = data['name'],
            age     = data['age']
        )
         return JsonResponse({'MESSAGE':'Mung Mung!'}, status=201)

GET

     def get(self, request):
         owners    = Owner.objects.all()
         results = []
         for owner in owners:
             results.append(
                 {
                     "owner_name"       : owner.name,
                     "owner_email"      : owner.email,
                     "owner_age"        : owner.age         
                 }
         )
         return JsonResponse({'results':results}, status=200)
------------------------------------------------------------------------------
"위쪽은 주인의 info만 출력하는 코드" "아래쪽은 주인의 info에 강아지 list 추가(Forign Key)"
------------------------------------------------------------------------------
    def get(self, request):
        owners    = Owner.objects.all()
        results   = []
        for owner in owners:
            dogs  = [
            {"DogName": dog.name} for dog in Dog.objects.filter(owner_id = owner.id)
            	    ]
            results.append(
                {
                    "owner_name"       : owner.name,
                    "owner_age"        : owner.age,
                    "dog_list"         : dogs
                }
        )
        return JsonResponse({'results':results}, status=200)
-------------------------------------------------------------------------------
"아래쪽은 강아지의 info 만 출력하는 코드"
-------------------------------------------------------------------------------
    def get(self, request):
        dogs    = Dog.objects.all()
        results = []
        for dog in dogs:
            results.append(
                {
                    "owner"         : dog.owner.name,
                    "dog_name"      : dog.name,         
                    "dog_age"       : dog.age
                }
        )
        return JsonResponse({'results':results}, status=200)

별첨 : Django 속 여러가지 요소(혹은 단어)들의 역할(의미) 모음

-> url.py : Client 가 보낸 요청을 가장 처음 받는 곳
-> manage.py 가 있는 위치의 urls.py가 먼저 요청을 받는다.
-> urlpatterns = [path()] -> 내부 폴더의 urls.py 를 수정하면 shell에서도 똑같이 수정해야 한다.
-> "on_delete=models.CASCADE" -> 무로있는 해당 객체가 삭제되면 같이 삭제되게 하는 코드
*json 결과값은 가끔 순서가 뒤섞여서 출력되기도 한다.
-> post : Create -> body 에 해당하는 내용을 담고 있다.
-> get :
-> 정참조와 역참조 간의 파이썬 코드내용은 다르다

profile
자기계발 중인 신입 개발자
post-custom-banner

0개의 댓글