프로젝트 구조 만들기
어떤 프로젝트를 만들고, 어떤 기능을 구현할지!
앱 만들기(user, tweet)
데이터베이스 연결하기
장고 실행 후 데이터베이스 연결하기
사용자 모델(user 앱 작업) 만들고 데이터베이스에 넣기
관리자 계정 만들기
관리자 계정 만들기
관리자 계정에 모델 등록하기
Tweet 모델 만들기
Tweet 모델 만들기
데이터베이스에 넣기
관리자계정에 모델 넣기
사용자 관리와 로그인
템플릿 만들기
url, view, tempalte 연결해주기
회원가입 기능 만들기
user앱의 views.py에 post 조건문 추가하기
연결된 html파일의 form 태그 수정하기
user앱의 views.py에서 전송되는 데이터 받아서 저장하기
로그인 기능 만들기
user앱의 views.py에 로그인 처리 함수를 입력하고 usrl과 이어주기
연결된 html파일의 form 태그 속성 수정
user앱의 views.py에 로그인 기능 추가
내가 주로 작업하는 파일은 urls, views 2가지
url: 사용자가 어떤 주소로 접근할 수 있게 정해주는 공간-> urls.py에서 작업
view: url에서 어떤 역할을 할건지 어떤 기능을 수행할 건지 만들어주는 공간-> views.py에서 작업
여기에서 우리가 만들 프로젝트는 'sns' 이기 때문에 아래의 기능들 정도를 만들 예정이다.
- 사용자 관리 (회원가입 / 로그인 / 로그아웃)
- 글쓰기
- 친구만들기
<앱 생성하는 명령어>
django-admin startapp 앱이름
터미널에 위의 코드를 입력하여 앱을 생성한다!
user앱 - 사용자 관리 ( 회원가입/로그인/로그아웃)을 담당
tweet앱 - 글 관리( 글쓰기, 삭제, 수정, 댓글)을 담당
제일 먼저 생성한 폴더의 settings.py의 INSTALLED_APPS에 '앱이름'으로 추가하기
이미 장고에서 기본적으로 제공하는 것이 있지만 직접 만들어 보자면, 아래의 코드는 user의 models.py에 붙여넣어보자.
user model에 이름, 비밀번호, 상태메세지, 생성일이 넣어졌다.
위의 모델 클래스에서 class Meta
는 이 모델의 정보를 담는 역할을 하는데, 여기에서는 테이블 이름만 정해져있다.(db에 정보를 넣어주는 역할)
그리고 django에서 제공하는 models를 import하여 각 요소에 어떤 데이터의 형식이 들어갈 지 정해주고, 각 필드에 제한을 두었다.
<django 모델 필드의 종류>
모델필드란, 어떤 정보가 들어갈 건지 설정해주는 요소이다.
문자열 : CharField, TextField
날짜/시간: DateTimeField, DateField, TimeField
숫자 : IntegerField, FloatField
다른 테이블과 연관을 지어 줄 때 : ForeignKey
터미널에 아래의 명령어를 순서대로 입력하면 된다.
<데이터베이스 변경을 알려주는 명령어>
python manage.py makemigrations
<변경 된 데이터베이스를 적용시켜주는 명령어>
python manage.py migrate
Django Admin은 관리차 페이지를 직접 만들어주는 기능이다.
연결되어있는 데이터베이스의 데이터를 수정, 추가, 삭제 가능하다.
장고 서버를 실행시킨 후, http://127.0.0.1:8000/admin 으로 접속하면 된다.
django에서 제공하는 super user를 만들어야 admin 페이지에 접근가능하다.
<super user(관리자계정) 만드는 명령어>
python manage.py createsuperuser
suepr user를 만들 때에는 서버를 잠시 꺼주고, 명령어를 실행시킨 후 user name, email, password를 입력한다.
그 후 다시 장고 서버를 실행시키고 관리자 페이지에 접속하여 로그인하면 admin 페이지가 보인다.
User Model를 admin화면에 등록하기
user 파일의 admin.py에 아래처럼 코드를 입력하면 된다.
created_at이랑 updated_at은 화면에 나오지 않는데 왜냐하면 장고가 자동으로 시간과 수정한시간, 생성한 시간을 넣어주기 때문에 나타나지 않는 것이라고 한다!
tweet의 models.py에 아래 코드 붙여넣기
여기에서 ForeignKey는 '외부 모델을 가져와서 사용하겠다.' 라는 뜻이다.
author = models.ForeignKey(UserModel, on_delete=models.CASCADE)
author는 새로운 사람이 아니라, 아까 우리가 만들어 주었던 User Model의 사용자가 작성 한 글 이기 때문에 ForeignKey를 사용해서 넣어주는 것이다!
2)번의 3번 참조!
tweet앱의 admin.py에 아래 코드를 추가!
1. 템플릿 만들기
프로젝트 파일 아래에 templates라는 폴더를 생성하고 그 안에 html 파일들을 생성한다.
https://www.notion.so/Django-2-a7851e5fbefa4f8fa7847eb8af8c7658
이 사이트의 6번 참고!!
signup.html, signin.html을 보면 맨 위에 아래와 같은 코드가 있다.
{% extends 'base.html' %}
이건 base.html이라는 파일을 확장해서 그 안에 해당 내용을 추가해주겠다 라는 뜻이다.
-> 상단에 내비게이션이 있는 base.html 파일 안에 signin, signup 이라는 기능을 화면에 추가하겠다.
장고의 MVT 패턴
html파일들을 view와 연결하고 view를 url과 연결하면 화면을 띄울 수 있다.
1. 사용자가 url 요청 → 크롬/사파리 등의 인터넷 브라우저
2. mySpartaSns에 요청이 접수 → settings.py가 있는 가장 처음 작성한 앱의 urls.py
3. 등록된 url을 찾기 → urls.py에 연결 된 앱에 생성 한 urls.py
4. 해당 url에 등록 된 view를 찾기
Get은 화면에서 장고 서버로 url 요청이 갔을 때 장고 서버가 url의 요청방식을 확인하고 get일 경우에 화면을 보여주겠다 라는 뜻이다.
form은 화면에 있는 데이터를 서버로 전송할 때 사용하는 태그이다.
회원가입을 해야 하는 내용이기 때문에 데이터를 보내는 post을 적는다.
-> method="post"
action을 사용해 어떤 url로 전달할 것인지 적는다.
-> action="/sign-up/" (슬래시 꼭 앞뒤로 적어야 한다!)
{% csrf_token %} 은, Django에서 post 할 때에 보안을 위해서 사용 해 주어야 한다. post 메서드를 만들 때 자주 사용한다.
{% %}는 장고에서 말하는 템플릿 문법이다.
- 중복해서 html을 계속 작성하지 않아도 되도록
- html 파일을 이어서 작성할 수 있도록 도와주는
- html 파일에 파이썬의 기능들을 추가해 줄 수 있도록
user앱의 views.py 에 로그인을 처리 해 줄 함수를 만들고, url과 이어주기
방금까지 작성한 url과 view로 html에서 데이터를 넘겨주기 위해 signin.html의 form태그
에 action과 method 그리고 보안코드를 추가
3. view의 로그인 작업 마무리하기
user앱의 sign_in_view 함수에 로그인 기능들을 추가
조건문을 통해서 요청 메서드가 POST인지 검사하고, username과 password를 받아서 패스워드를 검사 한다.
user앱의 views.py에 있는 sign_in_view 함수에 조건 추가
💜 오늘 느끼고 배운 점
오전과 오후 : Django 기초반 2주차
저녁 : 타임어택 및 장고 거북이반 교육 수강
Django는 하면 할수록 기억해야 할 것이 많아지는 것 같다. 앱을 만들고, html파일을 만들고, 화면에 띄우고, 관리자 페이지를 만들어 로그인을 할 수 있게 하고 등등..
처음부터 모두 기억하면 욕심인 것 같고 여러번 해보면서 익숙해지는 수 밖에 없을 것 같다ㅠㅠ