2016년 1월 22일 금요일

django

$\underline{DJango\ short\ Tutorial}$

django-admin startproject tutorial #프로젝트를 만듬(이름이 tutorial)
tree
cd tutorial
./manage.py startapp community #프로젝트 앱을 만듬(app명은 comunity)
                                                       
하나의 project내에 여러개의 앱이 있는 구조이다 

./manage.py migrate # db 생성
./manage.py createsupperuser # db 관리할 계정 생성

./manage.py runserver #서버 들어가서 접속해 본다
#접속 주소 밑에 …/admin 치고 들어가서 계정정보를 넣으면 관리자 계정으로 여러 정보를 보는 것이 가능



tutorial(project)아래의 settings.py 가서 방금 생성한
app community 등록해 주어야 한다.

INSTALLED_APPS = [
    'django.contrib.staticfiles',
    'community',
]



(1) 저장할 데이터의 형태(필드) 생성


app community models.py 가서 db 저장될 데이터의 형태에 대한 정의를 주어야 한다
데이터 필드를 가진 클래스를 models에서 상속받아 작성해 준다.

class Article(models.Model):
     name = models.CharField(max_length=50)
     title = models.CharField(max_length=50)
     contents = models.TextField()
     email = models.EmailField()
     cdate = models.DateTimeField(auto_now_add=True)

새로 생성한 app comunity 관련된 db 생성해 주어야 한다
./manage.py make migrations community


community model 생성한 데이터를 반영하기 위해 db 변화가 있는지 체크해서 반영해 준다
./manage.py migrate




(2) 접속 경로 지정과 경로를 통해 호출할 함수 작성


게시판 작성이 목표이므로 사용자가 접근해서 글을 작성할수 있는 페이지가 있어야 한다. 이를 위해 
project urls.py파일에서 write라는 이름으로 접근할 있는 경로를 지정해 준다.
from community.views import *

urlpatterns = [
    …
    url(r'^write/', write, name='write'),
]

url에서 "write"이름의 경로이면 views에서 "write" 함수를 작성한다.  

이제 views.py파일에서 write 함수를 만들어 보자. url명에서 인자가 있다면 request를 통해 넘어간다. 

def write(request):
     return render(request, 'write.html')

views에 있는 write 함수는 화면에 표시할 것을 정의한다. 
여기서는 html template를 이용해서 표시를 수행한다.
따라서 community 아래에 html 파일들을 저장할 templates 폴더를 하나 생성한다(이름을 정확하게 “templates”로 적어야 한다)


views.py의 역할은 urls.py에서 받은 parameters에 맞게 출력할 data를 생성한다. 또, 템플릿을 로드하고 data와 함께 템플릿을 render한다. 




(3) 화면에 표시할 폼과 템플릿을 작성


templates 폴더 아래에 write.html 파일을 하나 만든다.
sublime에서 text 타입을 html로 설정하고 첫줄에 <html.. 라고만 치면 필요한 형식이 자동으로 생성된다.
<body>
hello django!

라고 입력하고 runserver를 다시 실행하고, 
127.0.0.1:8000/write에 접속해 보면 
hello django! 
메시지가 나타난다.




전통적인 방식으로는 write.html에서 입력받는 폼을 복잡하게 구성해야 하나, django에서는 form를 이용하여 간단하게 구성해 줄 수 있다.
community 아래에  forms.py 파일을 만든다. 

from community.models import *
class Form(ModelForm):
     class Meta:
     model = Article
     fields = ['name', 'title', 'contents', 'email', ‘cdate']

db에서 만들었던 필드명을 나열하여 form을 제작한다. 





구성한 폼클래스를 이용하여 폼 객체를 생성해야 하는데, 이것은 views에서 해준다.  또 생성한 form 객체를 html에 전달해 주어야 한다.  

from community.forms import *
def write(request):
     form = Form()
     return render(request, 'write.html', {'form':form})

forms.py의 클래스를 import하고 이를 이용해 객체 form을 생성하고 이를 html에 전달하기 위해 render내에 {…}형식을 사용해 주었다.




(4) 구성된 폼과 템플릿을 화면에 표시


write.html에서 form을 사용하기 위해 p태그를 사용하여 아래와 같이 지정한다.  또 submit 버턴도 추가한다.
<body>
<form action="" method="post">
     {{ form.as_p}}
<button type="submit" class="btn btn-primary">저장</button> 
</form>


이렇게 저장해 놓고 다시 실행해보면 폼 형태를 가진 입력창들이 웹에 표시되게 된다. 
추가로 다양한 외부 공격에 대비하기 위해 {% csrf_token %}와 같은 토컨을 추가한다.
이제 입력 창들에 값들을 입력하면 form이 값들을 받아서 db에 저장하면 되는 것이다.  





form 버턴을 누르면 request를 통해서 POST(또는 GET)가 발생하게 되고 이를 체크해서 필요한 처리를 해준다.  
메세지를 처리해 주기 위해 views.py로 가서 수정해 준다.

def write(request):
     if request.method == 'POST':
          form = Form(request.POST)
          if form.is_valid():
               form.save()
     else:
          form = Form()

     return render(request, 'write.html', {'form':form}) 



여기까지 앱에서 하나의 페이지를 작성하고 데이터를 처리하는 것을 살펴 보았다.  
——————————




이제 작성한 데이터의 리스트를 볼 수 있는 list라는 url을 만들어보자.
위와 똑같이 한다.

project 아래 urls 아래에 다음을 추가한다:
url(r'^list', list, name='list'),



views에 list함수를 만든다.



실행과 테스트

Mac을 기준으로 하면, 먼저 django가 설치된 (아나콘다 등의) 가상 환경에 들어간다.  장고의 프로젝트 폴더로 가서
./manage.py runserver

로 실행할 수 있다. 실행된 곳에 접속하기 위해 브라우저 창에
http://127.0.0.1:8000/admin
http://127.0.0.1:8000/photo/1

등의 프로젝트에 설정된 주소를 입력하여 접속할 수 있다.










댓글 없음:

댓글 쓰기