TIL day-14 wocde

yo·2020년 6월 7일
0

주절주절

우리방 옆방 모두 가고 혼자 남았다. 불도 자꾸 꺼진다.
혼자 남는 것이 딱히 좋지도 싫지도 않았는데, 좋아하는 음악 맘껏 틀 수 있어서 좋아졌다. 계속 이 혼자만의 고요함을 확보하고 싶다.ㅋㅋ 자꾸 불이 꺼져서 수동 몸짓으로 다시 켜야하는 것 말고는 아주 좋다.

벌써 이 주가 지났다. 시간 참 빠르네.
하루 하루 스스로에게 부끄럽지 않게 살아왔다.
힘들 때도 있지만 즐겁게 해왔고, 스스로가 대견하다.
이것 보다 더 힘들게 노력하며 사는 사람도 얼마든지 많을테니, 너무 자만하지 말고 끝까지 달려가도록 정신력과 체력이 버텨주길.

웃음은 웃어보라고 강요당할 때 가장 부자연스럽다.
노력도 비슷한 것 같다.
열심히 하란다고 열심히 되지 않는다.
억지로 할 순 있겠지만 억지로 웃는 것과 다를바 없다.
혼을 담은 노력은 내적동기에서 나온다.
위코드에서 간만에 맘 깊은 곳에서 올라오는 모티베이션을 느낀다. 감사하게 생각하고, 이 촛불이 꺼지지 않길 바랄뿐이다.

wecode는 참 신기한 곳이다.
체찍질 하는 사람 하나 없어도 교육목표를 향해 다들 질주한다. 심지어 직원(?)분들 표정도 밝다.
나도 여기서 보내는 시간들이 행복하다.
무엇이 이런 위코드를 만들었는지 가끔씩 생각하게 된다.
stad모형, flipped learing도 아주 잘 작동한다.
교육학적으로도 연구해 볼 만한 단체이지 싶다.

장고 어렵다. 인강 찾아 들으면서 조금씩 이해하고 있는데 갈 길이 멀다. 공부할 때 먼저 숲을 조망한 다음 나무로 들어가는 스타일인데, 세션이나 장고공식문서로 숲을 조망받지 못해서 아쉬웠다. 숲을 조망해주는 유튜브 강의를 찾아서 차근차근 듣고 있다. 멘탈이 좋아서 아직까지 어렵다고 크게 좌절하지 않는다.
어려운 이유가 다 있다.
1)처음이다. 처음엔 누구나 어렵다.
2)실제로 어려운 내용이다. 다들 어려워 한다.

1)은 계속 하다보면 자연스레 해결 되는 것이고, 2)는 앞선 사람들이 결국 다 해냈으니, 나도 못할 건 없다.
계속 파다보면 물이 나오겠지.

다른 사람과 말하면서 공부하는걸 좋아한다. 다른 사람의 이해를 돕는 것도 엄청 좋아한다.
열심히 익혀서 잘 이해하지 못하는 사람들을 도울 수 있으면 행복할 것 같다.

conda 가상환경 명령어

django 설치

mysite라는 project를 만들었을 때 자동생성되는 디렉토리들.

-The outer mysite/ root directory is a container for your project. Its name doesn't matter to Django; you can rename it to anything you like.
-manage.py: Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 유틸리티.
-mysite/: 이 디렉토리 내부에는 프로젝트를 위한 실제 Python 패키지들이 저장된다. 이 디렉토리 내의 이름을 이용하여, (mysite.urls 와 같은 식으로) 프로젝트의 어디서나 Python 패키지들을 임포트할 수 있다.
-mysite/__init__.py: Python으로 하여금 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 단순한 빈 파일
-mysite/settings.py: 현재 Django 프로젝트의 환경 및 구성을 저장
-mysite/urls.py: 현재 Django project 의 URL 선언을 저장
-mysite/asgi.py: An entry-point for ASGI-compatible web servers to serve your project
-mysite/wsgi.py: 현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점

