0306 TIL

looggi·2023년 3월 6일
0

TILs

목록 보기
27/114
post-thumbnail

django

  1. Django에서 테이블을 설계하고 데이터베이스에 반영하는 방법에 대해서 설명하시오
    장고는 ORM을 통해서 각 앱의 models.py 파일에 모델 클래스와 그 속성에 대해서 정의해주고(필드, 필드타입, 관계) makemigrations 명령어로 데이터베이스에 반영할 부분을 파일로 만들어준 후 migrate 명령어로 실제 데이터베이스에 반영해줍니다.

  2. Django를 통해 CRUD를 구현하는 방법에 대해서 HTTP Method와 함께 설명하시오
    장고에서 요청을 처리하는 부분은 views.py 파일입니다. 각각의 클래스 안에 정의된 함수들은 http method명과 동일한 이름을 가지고 실제 해당 http method 요청이 들어올 때 수행됩니다. HTTP Method에는 GET, POST, PUT, DELETE가 있는데 각각 CRUD에 대응되어 이에따라 데이터베이스에 반영됩니다

  3. FBV와 CBV는 각각 무엇이며, 어떤 차이가 있습니까?
    모두 뷰를 작성하는 방법으로 함수를 클래스로 구현하는지, 클래스로 구현하는지에 차이가 있습니다.
    FBV는 함수기반뷰를 뜻하고 url과 연결되는 함수에서 if문(조건)으로 요청한 http method에 따라서 로직을 구성합니다.
    CBV는 클래스기반뷰를 뜻하고 url과 연결되는 클래스 안에서 http method별로 함수를 구분하여 그 안에서 로직을 구성합니다. CBV는 클래스의 장점을 활용하여 장고의 다양한 뷰 모듈을 상속받아서 사용할 수 있어 코드를 더 간결하게 구성할 수 있고 확장 및 재사용이 쉽습니다.

CBV: urls.py에서 Class.as_view() 클래스 매서드를 이용해서 클래스가 view기능을 수행할 수 있도록 한다.

  1. 회원가입을 할 때 비밀번호를 암호화하여 저장하는 이유는 무엇입니까?
    비밀번호를 평문으로 저장하게 되면 개발자가 유저의 개인정보를 침해할 수 있습니다. 해싱을 한 후 저장해야 해킹을 당해도 2차 피해를 막을 수 있습니다.
    장고에서 유저를 만들 때 set_password를 사용해서 (SHA256 알고리즘으로)해싱합니다.

+더 보안 기능이 향상된 알고리즘으로 오버라이드? 해서 사용할 수 있는지 알아보기

hasher에 해싱에 사용할 알고리즘, 반복횟수, 솔트 엔트로피 등의 메타정보가 저장되어있어서 이 정보를 이용해 입력받은 비밀번호를 암호화 후 일치하는지 여부를 통해 로그인을 한다

  1. 회원탈퇴, 게시글 삭제와 같은 기능을 구현할 때 실제 레코드를 삭제합니까? 그렇지 않다면 그 이유는 무엇입니까?
    회원탈퇴 기능을 구현할 때는 실제 레코드를 삭제하진 않습니다. 대신 해당 유저의 기능을 정지(비활성화/삭제 flag)시킵니다. 삭제하지 않는 이유는 유저 테이블의 특성상 연관된 레코드가 많아서 예기치못한 오류가 발생할 수 있기 때문입니다.
    게시글 삭제의 경우 실제 레코드를 삭제했지만 다른 테이블과의 관계성이 많다면 유저와 동일하게 삭제하기보단 비활성화를 하는 것이 좋습니다.

정보를 일정기간 보관할 경우 삭제 요청시 처리시기를 명시해줘야함

파이썬

docstring

모듈, 함수, 클래스 또는 메소드 정의의 첫 번째 명령문으로 발생하는 문자열 리터럴
docstring은 해당 객체의 doc 특수 속성으로 변환됨

작성

Module 첫번째 줄, 함수 선언 후 내부 바로 아랫줄 또는 클래스 선언 후 내부 바로 아랫줄에 큰따옴표 3개나 작은 따옴표 3개로 작성

#docstring 예시
"""
클래스의 문서화 내용을 입력합니다.    
"""

# docstring 확인하는 방법
help(모듈명)
모듈명.__doc__

프로그래머스 문제 풀기

➡️ 옹알이(2)

def solution(babbling):
    answer = 0
    for i in babbling:
        for j in ['aya','ye','woo','ma']:
            if j*2 not in i:# 연속해서 같은 발음을 할 수는 없음
                i=i.replace(j,' ')
        if len(i.strip())==0:
            answer +=1
    return answer

replace할 때 ''가 아니라 ' '로 하는 이유는 단어 사이를 구분해주기 위해서이다

  • for문으로 리스트 안에 있는 요소들을 순서대로 체크하는 로직이므로 삭제되는 단어의 순서가 있기때문에 먼저 삭제되는 단어에 의해 양옆에 있던 단어가 붙어버리면 연속된 같은 발음이 되어 삭제할 수 없어진다
    ex. mayema -> mama

strip은 양옆의 공백을 모두 제거해준다

profile
looooggi

0개의 댓글