진짜 개발자
본문 바로가기

FrameWork/Django

Django - 회원가입 전송 Form 만들기

728x90

1. 구성

1. join.html - 회원가입 HTML

    

    웹상에서는 다음과 같이 보여진다


2. success.html - 회원가입 성공시 이동할 html 



2. 설정

1. Model 설정

1) WebUser 객체 생성

- models.py 안에 models.Model을 상속받는 클래스를 생성한다

- 레코드들을 구분하는 ID는 'id'라는 필드명으로 자동 생성된다

- 해당클래스 안에 테이블에 대응하는 필드들을 추가한다


2) migrations 파일 만들기

- python manage.py makemigrations "앱이름"


3) migrate 명령어로 데이터베이스 최신화 하기

- python manage.py migrate

2. urls.py 설정

- 사용자가 url을 요청할시 실행할 메소드들을 지정한다

1) /join/ 에 해당하는 url을 요청할시 views.join 메소드를 호출하도록 한다

2) /dojoin/ 에 해당하는 url을 요청할시 views.dojoin 메소드를 호출하도록 한다


3. viesw.py 설정

- 사용자가 특정 url을 요청할시에 호출될 메소드들을 정의한다

1) join메소드를 호출할 시 introduce/join.html 을 반환하도록 한다 


2) dojoin메소드를 호출할 시 데이터베이스에 새로운 유저를 추가한 뒤

introduce/success.html을 반환하도록 한다

A) FORM값 참조

- 사용자가 form을 통해 보내는 데이터는 request객체의 POST 리스트안에 담겨있다

- form 태그 안의 input 태그들의 name(변수명)으로 POST리스트안의 값을 가져올 수 있다


B) DB에 저장

- 위에서 생성한 모델클래스의 객체를 생성하며 매개변수로 DB의 필드값을 지정하여 넘겨줄 수 있다

- WebUser(user_id=id, user_pw=pw) 과 같이 직접 필드를 지정하지 않는다면 모델객체의 필드 순서대로 

  자동으로 대입된다 때문에 WebUser(id,pw)과 같이 객체 생성을 하고싶다면 앞에 레코드를 구분하는

  id값도 넣어주어 다음과 같이 생성해야 한다 => web_user = WebUser(1,id,pw)

- 생성된 객체.save() 메소드를 호출하여 데이터베이스에 새로운 레코드를 추가할 수 있다.


3. 확인

1. Django 서버 실행

- python manage.py runserver


2. join 페이지 접속후 회원가입 요청을 한다

- http://127.0.0.1:8000/introduce/join


3. CSRF 토큰을 찾을 수 없다고 한다

- 사용자의 토큰을 통해 CSRF 웹 보안 공격을 막기위해 장고에서 제공하는 기능이다

CSRF - http://galid1.tistory.com/286

  - 간단히 말해 사용자의 요청을 위조하는 것을 말한다 이를 사용자의 토큰을 통해서 막을 수 있다




4. CSRF토큰 입력

- form 태그 안쪽에 다음의 코드를 추가한다 {% csrf_token %}



5. 확인

1. CSRF 토큰 에러는 뜨지 않지만 페이지가 이동되지 않는다

=> 요청한 url을 자세히 보면 join의 하위의 dojoin이 호출된것을 볼 수 있다.


6. Form 요청 url 설정

1. 사용자가 요청하게될 url을 지정하는 form태그 안의 action을 /introduce/dojoin 으로 변경한다


2. 다시 확인하면 url의 마지막에 '/' 가 붙지 않았다고 나타난다


3. 요청할 url의 마지막에 '/'을 붙힌다


4. 성공적으로 요청되었다


7. Admin 페이지를 통해 데이터베이스 값 확인하기

1. superuser 생성

- python manage.py createsuperuser

1) id 입력

2) 암호 입력

3) 암호 재입력

4) 이메일 입력


2. Admin 페이지에 생성한 모델 추가하기

1) admin.py에 models.py의 모든 내용을 import한다

- from .models import *


2) admin site에 WebUser 모델을 등록한다

- admin.site.register(WebUser)


3. http://url/admin 페이지로 이동하여 확인

1) Web users 라는 Table이 생긴것을 볼 수 있다

2) WebUser object가 새로 생긴것을 볼 수 있다.