runserver

python manage.py runserver 이 명령어를 통해 서버를 실행한다.
실행 후 http://127.0.0.1:8000/ 이 주소로 가보면 congratulations를 볼 수 있다. 서버를 종료하려면 control+C를 누르자.

startapp

python manage.py startapp polls 이라는 명령어로 프로젝트 내에서 앱을 실행한다. 이 때, 만드시 manage.py가 존재하는 디렉토리에서 명령어를 입력해야한다.
polls라는 디렉토리가 생길탠데, 구성은 아래와 같다.

장고 유튜브 강의 듣고 따라하기

(총 7강이고, 이미 1번 2배속으로 들었다. 이제 두 번째 들으며 블로그정리+따라해보기)

1강 웹프로그래밍과 Django

client와 server


-웹브라우저, 명령프롬프트, 스마트폰 앱들은 모두 클라이언트다.
-클라이언트는 디바이스와 소프트웨어를 아울러 일컫는다.
-"내 위치가 어딜까요?" "오늘 날씨는 어떤가요?" 와 같은 request를 client가 먼저 보내고, server가 이에 응답하게 한다.
-이렇게 데이터의 주고받는 관계에서 이용되는 규약이 http이다.

http의 특징


-클라이언트가 서버에 요청을 보내고 서버는 응답한다. 응답직후 서버는 연결을 바로 끊어버린다. 이유는? 클라이언트와 서버는 n:1의 관계기 떄문에, 지속적으로 연결을 하면 서버에 부담된다. 해서 끊고 맺고 반복해서 일어난다. 예를 들어, 로그인 요청을 보내면, 로그인 응답을 주고 끊어버린다. 장바구니에 담기 응답을 보내면, 담아준 다음 끊어버린다.
이렇게 되면 문제는, 로그인 상태, 장바구니 담긴 상태가 지속되지 않고 매 번 새로 해야된다.
이를 보안하기 위해(연결을 유지하기 위해) 쿠키, 또는 세션이 이용된다.
-데이터가 pc에 머물면 쿠키, 서버에 머물면 세션.
-쿠키방식: 처음 접속시, 자동으로 쿠키 생성됨. 이 쿠키를 pc와 서버에 두고 서로 비교해가면서 연결을 유지하는 방식을 사용.
-세션방식: 처음 접속시 서버에 세션생성. 이후에 이를 두고 pc와 서버가 서로 비교하며 연결유지.
-보안상으론 세션이 더 안전.

http처리방식

-클라이언트가 서버에 요청할 떄 8가지 방식이 있고, 주로 post,get,put,delete가 쓰인다.
post: 새로운 데이터를 입력할 때 사용. 게시판에 글 쓰기, 블로그에 댓글달기
get: 서버에 데이터를 요청할 때 사용하는 통신방식.
put: 기존 서버 데이터를 수정할 때.
delete: 작성된 데이터를 삭제할 때.
이는 각각 서버가 db와 소통하는 create, read, update, delete와 같은 맥락이다.

-HTML의 form테그가 주로 쓰이고, 해당태그는 post, get방식을 지원한다.(나머지 지원안함)

post vs get


-get방식: 네이버 메인주소는 깔끔하지만, 뭔갈 검색(예를들어 날씨)한 후 나오는 주소는 지저분하다. 뒤에 붙는 지저분한 부분을 쿼리스트링이라 한다. 이게 get방식으로 이루어지는 거다.

url

rest와 django url 맵핑


왼쪽처럼 주소가 들어오면, 장고에선 오른쪽으로 이해하고 반응한다.

서버구성


1)클라이언트의 요청이 들어온다.
2-1)정적 데이터의 요청이라면, 웹서버가 처리한다.
2-2)동적 데이터 요청이라면, 웹서버가 애플리케이션 서버에게 위임한다. 예를 들어 오늘의 날씨에 대한 요청은, 오늘 날씨에 대한 정보가 매일 달라지기 떄문에 동적인 데이터이다. 애플리케이션 서버는 데이터베이스와 연동되어 작동한다.

