파이참 기준
1.프로젝트 뼈대 만들기
터미널에 다음과 같은 일련의 명령어들을 입력하자
>django-admin startproject mysite //mysite 라는 프로젝트를 생성
>python manage.py startapp polls //polls 라는 애플리케이션(모듈) 을 생성
>notepad settings.py // 설정 파일을 확인 및 수정
>python manage.py migrate // 데이터베이스에 기본 테이블을 생성
>python manage.py runserver // 서버 실행과 확인
그럼 다음과 같은 디렉토리 구조가 보일것이다.
BASE_DIR--------db.sqlite3 //sqllite3 db 파일, 테이블 정보가 존재
|
|-----manage.py // 장고 명령어 처리 파일
|
|-----mysite-----------__init__.py // 디렉토리에 이 파일이 있으면 파이썬 패키지로 인식
| |-----settings.py //프로젝트 설정 파일
| |-----urls.py // 프로젝트 레벨인 최상위 URLconf
| |-----wsgi.py // apache 와 같은 웹서버와 wsgi(http 같은 것들) 연동
|
|-----polls-------------__init.py //파이썬 패키지 인식
|-----admin.py // Admin 사이트 모델 클래스 등록을 위한 파일
|-----apps.py // 어플리케이션 설정 클래스 정의
|-----models.py // 모델 클래스 정의
|-----tests.py // 유닛 테스트용
|-----views.py // 뷰 함수 정의하는 파일. 함수형, 클래스형 뷰 모두 이 파일에 정의
|-----migrations----------__init__.py
| //데이터 베이스 변경사항 관리를 위한 디렉토리
|-----templates //템플릿들이 위치하는 디렉토리
startproject mysite 를 하면 mysite 디렉토리가 상위와 하위에 있는 경우가 있다.
그때에는 상위의 디렉토리 이름을 변경해주자. 그 상위의 디렉토리가 BASE_DIR이다.
startproject mysite . 을 하면 하나의 디렉토리만 만들어지니 상위, 하위 디렉토리를 신경쓰고 싶지 않다면
그냥 . 을 더 붙이자
2.settings.py
프로젝트 레벨의 setting이다.
a. DEBUG = True/False
True 이면 개발자 모드
개발자 모드에는 ALLOWED_HOSTS에 값이 없어도 ['localhost','127.0.0.1'] 로 된다.
False 이면 운영모드이다.
운영모드인 경우에는 반드시 ALLOWED_HOSTS에 서버의 IP 혹은 도메인을 지정해야 한다.
b. ALLOWED_HOSTS
기동할 서버의 ip가 여러개라면 그 ip도 지정한다.
ALLOWED_HOSTS = [ 다른ip, 'localhost' , '127.0.0.1' ]
c. INSTALLED_APPS
개발하고 있는 애플리케이션은 등록이 필요하다.
모듈명만 등록해도 되지만 애플리케이션의 설정 클래스로 등록하는 것이 더 정확한 방법이다.
polls.apps.PollsConfig
d. DATABASES
만약 오라클이나 mysql 을 사용하고자 한다면 이 항목을 수정하면 된다.
3.기본 테이블의 생성
장고는 반드시 사용자와 그룹 테이블등이 필요하다고 가정 하에 설계되었다.
때문에 테이블이 없으면 사용자와 테이블을 만들어줘야 된다.
이때 필요한 명령어가 migrate 이다. 이 명령어는 db에 변경사항이 있을때 그것을 반영해주는 명령이다.
migrate 명령에 대한 결과로 sqlLite3 파일이 생성된 것을 확인할 수 있다.
4. 작업의 확인
>python manage.py runserver 를 해보자
지정한 포트가 따로 있다면 python manage.py runserver 포트번호 를 하면 된다.
localhost:8000/admin 을 하면 로그인 페이지가 나온다.
회원으로 등록된것이 없으니 일단 관리자 계정을 만들어보자
5. create superuser
관리자 계정은 다음과 같이 만든다.
>python manage.py createsuperuser
6.Model 코딩
model은 데이터를 관리하는 쪽이다.
a. 데이터 베이스 변경 사항 추출
python manage.py makemigrations
b. 데이터베이스에 변경사항을 반영
python manage.py migrate
c.테이블의 정의
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
from django.db import models
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
|
cs |
장고는 ORM을 사용하며 각 클래스는 models.Model을 파라미터로 받고
model 객체에서 메소드로 테이블 정의를 한다.
특이한 점은 장고는 테이블의 pk를 자동으로 integerField 도 생성해 준다.
8행의 'date published' 는 레이블 문구이다.
15행의 fk 의 실제 칼럼이름은 question_id 이다.
10행과 19행의 def __str__이 없으면 테이블 명이 제대로 표시가 되지 않는다..
d. 테이블의 반영
1
2
3
4
5
6
7
|
from django.contrib import admin
# Register your models here.
from polls.models import Question, Choice
admin.site.register(Question)
admin.site.register(Choice)
|
cs |
위 코드는 admin.site.register(모델 클래스)로 admin 페이지에 반영한 것이다.
위와 같이 적으면 polls 와 Questino, Choice 에 빨간줄이 있을수도 있지만 무시하자 이게 맞다
7.URLconf 지정
1
2
3
4
5
6
7
8
9
10
11
12
|
from django.contrib import admin
from django.urls import path
from polls import views
urlpatterns = [
path('admin/', admin.site.urls),
path('polls/', views.index, name='index'),
path('polls/<int:question_id>/', views.detail, name='detail'),
path('polls/<int:question_id>/results/', views.results, name='results'),
path('polls/<int:question_id>/votes/', views.vote, name='vote'),
]
|
cs |
path( 'url' , 해당하는 템플릿, 이름, 딕셔너리 형태로 추가되는 정보)
4행의 polls 에 빨간 줄이 쳐져 있을지도 모르는데, 이게 맞다.
만약 /polls/3 이라고 url 이 요청이되면 3이 추출되어 views.detail(request, question_id=3) 형태로 대입된다.
혹은 다음과 같이도 작성을 할수도 있다.
1 2
3
4
5
6
7
8
9
10
11
12
13
14
|
from django.contrib import admin
from django.urls import path, include
# from polls import views
urlpatterns = [
path('admin/', admin.site.urls),
path('polls/', include('polls.urls')),
#이 하위의 내용을 polls.urls 에 작성
# app_name = 'polls' # path('polls/', views.index, name='index'),
# path('polls/<int:question_id>/', views.detail, name='detail'),
# path('polls/<int:question_id>/results/', views.results, name='results'),
# path('polls/<int:question_id>/votes/', views.vote, name='vote'),
]
|
cs |
|
|
9행의 app_name 은 url이 패턴이 같은 경우를 대비해 만든 것이다. 충돌할때 충돌한 것들을 식별한다.
polls:detail, blogs:detail 이런식으로 말이다.
8.view 함수와 템플릿 작성
디렉토리는 자신의 어플리케이션/templates/~~.html 같이 작성한다.
예시) demo/practice/templates/1.html
1
2
3
4
5
6
7
8
9
10
11
|
from django.shortcuts import render
# Create your views here.
from polls.models import Question
def index(request):
latest_question_list = Question.objects.all().order_by('-pub_date')[5]
context = {'latest_question_list': latest_question_list}
return render(request, 'polls/index.html', context)
|
cs |
10행의 render는 httpresponse 객체를 반환한다.
render(request, 이동할 템플릿, 템플릿에 넘겨줄 자료)
이때 주의해야 할것은 이동할 템플릿의 루트가 templates 디렉토리라는 것이다.
즉, 'polls/index.html' 의 실제 주소는 '/templates/polls/index.html' 이다.
'웹 > Django' 카테고리의 다른 글
Django 5. 클래스 뷰 (0) | 2021.05.13 |
---|---|
Django 3. 화면이동과 view 와 template간의 폼 처리 (0) | 2021.05.13 |
django 1. 개발환경 구축하기 (0) | 2021.05.10 |
djando 0. 웹 클라이언트 라이브러리 (0) | 2021.05.09 |
테스트 하기 (0) | 2020.12.23 |