장고 Integrity Error, NOT NULL constraint failed
미음제
·2020. 11. 18. 21:43
깃허브 로그인 연동을 구현하던 중에
에러가 발생했다.
NOT NULL constraint failed: users_user.username
오류 내용은
user를 username 없이
생성하려고 해서 문제가 생기는 것이다.
오류가 발생한 부분은
profile_request = requests.get(
"https://api.github.com/user",
headers={
"Authorization": f"token {access_token}",
"Accept": "application/json",
},
)
profile_json = profile_request.json()
username = profile_json.get("login", None)
if username is not None:
name = profile_json.get("name")
email = profile_json.get("email")
bio = profile_json.get("bio")
이 부분이다.
NOT NULL constraint failed
오류는 간단히 해결할 수 있다.
models.py에서 오류가 발생한
해당 class에서
오류가 발생한 필드 값에
null = True를 추가하면 오류를 해결할 수 있다.
그러나,
깃허브 로그인 연동을 구현하며
오류를 해결하지 못한 이유는
username은 내가 선언한 변수가 아니었다.
username은
로그인 연동과정에서
사용자가 로그인을 시도하면
깃허브 주소로 redirect 시켜
깃허브 정보를 토대로
다시 내 서버로 redirect 시키며
반환시키는 값인 것이다.
문제를 해결하기 위해
깃허브 아이디를 다시 보니
아이디에 이름과 bio가 적혀있지 않은 상태면
None으로 나와 문제가 발생한 것이다.
if name is None:
name = username
if bio is None:
bio = ""
이처럼 코드를 수정해주면
깃허브에서 보내는 사용자 정보에서
이름과, bio가 없어도
계정을 생성할 수 있도록 해준다
위에 설명한
null = True와
코드를 수정하고 다시 실행해본 결과
또다시 오류가 발생했다.
name과 bio처럼 null = True를
해주어도 되지만
email 정보를 추후에 username으로 사용할 것이라
email이 None이면 안된다.
그래서 다시 깃허브로 돌아가
프로필에서 Settings로 들어가 준다.
그리고
emails로 들어가 보면,
keep my email addresses private가
체크가 되어있다면
email을 공개하지 않아
email 값을 반환하지 못한 것이다.
이 부분을 체크를 해제해주고,
다시 프로필 메인 화면으로 돌아와
Public email에 공개할 email을
선택해주면 된다.
깃허브 계정의 email 정보를 수정한 것처럼
username으로 반환되는 이름과
Bio를 설정해주면
코드를 수정하지 않고 해결할 수 있다.
'Developer > Django' 카테고리의 다른 글
Django Command 생성 방법 (0) | 2020.11.12 |
---|---|
[프로젝트 2일차] Django ORM에 대한 이해 (2) | 2020.11.06 |
Framework(프레임워크), Library(라이브러리)의 차이 (0) | 2020.11.05 |