2강 장고 설치 및 프로젝트 생성

<목차>
-python 패키기 pip업그레이드
-장고 설치 및 업그레이드
-장고삭제
-장고 프로젝트 생성
-애플리케이션 생성
-프로젝트 디렉토리 이름 변경
-mvt패턴
-프로젝트 디렉토리 구조

pip를 이용한 장고 설치

-pip: python install package, 이걸로 장고 설치.
-python -m pip install --upgrade pip pip업그레이드
-pip --version 파이썬 버전확인
-pip install Django 장고 설치
-pip install Django --upgrade 장고 버전 업그레이드
-장고삭제(장고 설치 경로로 이동 후 디렉토리 삭제)

Django 프로젝트 생성, application 생성

django-admin startproject "프로젝트이름" 프로젝트 생성
-프로젝트 생성하고자 하는 위치로 먼저 이동해서(cd명령) 생성해야함.
-쇼핑몰 만들기는 project
-장바구니, 로그인 등 그안의 세부적 기능들은 application
-애플리케이션은 프로젝트폴더 안으로 이동해서 생성해야 한다.
-python manage.py startapp "앱이름" 앱 생성
-앱 생성후엔 settings.py에 가서 installed apps안에, '애플리캐이션명,apps,클래스명', 을 반드시 적어줘야 한다. (클래스명은 해당 앱의 apps.py에 있는 클래스명)

프로젝트 폴더 이름 변경

a라는 이름의 프로젝트를 만들면 a라는 디렉토리가 생기는데, 그 안에 들어가보면 또 a이름을 가진 폴더가 있다. 같은 이름가진 폴더가 두개 생기는 것이다.
상위 a폴더는 장고가 상관하지 않기 때문에 이름을 바꿔도 무관하다. 헷갈린다면 이름을 바꿔버리는 것도 하나의 방법이고, 이 강사도 그렇게 한다고 한다.
move 원래이름 바꿀이름 디렉토리 이름 바꾸는 문법.

MVT 패턴 (장고)

1)mvc패턴
-클라이언트에서 요청이 들어오면 제일 먼저 control이 받는다.
-만약 요청이 db를 필요로한다면 control->model로 위임한다.
-model은 db에서 데이타를 받아 control에 전달.
-control이 필요한 가공작업을 한다음, view로 넘긴다.
-view를 적합한 응답의 형태를 골라서 컨트롤로 넘겨주고, 최종적으로 client에게 응답을 준다.

2)MVT 패턴
mvc와 거의 유사하다. 이름만 달라졌다.
view는 컨트롤타워 역할

프로젝트 디렉토리 구조



-views와 models를 볼 수 있다. templete은 따로 사용자가 만들어서 경로를 줘야한다.
-settings는 전체적인 셋팅을 담당한다.
url은 요청이 들어왔을 떄 어디로 가야할지 알려주는 bridge역할.

3강 Django 프로젝트 설계

<목차>
-Django framework 흐름도
-URLconf(urls.py)
-View(views.py)
-Model(models.py)
-Template(*.html)
-프로젝트 설정(/tempPjt/settings.py)
-기본 사용자 및 그룹 테이블 생성
-관리자 계정 생성 및 서버 구동

Django framework 흐름도

-사용자에게 requests가 오면 제일 먼저 URLConf(urls.py)가 받아준다.
역할은? request는 url형태로 온다. 이 url형태로 오면 장고에선 이렇게 처리해라, 저 url형태로 오면 장고에서 어떤 함수, 메서드를 실행시켜라 같은 변환기능을 해줌. 그리고 뷰로 넘김.
-그 다음부터는 위에 설명한 MVT형태와 같음.

URLconf(urls.py)

student/register라는 url형태가 들어오면 student_register로 이동해라 라는 뜻.

