[Django] 2
HTML <form>
form은 웹에서 사용자 정보를 입력하는 여러 방식(text, button, submit)을 제공하고, 사용자로부터 받은 데이터를 서버로 전송하는 역할을 담당한다.
데이터를 어디로? 어떠한 방식으로 보낼까?
HTML form 속성
1. action
- 입력 데이터가 전송될 URL을 지정
- 설정하지 않으면 데이터는 form의 URL로 보내진다.
2. method
- 데이터를 어떻게 보낼 것인지를 정의
- HTML form 데이터는 GET이나 POST 방식 둘 중 하나로 전송 가능!
HTML <input> element
사용자로부터 데이터를 입력 받기 위해 사용한다. 기본값이 text.
HTML input 속성
- name
form을 통해 데이터를 제출했을 때 name 속성에 설정된 값을 서버로 전송하고, 서버는 name 속성에 설정된 값을 통해 사용자가 입력한 데이터 값에 접근 가능. 서버에 전달하는 파라미터로 매핑
HTML request method - GET
데이터를 가져올 때만 사용한다. 수정하거나 그럴 땐 안 쓴 다 고 기 억 해
Model
일반적으로 하나의 모델 클래스는 DB 테이블 1개를 의미한다. 모델을 통해 테이블의 스키마를 정의하게 되고 데이터를 관리하게 된다.
각 모델은 models 모듈의 Model 클래스를 상속받아 구성된다.
class Article(models.Model):로 클래스 정의
models.py에 변경사항이 발견되면 makemigrations 후 migrate를 해서 model과 DB를 동기화를 해야 한다.
ORM
객체 지향 언어를 사용해서 Django<>DB 데이터를 변환하는 프로그래밍 기술.
python manage.py shell_plus로 DB 조작 가능
Object manager - CRUD (밑에 기재한 것들은 shell_plus에서 한다.)
CREATE
데이터 객체를 만드는 3가지 방법
방법 1
- article = Article()
- 클래스를 통한 인스턴스 생성
- article.title
- 클래스 변수명과 같은 이름의 인스턴스 변수를 생성 후 값 할당
- Article.save()
방법 2 - 인스턴스 생성 시 초기 값 함께 작성하여 생성
article = Article(title=’first’, content=’django’)
방법 3 - create() 메서드 사용
Article.objects.create(title=’third’,content=’django’)
READ
all()
- 전체 데이터를 QuerySet 형태로 return한다.
get()
- 단일 데이터를 조회한다. pk와 같이 고유성을 보장하는 조회에서 사용해야 한다.
filter()
- 지정된 조회 매개변수와 일치하는 객체를 포함하는 새 QuerySet를 반환한다.
UPDATE
- 수정하고자 하는 article 객체 조회 후 반환 값 저장
- article 인스턴스 객체의 변수 값을 새 값으로 할당
- 객체.save()
DELETE
- 삭제하고자 하는 article 객체 조회 후 반환값 저장
- 객체.delete()
Django 유저모델 커스터마이징시 발생하는 에러
ERRORS:
accounts.User.groups: (fields.E304) Reverse accessor for 'accounts.User.groups' clashes with reverse accessor for 'auth.User.groups'.
HINT: Add or change a related_name argument to the definition for 'accounts.User.groups' or 'auth.User.groups'.
accounts.User.user_permissions: (fields.E304) Reverse accessor for 'accounts.User.user_permissions' clashes with reverse accessor for 'auth.User.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'accounts.User.user_permissions' or 'auth.User.user_permissions'.
auth.User.groups: (fields.E304) Reverse accessor for 'auth.User.groups' clashes with reverse accessor for 'accounts.User.groups'.
HINT: Add or change a related_name argument to the definition for 'auth.User.groups' or 'accounts.User.groups'.
auth.User.user_permissions: (fields.E304) Reverse accessor for 'auth.User.user_permissions' clashes with reverse accessor for 'accounts.User.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'auth.User.user_permissions' or 'accounts.User.user_permissions'.
이 오류를 정말 자주 겪었다. 처음에는 view 파일에서 함수를 잘못 지정해주어 생기는 일이라고 생각했으나 생각보다 간단한 문제였다.
settings.py에 아래와 같은 코드를 써주면 되던 것! 분명히 수업 내용 들었(X) 들렸(O)었는데,,, AbstractUser를 상속받은 User 모델을 새로 만들었으므로, 이 모델을 유저모델로 사용하기 위해 settings.py에도 추가적으로 설정이 필요했고, 설정하지 않아서 생기던 오류. 그냥 settings.py에 아래 코드를 넣어주면 된다.
AUTH_USER_MODEL = 'accounts.User'
오류 하나하나 잡다 보니 수업을 잘 듣지 못해 놓치는 부분이 많다... 장고 수업은 다 끝났지만 플젝 위해서라도 열심히 해둬야지🙃
DB 초기화 과정에서 발생하는 오류

간단한 오류이다. no such table에서 볼 수 있듯 DB가 잘 넘어오지 않아 생기는 오류이다. 도중에 DB를 만진 후 migrate를 해주어야 하는데, DB 초기화를 확실히 하지 않아 생기는 문제. DB 초기화를 할 때는 pycache 폴더를 지우고 + migrations 폴더에 있는 숫자가 들어간 파일을 지운 후 DB를 지워주면 된다.