inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

프로필 수정 구현과 장고3에서 추가된 TextChoices 활용

BadHeaderError at /accounts/signup/

해결된 질문

320

최다니엘

작성한 질문수 21

0

심지어는

스크린샷 2023-01-24 오전 11.16.25(2).png

이런 에러까지 뜨더라구요.

이것과 관련하여서는 장고 공식문서에 나온대로 예외처리를

class User(AbstractUser):
    website_url = models.URLField(blank = True)
    bio = models.TextField(blank = True)

    def send_welcome_email(self):
        subject = render_to_string('accounts/welcome_email_subject.txt', {
            'user': self
        })
        content = render_to_string('accounts/welcome_email_content.txt',{
            'user': self
        })

        # 여기서 settings는 django.conf라는 곳에서 임포트 해오는 것이고
        # 기초 settings.py의 이름이 변하더라도 거기서 가져오는 것 같다.
        # 문제 생길 시, 추측이 아닐 수 있으니 settings를 common으로 변경해주자.
        sender_email = settings.WELCOME_EMAIL_SENDER
        if subject and content and sender_email:
            try:
                # 여기서 self.email의 의미는 User마다 email로 가입이 될텐데, 그 주소가 수신주소가 되는것이다.
                send_mail(subject, content, sender_email, [self.email], fail_silently=False)
            except BadHeaderError:
                return HttpResponse('Invalid Header found.')
            return HttpResponseRedirect('/')
        else:
            # In reality we'd use a form class
            # to get proper validation errors.
            return HttpResponse('Make sure all fields are entered and valid.')

    # save할때마다 호출 -> which mean is User가 생성될때마다
    # 이런식의 로직 구현이 가능하다.
    def save(self, *args, **kwargs):
        is_created = (self.pk == None)
        super().save(*args, **kwargs)

        if is_created:
            pass

이렇게 중간에 try, except로 처리해주었는데, 이렇게 해도 진행에 지장은 없을까요?

애초에 이 에러가 왜 발생했는지도 이해가 잘갑니다.
에러메세지를 읽어봐도 두루뭉술하게 Header values can't newlines 라고 되어있으니, 뭐가 문제인지도 파악이 어렵구요 ㅠㅠ

react docker python django

답변 1

1

이진석

안녕하세요.

에러가 두리뭉실한 것이 아니라, 정확하게 오류내용을 알려주고 있습니다.

image

제목에 개행문자(newlines)가 포함되어있어서 발생시키는 오류이구요.
"\n"은 개행문자를 뜻합니다.

accounts/welcome_email_subject.txt 템플릿 파일에서 개행문자를 넣어주셨다봅니다.

BadHeaderError 예외처리를 굳이 하실 필요는 없어 보입니다.

accounts/welcome_email_subject.txt 템플릿 파일에서 개행문자가 포함되지 않도록 전처리하시는 방법도 있겠지만,
읽혀진 subject 문자열 값을 후처리토록 로직을 개선하는 방법도 좋습니다.

subject = subject.strip() # 좌우 white spaces들을 제거합니다.

혹은 아래와 같이 강제로 1줄 문자열로 변경하면서, 좌우 white spaces 및 연속된 white spaces들을 모두 제거토록 할 수도 있습니다.

subject = " ".join(subject.split())

다른 프레임워크도 마찬가지지만, 언어에 대한 기본이 아주 중요합니다.
파이썬 언어에 대한 학습도 꾸준히 이어가시면 좋습니다. 파이썬을 잘 하는 만큼 장고를 더 잘 이해하고, 더 잘할 수 있게 됩니다.
저도 지금도 파이썬 학습을 계속 하고 있습니다.

화이팅입니다. :-)

0

최다니엘

개행 문자는 따로 없었고, csrf 토큰 관련하여도 에러가 떠서,
해당 탬플릿 txt에 csrf_tokken을 탬플릿 태그로 심어놨었는데, 그것때문에 개행에러가 생긴것 같습니다! ㅠㅠ 우선은 csrf_tokken 지우고, 나머지 에러들도 바로잡고 다시 테스트 해보려구요!! 답변 감사합니다!!

안녕하세요.

0

51

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

275

1

useEffect 훅에서 else 유무에 따른 결과

0

211

1

useAxios 훅의 dependency array 설정

0

245

1

useEffect에서 변수 업데이트 관련 질문

0

382

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

268

1

bootstrap4

0

471

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

365

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

574

3

useState는 필수일까요?

0

263

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

600

4

Django allauth를 사용한 소셜 로그인 시 에러

0

655

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

556

2

useLocalStorage() 함수 사용여부

0

229

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

449

1

리듀서의 의미 재확인

0

430

1

simple-jwt Refresh Token 사용 노하우

0

899

2

docker compose 를 통한 배포 관련 오류 문의

0

673

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

365

1

is_like_user

0

233

1

related_name 오류

0

275

1

re_path 오류

0

259

1

re_path url

0

251

1

No post matches the given query

0

661

2