urls.py의 실제 모습.
admin url이 들어오면 admin.site.urls로 보내라.
include()는 다른 urls로 보낸다. 괄호안의 urls파일로 가라는 거다.
즉, 다른 어플리케이션 안에 있는 ruls로 가서, 거기서 시키는대로 하라는 뜻이다.
가보면 아래처럼 되있다.

View


함수의 인자로 request객체가 들어온다.
return response객체로 반환한다.

Model(models.py)

-모델은 데이터베이스를 관리한다.
-orm방식 사용한다.

-models는 어플리케이션 디렉토리 안에 있다.(프로젝트 디렉토리엔 없다.)

-model는 쿼리스트링 방식이 아닌, orm방식으로 데이터베이스에 접근한다.
-위사진에서 클래스명인 student는 db이름이다.
-name, major, age, 등은 필드명이다.
CharField는 문자열, IntegerField는 정수열을 의미한다.
maxlength는 범위를 의미한다.
default는 디폴트 값이다.
위 사진처럼만 해도 장고에서는 데이터베이스에 테이블이 생성된다.
-테이블이름은 (에플리케이션이름
클래스이름의 소문자)로 구성된다.
위 사진에선 students_student.
-sql을 좀더 쉽게 클래스 형태로 만들어 놓은 것이 orm방식.

template(*.html)


-project명 안에 있는 동일이름 project폴더 안에 있는 settings.py에서 어플리케이션을 등록해야한다.
-어플리케이션 디렉토리 안에 templetes라는 임의의 디렉토리를 개발자가 직접 만든다. 그 안에 임의로 경로와 html문서를 만들 수 있다.
장고가 직접 만들어주지 않는다. 떄문에, 장고에게 이경로를 알려줘야한다.
방법은?
1)프로젝트 전체 담당하는 settings에 들어간다.
2)installed_apps에 새로 만든 앱의 이름을 등록해준다.
3)구체적으로 어떻게 적냐면, 애플리케이션 디렉토리 안에 apps.py를 열어보면, class가 정의되어 있는데 그 클래스 이름을 그대로 복붙하면 된다.
앱명.apps.클래스명

프로젝트 설정(/tempPjt/settings.py)

debug 모드.
False로 해놓으면 상용화 한다는 뜻이니, 그 아래 있는 allowed_hosts에 꼭 아이피주소를 명시해줘야한다.
debud =True일 땐 비워두면 됨.

기본 사용자 및 그룹 테이블 생성

-장고는 기본적으로 관리자모드를 제공한다.(다른 프레임워크는 제공 안해서 따로 만들어야 하는 경우가 많음, 그러면 사실상 홈페이지 하나 만들 때 두개를 만들어야 하는 꼴)
-다만, 관리자끼리 모여있는 그룹 테이블을 생성해줘야 관리자 사용 가능하니 꼭 만들어주자. 그러기 위해 프로젝트 디렉토리 안에서 이 코드를 치자 python manage.py migrate

데이터베이스 생성, 변경하면 python manage.py makemigrationspython manage.py migrate를 써줘야한다.
이렇게 하므로 models의 내용이 그대로 적용될 수 있다.

-관리자 계정 생성 및 서버 구동

-관리자 자동생성되긴 하는데, 바로 들어갈 수 있는건 아니고,
접근하려면 계정과 암호가 있어야한다.
-프로젝트디렉토리로 이동한 후 아래 코드 쳐라.
-python manage.py createsuperuser 코드 치자.
ㅡ(python manage.py migrate이 코드로 관리자 그룹테이블 먼저 생성해야 된다.)
-그다음 요구대로 메일주소, 패스워드 생성해라.

-장고는 자동으로 가벼운 서버를 제공해준다.
python manage.py runserver 0.0.0.0:8000
위 코드 치면 서버가 구동된다. http://127.0.0.1:8000/
여기로 드가보면 접속 가능.

4강 데이터베이스(ORM)

<목차>
-테이블 생성
-레코드 다루기(create, read, update, delete)

장고 세팅 기본

