# 잘못된 예시
def index(request):
return "hello"
# HttpResponse가 아닌 문자열을 반환하여 오류가 발생
# 오류 발생 시점, 미들웨어
from django.conf import settings
from django.utils.deprecation import MiddlewareMixin
class XFrameOptionsMiddleware(MiddlewareMixin):
def process_response(self, request, response):
if response.get("X-Frame-Options") is not None:
return response
# response.get은 httpresponse type만 get함
# return값이 none인 경우도 동일
def index(request):
return none
def index(request):
if request.method == "POST"
return HttpResponse("ok") # return이 def가 아니라 if의 값으로 동일하게 반환값 none으로 처리 됨
/hottrack/?query=AKMU
query=AKMU는 querystring이며 이를 개별 key/value로 뽑아 query parameter가 됨.
HTTPGER 요청 패킷
get_object_or_404 : 데이터베이스 으로 지정된 레코드가 없을 때, 예외를 발생세킨다.
# gpt get_object_or_404 예시
from django.shortcuts import get_object_or_404
# shortcuts에는 redirect render get_object_or_404등이 있다.
from myapp.models import MyModel
def my_view(request, my_model_id):
# my_model_id에 해당하는 MyModel 객체를 가져오거나, 없으면 404 에러 발생
my_model = get_object_or_404(MyModel, pk=my_model_id)
# 나머지 뷰 로직...
# urls.py 설정
urlpatterns = [
path(route="", view=views.index),
path(route="<int:pk>/cover.png", view=views.cover_png),
]
# <int:pk>는 경로 변환기로, 정수를 일치시키고 이를 pk라는 변수로 뷰 함수로 전달
def export_csv(requset):
song_qs = Song.objects.all()
df = pd.DataFrame(data=song_qs.values())
# pd.DataFrame에서 쿼리셋을 즉시 pd.DataFrame으로 바꾸지 않음
# values()를 통해 qs 안 Dict를 pd.DataFrame에 전달 한다.
# 원하는 필드만 데이터프레임으로 넘기는 경우 아래 코드 참조
# pd.DataFrame(data=song_qs.values("name",,등등))
export_file = BytesIO()
# 파일 즉시 응답을 위한 BytesIO
# 메모리 상에서 바이트(byte) 데이터 다루기 위함, 생성한 export_file에서 데이터를 다루게 됨
# 디스크에 파일을 저장하지 않고 메모리로에 저장된 바이트 데이터를 다룸
df.to_csv(export_file, index=False, encoding="utf-8-sig")
response = HttpResponse(content=export_file.getvalue(), content_type="text/csv")
# export_file.getvalue() : export_file에 저장되 있던 데이터 가져오기
response["Content-Disposition"] = "attachment; filename=hattrack.csv"
# 다운로드 옵션, 전송할 파일 csv 이름 설정
return response