class AllergyDrinkView(View):
def get(self, request):
allergies = Allergy_drink.objects.all()
result = []
for allergy in allergies:
my_dict={
'allergy_drink' : allergy.allergy_drink.id,
'drink' : allergy.drink.id
}
# name으로 바꾸면 알러지와 음료 이름이 매칭 된다.
result.append(my_dict)
return JsonResponse({'result' : result}, status = 200)
내 생각 : 근데 클라이언트에게 굳이 id값을 풀어서 줘야할까?라는 생각도 들었다. 왜냐면 클라이언트는 음료와 알러지의 상관관계가 알고 싶은 것이지(어떤 알러지가 있니?) 그 아이디값이 뭐인지는 중요하지 않을 것 같기 때문이다.
def post(self, request):
data = json.loads(request.body)
name = Allergy.objects.get(name=data['allergy_drink'])
#가져오려는 클래스가 Allergy였으므로 name이 맞고 데이터 상에는 'allery_drink'니까
drink = Drink.objects.get(korean_name=data['drink'])
allergy_drink = Allergy_drink.objects.create(
allergy_drink = name,
drink = drink
# 실제 httpie에서 받는 값(실제 쿼리가 변화되는 과정이므로)
# (추측) id값으로 하면 어떨까? ; 쿼리에러남
#products.models.Allergy.DoesNotExist: Allergy matching query does not exist.
) # 생각해보니 클라이언트는 아이디값을 알 리가 없다.
return JsonResponse({"MESSAGE" : "SUCCESS"}, status=201)
내 생각 : 클라이언트 입장에서 쿼리셋 안에 아이디 값을 알리가 없다. 그런데 요청을 아이디값으로 해서 POST를 한다? 이건 말이 안 된다. 그러므로 name, drink로 하는 것이 맞다.
당시 에러 : http: error: argument REQUEST_ITEM: 'image_url' is not a valid value
(참고 블로그)
나는 이번에 비밀파일패턴을 이용해서 했다.
1. 먼저 시크릿 키를 프로젝트 디렉토리 내 secrets.json이라는 파일을 만들어 거기에 잘라넣기를 해준다.
{
"SECRET_KEY" : "본인의 키"
}
이 때 무조건 쌍따옴표를 써야 한다. 안 그러면 저장이 안 된다.
만들어진 파일은 깃허브에 저장되지 않도록 .gitignore 문서에 추가한다. 이는 뒤에서 다시 다뤄본다.
settings.py를 수정한다.
from pathlib import Path
import os, json
from django.core.exceptions import ImproperlyConfigured
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# 경로 에러 났던 것 해결한 코드.
secret_file = os.path.join(BASE_DIR, 'secrets.json') # secrets.json 파일 위치를 명시
with open(secret_file) as f:
secrets = json.loads(f.read())
def get_secret(setting, secrets=secrets):
"""비밀 변수를 가져오거나 명시적 예외를 반환한다."""
try:
return secrets[setting]
except KeyError:
error_msg = "Set the {} environment variable".format(setting)
raise ImproperlyConfigured(error_msg)
SECRET_KEY = get_secret("SECRET_KEY")
시크릿 키 외에도 데이터베이스 내용은 mysql 비밀번호 등 굉장히 중요한 내용들이 많아 깃허브에 그대로 업로드 될 시 경고 메일을 받을 수도 있다. 따라서 이 내용도 따로 보안을 위해 분리해놓는 것이 좋다.
from . import my_settings
DATABASES = my_settings.DATABASES
# 상대경로 이용
왜 상대경로 이용?? : 상대경로로 바로 그 자리에서 my_settings.py를 불러오기 위한 것이다.
python, pycharm, vscode, vim, macOS, Linux, zsh
키워드를 잘 선택하여 만들기를 누르면 흰 화면에 여러 글자가 인쇄된 장면이 나온다.
이 텍스트들을 모두 복사하고 커맨드 화면으로 들어간다.
프로젝트 폴더로 디렉토리를 이동한 후 .gitignore을 생성 후 vim으로 들어간다. 이후 복사한 내용을 붙여 넣고 아래 자리에 올라가선 안 될 위의 두 파일의 이름을 넣는다.
이후 깃에서 깃허브로 push하면 끝난다.
사실 settings.py 내용을 위의 두 가지 모두 한꺼번에도 처리 가능하다. 이번에 나눠서 확인해본 것은 처음 실습이었고 여러 방법이 있다는 것을 알기 위함이니 다음에는 한꺼번에 다시 도전해봐야겠다.
도전 결과 : 데이터베이스와 키값은 따로 저장하는게 맞다. 둘 다 하니까 가디언스 메일이 왔다.