db를 만들려면 앱을 만들어야 한다. 프로젝트 만들고 앱 만드는 과정.
.관리자 화면에 등록하기 위해 앱디렉토리의 admin.py에 등록해준다.
1. 프로젝트 만든다.
django-admin startproject "프로젝트이름"
2. 프로젝트폴더 안에서 앱 만든다.
python manage.py startapp "앱이름"
3.만든 앱을 settings.py의 installed app에 등록해준다.
앱명.apps.클래스명
4.사용자 및 그룹테이블 생성한다. (반드시 project디렉토리로 이동해서 해야한다.) python manage.py migrate
5. 슈퍼유저를 만든다. (반드시 project디렉토리로 이동해서 해야한다.)
python manage.py createsuperuser
6. 서버를 구동시킨다. (반드시 project디렉토리로 이동해서 해야한다.)
python manage.py runserver 0.0.0.0:8000
7. 서버 접속한다. http://127.0.0.1:8000/
8.관리자모드 들어간다. http://127.0.0.1:8000/admin/
9.로그인한다.
10. 4에서 만든 그룹과 관리자를 볼 수 있다.

이제부터 테이블을 생성할 수 있다.

테이블 생성


상세설명
애플리케이션 내에 있는 models.py에서 테이블을 만든다.

1.클래스는 models.Model을 상속받아야 한다.
2.CharField(스트링)인지, IntegerFIeld(정수)인지 등 데이터타입 명시해줘야한다.
3.데이터의 길이를 명시해준다.(max_length)
4.클래스 안에 반드시 __str__메서드 만들어야 한다.
이유: 외부에서 이 테이블에 접근할 때 클래스명을 반환해줘서 어떤 테이블인지 쉽게 알아볼 수 있다.
5.만든 테이블을 admin.py에 등록한다.(사진 오른쪽)
6.db정보가 변경된 것이니 python manage.py makemigrations , python manage.py migrate로 변경사항 등록해준다. (반드시 프로젝트 디렉토리로 이동해서 한다)

이렇게 models안에 클래스를 만든 행위 자체가 테이블을 만드는 행위다.
7. 변경사항이 잘 등록됐는데 확인하기 위해 python manage.py runserver후 사이트 관리자모드에 들어가서 확인해본다. (http://127.0.0.1:8000/admin/
students 가 새로 생긴 것을 볼 수 있다.

레코드 다루기(create, read, update, delete)

  1. 레코드를 다루기 위해 장고 쉘을 실행시켜야 한다. (이것도 프로젝트 디렉토리 안에서 실행해야 한다.)p
    python manage.py shell
  2. 다룰 테이블을 import 해온다
    from students.models import Student
  3. qs = Student(s_name='Honggildong', s_major='computer', s_age=20, s_grade=2, s_gender='M') 처럼 변수를 만들고 테이블 목록에 맞게 추가할 정보를 작성해준다.
  4. 3번 메모리에만 올라갔을 뿐, 아직 db에 등록된 상태는 아니다. db에 등록하기 위해선
    qs.save() 코드를 친다.
  5. 같은 방식으로 레코드를 추가한다.
    qs = Student(s_name='kimminam', s_major='dance', s_age=23, s_grade=3, s_gender='M')
  6. qs.save()

데이터 읽기.


<모든 데이터 불러오기>
Student.objects.all()로 Student의 모든 데이터를 불러올 수 있다.
혹은 다음처럼 변수에 담아서 출력할 수도 있다.
qs =Student.objects.all()
print(qs)
type(qs)를 해보면 데이터타입이 QuerySet으로 나온다.

<데이터 한 개 불러오기>

qs = Student.objects.get(s_name='hongildong')
print(qs)

여기서도 type(qs)를 찍어보면 Student객체로 나온다.

데이터 전체를 불러온 것과 데이터 한 개를 불러온 것의 데이터 타입이 다르다는 것을 기억해라!

전부 다 불러온 다음 인덱스로 출력할 수도 있다.
qs[0]
qs[0].s_name

한개만 불러왔을 땐 인덱스 필요없이 바로 데이터에 접근하면 된다. 아래사진 참고.
qs.s_major

<레코드 읽기 데이터필드 명령어>

<레코드 읽기 데이터 정렬 명령어>
order_by('') 오름차순
order_by('-') 내림차순
예시)
Student.objects.order_by('s_age') 나이 오름차순으로 정렬
Student.objects.order_by('-s_age') 나이 내림차순으로 정렬

