220215 TIL

TIL DAY 176

오늘 배운 일

✔️ Django 웹 개발

1. 유효성 검증을 뒤늦게 추가했다면?

웹 사이트에 필요한 모델을 만들 때 처음부터 완벽하게 만들었다면 좋겠지만 개발을 하다 보면 뒤늦게 유효성을 추가하거나 검증해야 하는 경우들이 생긴다.

앞에서 배운 내용대로 유효성 검사를 할 수 있지만 문제는 기존에 저장되어 있던 데이터를 다시 유효성 작업에 맞추는 일이다.

이러한 작업은 실제 개발 상황에서 빈번하게 일어나곤 하는데 이 때 중요한 것은 기존 데이터의 유실을 최소화하면서 유효성을 맞추는 것이다.

이번에는 간단한 예시를 가지고 이러한 문제를 해결하는 과정을 배워보도록 하겠다.

http://127.0.0.1:8000/posts/

우리가 작성한 포스트 웹 사이트이다.

그리고 랜덤한 포스트 하나를 보자면...

이 글을 보면 수정일이 작성일보다 더 과거에 만들어졌다고 표시되어 있다.

그러니까 글이 만들어진건 2020년인데 수정을 2000년에 했다고 되어 있습니다.

우리는 알아야할 것은 수정일은 작성일보다 나중에 되어야 하는데 지금 작성한 글을 과거에서 수정할 수 없기 때문이다.

이것은 우리가 django-seed 를 이용해서 아무 데이터나 생성을 하면서 발생한 오류이다.

한 번 이러한 부분들도 해결해보겠다.

먼저, 유효성 검증을 하는 부분에 &에 대한 검증을 추가해 주도록 하겠다.

우리 프로젝트로 돌아가서 validators.py 로 가서...

validators.py

유효성을 검증하는 부분에 or 넣어주고 & 기호가 들어가면 안 된다는 로직을 추가해 주도록 해준다.

그리고 밑에 있는 문구도 약간 수정해준다.

그러면 이제 개발 서버를 실행해서 한번 확인해준다.

http://127.0.0.1:8000/posts/

글쓰기를 누른다음에...

그리고 다음과 같이 작성해준다.

똑같이 작성하고 작성완료를 누르면...

그러면 이렇게 아래쪽에 에러 메시지가 잘 출력되는 것을 볼 수 있다.

새로 추가한 유효성 검증이 잘 수행되고 있는데 하지만 기존의 데이터들은 이미 데이터베이스에 저장이 되어있는 상태이기 때문에 이러한 유효성 검증을 수행하지 않았다.

기존 데이터들도 새로 추가된 유효성에 맞게 수정해 보겠다.

다시 VSCode 로 가서 파일 하나를 생성해준다.

posts 앱 안에 새로운 파일을 만들고 이름으로 validate_data.py 라고 지어준다.

이제 여기에 기존에 데이터를 새로 추가된 유효성에 맞춰주는 로직을 작성해보도록 하겠다.

우리가 할 작업들...

  1. 모든 포스트 데이터 가져오기
  2. 각각의 포스트 데이터를 보면서 내용 안에 &가 있는지 체크하기
  3. 만약 '&'가 있다면 해당 '&'를 삭제 처리해주기
  4. 데이터를 저장하기

먼저 모든 포스트의 데이터를 가져와본다.

validate_data.py

다음에 이제 for 문을 이용해서 각각의 포스트를 반복해서 지금 가지고 있는 content 내용을 가져온 다음에 이제 &가 content 안에 있다면 콘솔에서 확인할 수 있도록 메시지를 하나 넣어주겠다.

for post in posts: 이렇게 해서 모든 게시글을 돌면서 if 문을 넣어준다.

만약에 & 기호가 content 에 있는지 확인해준다.

그리고 다음과 같이 코드를 작성해준다.

만약에 & 기호가 있다면 해당 '&'를 삭제해준다.

그리하 post.content 라는 변수에 replace 메서드를 사용해서 없애준다.

다음엔 데이터를 저장해야 하니까 post.save( ) 를 해준다.

그리가 전에 말했던 시간 정보도 처리해보겠다.

다시 if 문을 사용해서 코드를 완료해준다.

코드를 보면 만약에 생성일 이전에 수정일이라면 그러니까 생성일이 수정일이 이전이라면 이것은 말이 안되는 코드이다.

print 문과 save 를 해서 완성시켜준다.

이 코드를 들여 쓰기를 해주고 함수에 넣어준다.

이제 이 함수를 실행해주면 되는데 지금 코드를 보면 모델이나 ORM 등 django 의 기능을 이용해서 코드를 구현했다.

그러하기 때문에 이 함수를 직접 실행할려면 django 의 기능을 사용할 수 있는 환경이 닫혀진 곳에서 실행해야 한다.

가장 간단하게 사용할 수 있는 방법은 django 의 쉘을 사용하는 건데 한 번 확인해보자!

새로운 터미널을 켜서 다음과 같은 커맨드를 입력해준다.

python3 manage.py shell

그리고 직접 작성한 함수를 가져와본다.

from posts.validate_data import validate_post

그리고 밑에 있는 커맨드도 입력해주면...

validate_post()

이렇게 각각의 포스트를 돌며 데이터를 수정하게 된다.

그러면 개발 서버를 켜서 확인을 해준다.

먼저 쉘에서 나가고...

exit()

실행하고 아까전에 확인한 포스트를 다시 들어가보면...

수정일이 모두 현재 날짜로 들어가 있다는 것을 알 수 있다.

끝으로 :

  • 오늘 django 에서는 유효성 검증을 뒤늦게 추가했을 때 기존의 데이터들을 처리하는 방법에 대해 알아보았다.
  • 아직까지는 데이터가 많지 않아서 페이지가 길지는 않은데 다음에는 이러한 문제점을 해결해보도록 하겠다.

좋은 웹페이지 즐겨찾기