관리 메뉴

AI 세상 ?

[django] 개발 과정. 본문

Development/Django

[django] 개발 과정.

phpdoumi 2017. 2. 7. 15:36

원본 : https://www.inflearn.com/course-status-2/


프로젝트 & app 생성

django-admin startproject tutorials .

python manage.py startapp community


디렉토리 구조 확인

manage.py

tutorials/

community/


관리자 페이지 확인

auth, admin 기본 데이터베이스 생성

python manage.py migrate

슈퍼유저 생성(통상은 admin)

python manage.py createsuperuser

웹서버 실행(default : 127.0.0.1:8000)

python manage.py runserver

접속 확인

http://localhost:8000

http://localhost:8000/admin/

settings.py 수정

INSTALLED_APPS : 'community',

community app 사용 가능.


글쓰기

데이터베이스 생성

community/models.py 수정

from django.db import models


# Create your models here.

class Article(models.Model):

    name = models.CharField(max_length=50)

    title = models.CharField(max_length=50)

    contents = models.TextField()

    url = models.URLField()

    email = models.EmailField()

    cdate = models.DateTimeField(auto_now_add=True)

데이터베이스에 생성

python manage.py makemigrations community    ==== 변화 여부 확인

python manage.py migrate    === 실제 데이터베이스 생성


tutorials/urls.py 수정

from community.views import *

url(r'^write/', write, name='write'),


community/views.py 수정

def write(request):

  return render(request, 'write.html')


community/templates 폴더 생성

write.html 생성

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <title>write</title>

</head>

<body>

  write page.

</body>

</html>


community/forms.py 생성

from django.forms import ModelForm

from community.models import *


class Form(ModelForm):

    class Meta:

        model = Article

        fields = ['name', 'title', 'contents', 'url', 'email']

community/views.py에 write 함수에 form 연결.

def write(request):

    form = Form()

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

write.html에서 form 사용하기
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>write</title>
</head>
<body>
  <form action="" method="post">
    {{ form.as_p }}
    {% csrf_token %}            === 이거 안하면 폼은 만들어지나, 저장할때 error. 폼 태그 통해 공격 가능해서.
    <button type="submit" class="btn btn-primary">저장</button>
  </form>
</body>
</html>

views.py 수정. 저장하면 POST로 처리하고 저장하고,  POST가 아니면 빈 폼 생성

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})

저장까지 된다.

리스트

    url(r'^list/', list, name='list'),


def list(request):

    articleList = Article.objects.all()

    return render(request, 'list.html', {'articleList':articleList})


<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <title>list</title>

</head>

<body>

  <ul>

    <li>제목 : 저자 : 날짜</li>

  {% for article in articleList %}

    <li><a href="/view/{{article.id}}">{{ article.title }}</a> | {{ article.name }} | {{ article.cdate|date:"D d M Y " }}</li>

  {% endfor %}

  </ul>

</body>

</html>



글 보기

    url(r'^view/(?P<num>[0-9]+)/$', view),

숫자가 몇개 반복될 수 있고 num으로 받는다.


def view(request, num="1"):

    article = Article.objects.get(id=num)        ==== id로 1개만 찾는다.

    return render(request, 'view.html', {'article':article})


template/view.html

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <title>view</title>

</head>

<body>

  제 목 : {{ article.title }}

  <br>

  저 자 : {{ article.name }}

  <br>

  내 용 : {{ article.contents }}

  <br>

  Email : {{ article.email }}

  <br>

</body>

</html>


이렇게 하면 간단하게 게시물이 출력되는 걸 볼 수 있다.



'Development > Django' 카테고리의 다른 글

[Django REST Framework] Tutorial  (0) 2017.03.11
[Django REST framework]Quickstart  (0) 2017.03.09