레코드 업데이트

qs = Student.objects.get(s_name='hongildong')
데이터를 불러온 다음
qs.s_major = "Mathmatics"
하면 major가 수정됨.

레코드 삭제(delete)

qs = Student.objects.get(s_name='hongildong') 처럼 데이터를 변수에 담은다음에, qs.delete()로 지운다.

5강 학사관리프로그램 만들기-1

<목차>
-웹 애플리케이션 설계
-프로젝트 생성
-애플리케이션 생성
-프로젝트 설정 변경(settings.py)
-데이터베이스 만들기(models.py)
-관리자 계정 생성 및 웹서버 실행
-관리자 페이지 접속
-Django 인트로(시작) 페이지 접속

웹 애플리케이션 설계

프로젝트 생성

django-admin startproject studentsProject

<상위 프로젝트 디렉토리 이름 변경>
mv studentsProject sProject

에플리케이션 생성

python manage.py startapp students

프로젝트 설정 변경(settings.py)

studentsProject/settings.py의 installed_app에서 앱명.apps.앱의클래스명을 추가해야 한다. 'students.apps.StudentsConfig',

<타임존 변경>
-필수는 아닌데, 시간이 아시아 기준이 아니라, 아시아로 바꿔주면 좋다.
-settings.py의 TIME_ZONE = 'Asia/Seoul'

데이터베이스 만들기(models.py, admin.py)

models.py에 추가

students/models.py

from django.db import models


class Student(models.Model):
    s_name = models.CharField(max_length=100)
    s_major =models.CharField(max_length=100)
    s_age = models.IntegerField(default=0)
    s_grade = medels.IntegerField(default=0)
    s_gender = models.CharField(max_length=30)

    def __str__(self):
        return self.s_name

admin.py에 추가

students/admin.py
-어드민에도 적어줘야한다.

from students.models import Student

admin.site.register(Student)

데이터베이스에 반영

-프로젝트 디렉토리로 이동한다.
python manage.py makemigrations 마이그레이션 할 게 있는지 확인
python manage.py migrate 마이그레이트 실행
이렇게 해야 데이터베이스에 반영된다.

관리자 계정 생성 및 웹서버 실행

<관리자 계정 생성>
-프로젝트 디렉토리로 이동한다.
python manage.py createsuperuser 관리자 계정 생성

<웹서버 실행>
python manage.py runserver 0.0.0.0:8000

6강 학사관리프로그램 만들기 2

<목차>
학생 등록 및 리스트 페이지 만들기

studentsProject/urls.py

studentsProject/urls.py

위 경로에서 url경로를 관리한다.
어떤 url이 들어오면, 장고 내부과정을 거쳐 어디로 보내줄지 적어놓는 곳이다.

from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

기본적으로 위처럼 자동설정 되있다.
path쪽을 보자. admin이라는 관리자 모드 요청이 들어오면, admin.site.urls라는 곳으로 보내준다는 뜻이다.

그런데 문제가 있다.
프로젝트가 커지면서 총 페이지가 100개라 치자.
그럼 studentsProject/urls.py의 path에도 100개정도의 내용이 생기는 것이다. 유지보수 차원에서 비효율적이다.
이를 해결하기 위해, 각 애플리케이션에 urls.py를 새로 만든다. (복붙)
그런데 장고는 프로젝트 디렉토리내의 urls.py에서만 url들을 찾고, 각각 애플리케이션의 urls.py로는 가지 않는다. 때문에
studentsProject/urls.py에서 각각의 에플리케이션즈 내에 있는 urls.py로 보내줘야한다.즉, path로 각앱의 urls.py를 지정해주자.
그 다음 거기서 처리하라고 하면 된다.
기본 셋팅에 include를 추가하고 작업하면 되는데 결과는 아래와 같다.

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    paht('students/', include('students.urls')),
]

students/urls.py

그리고 students엡의 urls.py로 가서 아래와 같이 작업한다.

from django.urls import path
from . import views

app_name = 'students'
urlpatterns = [
     path('reg/', views.regStudent, name='reg'),
]

해석: students reg라고 url들어오면 view뒷쪽의 기능을 실행시켜라.

views

이렇게 url관련 설정을 해줬으면, 이제 그 다음 view로가서 방금 입력한 내용을 실행할 수 있도록 적어줘야 한다.

from django.shortcuts import render

# Create your views here.
def regStudent(request):
    return render(request, 'students/registerStudent.html')
    

render는 response의 의미. registerStudent.html이라는 템플릿을 실행하라는 의미.

templete

-registerStudent.html은 템플릿이다.
-그러므로 위 과정 이후엔 templete를 작성해줘야 한다.
-students애플리케이션 디렉토리 안에 templete라는 디렉토리를 하나 만들자.
-구분을 위해 그 안에 다시 students라는 디렉토리를 만들고 그 안에서 작업.
-registerStudent.html파일을 생성한다.

-form테그 사용. form태그에는 필수요소 2가지가 있다(action, method)
-method에는 전송방식 post,get중에 하나 골라주면 된다. post로!
-보안을 위해 (% csrf_token %) 라는 템플릿태그 넣어준다.
-action에는 학생등록페이지를 명시해준다.

위에 만든 html이 reg/students의 응답으로 보여지게 된다.

이제 runserver로 확인해보면 된다.

regConStudent

-registerStudent.html에서 regConStudent를 보내줬으니 그 작업을 해야된다.
먼저 students/urls.py로 가라.
urlpatterns 에서 아래처럼 추가해라.

위에서 만든 path는 views.regConStudent를 호출하니, views에 가서 저 함수를 만들어줘야 한다.
이 함수는 사용자가 폼 태크에서 넘긴 데이터를 가지고 데이터베이스의 create레코드를 하나 생성하는 과정이다.
폼태그에 있는 정보를 하나씩 가져오면 된다.
아래처럼 만들어주면 된다.
(4번째줄 오타. studens->students)
맨 마지막 줄 오타. (return render(request, 'students/readStudents.html', context)


입력받은 값을 데이터에 저장하는 함수를 생성했다.
리턴값으론 학생 전체목록을 보여주는 페이지를 준다.
그러므로 이젠 학생 전체목록을 보여주는 페이지를 만들어야된다.
먼저 urls.py에서 path를 추가해주자.
path('all/', views.reaStudentAll, name='stuAll),

그 다음엔 views로 다시 가서 위 path에서 작성한 reaStudentAll을 선언해준다.

-위에서 작성한 html템플릿 파일을 만들자.
아까 만들어놓은 템플릿 디렉토리로 가서 새로 하나 만든다.
이름은 readStudents.html
예시에선 템플릿태그의 포문을 이용했다.

신규학생을 등록하기 위한 작업을 하자.

구조

학생등록, 학생리스트 등 모든 구조는 아래와 다 똑같다.

url패턴 만들기.
패턴에 의해서 어떤 뷰로 갈건지, 어떤 함수 실행시킬건지
템플릿은 어떤거 쓸건지

7강 학사관리프로그램만들기3

<목차>
-학생 정보 보기 페이지 만들기
-학생 정보 수정 페이지 만들기
-학생 정보 삭제 기능 만들기




profile
Never stop asking why

1개의 댓글

comment-user-thumbnail
2020년 6월 8일

안녕하세요, 전 옆자리 동기님😂
블로그 정리가 짱입니다....👍👍👍👍👍👍

답글 달기