상세 컨텐츠

본문 제목

장고(파이썬)프로젝트_5

파이썬·장고·루비·알고리즘

by 김일국 2019. 5. 29. 13:03

본문

오늘은 장고(파이썬) 프레임워크에서 CRUD중 C(입력)부분을 만들어 보았습니다.

# 현재 kik_profile 이라는 웹 프로젝트 명으로 계속 작업합니다.

* 아래는 생성/수정한 작업 파일 순서대로 기록합니다. 대부분 파이썬 문법을 사용합니다.


 - /home/kimilguk/KIK_profile/kik_profile/form.py 모델폼 상속한 클래스 파일 신규생성

 내용: 메타클래스(클래스 inner 클래스)사용 -> ModelForm을 상속한 클래스 AwardForm(부모클래스)

from django.forms import ModelForm
from .models import Award

class AwardForm(ModelForm):
    class Meta:
        model = Award
        fields = ['title','award_date','pub_date']


 - /home/kimilguk/KIK_profile/kik_profile/views.py 파일 모델insert 함수 생성

 내용:

from django.shortcuts import render, redirect
...
from .form import AwardForm //현재폴더의 form파일에서 AwardForm 클래스사용
...
def award_create(request):
    if request.method=='POST':
        award_form = AwardForm(request.POST)
        if award_form.is_valid():
            award_form.save()
        return redirect('/award/') //저장 후 award 수상리스트로 이동
    else:
        award_form = AwardForm()   //URL /award_form/ 으로 접근시 입력폼 자동생성해서 award_form 변수에 등록
    return render(request, 'kik_profile/award_form.html', {'award_form': award_form})


 - /home/kimilguk/KIK_profile/kik_profile/templates/kik_profile/award_form.html 수상경력 입력폼 파일 신규생성

 내용: award_form 변수에 등록된 모델폼을 award_form.as_p -> html P태그로 렌더링 처리

...

<body>

    <div>
        <form method="POST">
            {% csrf_token %}
            {{ award_form.as_p }}
            <button type="submit">저장</button>
        </form>
    </div>

<a href="/">go to main</a>
 || <a href="/award/">go to Award List</a>

...


 - /home/kimilguk/KIK_profile/kik_profile/urls.py 웹브라우저 접근경로(라우팅) 정의 추가

 내용:

urlpatterns = [
    path('', views.index, name='index'),
    path('list/', views.career_list, name='career_list'),
    path('award/', views.award_list, name='award_list'),
    path('award_form/', views.award_create, name='award_create'),

   //해석: award_form 으로 접근시 views파일에 정의된 함수 award_create 실행
]


이로써, 지금까지 장고(파이썬)을 사용해서 입력/출력을 해 보았습니다.

지금까지 학습한 다른 언어(Java, Php, Vs)나 마찬가지로 CRUD를 해 봐야지만, 파이썬/장고프레임웍을 제대로 익히기 됩니다.

아래는 파이썬/장고프레임웍 CRUD 중 입력및 리스트 화면 ( http://kimilguk.pythonanywhere.com/award/ )


# 장고(파이썬) 프레임워크의 MVC에서 사용하는 키워드는 아래와 같다.

장고프레임웍 설정과 프로젝트(앱) 설정이 분리되어 있다.

 - 프로젝트(앱) 설정  (/home/kimilguk/KIK_profile/kik_profile/프로젝트 설정파일들apps, models, urls, views...)

  $03:24 ~ (master) git clone https://gitlab.com/ilguk/KIK_profile.git (공유 프로젝트소스 GitLab 에서 가져오기)

  $03:24 ~ (master) cd KIK_profile (프로젝트경로 이동)

  $03:24 ~/KIK_profile (master) virtualenv --python=python3.6 myvenv (파이썬3.6버전으로 앱 가상환경 만듬)

  $03:23 ~/KIK_profile (master) source myvenv/bin/activate (앱 가상환경설정 로드)

  $(myvenv) 03:24 ~/KIK_profile (master) pip install django (장고 재설치)

  $(myvenv) 03:24 ~/KIK_profile (master) python manage.py migrate (장고용 데이터베이스 생성)

  주1) 위 명령어 실행시 패키지 에러 나서 pip install Pillow 설치

  주2) 위 명령어 실행시 환경설정에러나서 static_root 경로 변경(/home/kimilguk/KIK_profile/mysite/settings.py)

  $(myvenv) 03:24 ~/KIK_profile (master) python manage.py createsuperuser ( 관리자페이지 및 admin 계정 아이디/암호 생성 )

- 장고프레임웍 설정  (/home/kimilguk/KIK_profile/mysite/장고프레임웍 설정파일들wsgi, settings, urls...)

  $(myvenv) 03:24 ~/KIK_profile django-admin startproject mysite (mysite라는 폴더와 함께 장고 프로젝트 환경 구축됨.settings.py 파일생성)


* 장고프레임웍에서 사용하는 파이썬 구문 코딩 규칙

 - 클래스: 클래스명(상속할 부모클래스명)

 from django.apps import AppConfig


    class KikProfileConfig(AppConfig):
        name = 'kik_profile'


- 함수:

   def index(request):
    try:
       content_list = Career.objects.order_by('-career_date')[:5]
       award_list =Award.objects.order_by('-award_date')[:5]
    except Career.DoesNotExist:
       raise Http404('No Content')
    return render(request,'kik_profile/index.html',\
             {'content_list':content_list,'award_list':award_list})

     //함수 해석: 웹브라우저 urls에 경로가 '' 일때, 즉 root 일때, index 함수를 호출 한다.

       render 함수 실행시 인자2: /home/kimilguk/KIK_profile/kik_profile/templates/kik_profile/index.html 파일을 렌더링(파싱)한다.

       render 함수 실행시 인자3: models 에서 정의한 데이터셋 objects 를 변수에 담아서 렌더링시 index.html 에  전송한다.


 - 배열: INSTALLED_APPS = [ 'kik_profile.apps.KikProfileConfig',...] 해석: kik_profile(폴더명).apps(파일명).KikProfileConfig(클래스명)

   위 KikProfileConfig 클래스명 kik_profile 을 return 받는다.

   urlpatterns = [
       path('', views.index, name='index'),
       path('list/', views.career_list, name='career_list'),
       path('award/', views.award_list, name='award_list'),
   ]  해석: views(파일명).index(함수명)


 - html 파일들: render함수에서 사용된 html파일들은 항상 /home/kimilguk/KIK_profile/kik_profile/templates/폴더에 존재해야한다.

   <section class="resume-section p-3 p-lg-5 d-flex flex-column" id="experience">
        <div class="my-auto">
          <h2 class="mb-5">Experience</h2>
        {% if content_list %}
        {% for c in content_list %}
          <div class="resume-item d-flex flex-column flex-md-row mb-5">
            <div class="resume-content mr-auto">
              <h3 class="mb-0">{{c.title}}</h3>
              <div class="subheading mb-3">KIK</div>
              <img src= "{{c.img.url}}" width=300 style="border-radius:20px;">
              <p>{{c.post}}</p>
            </div>
            <div class="resume-date text-md-right">
              <span class="text-primary">{{c.career_date}}</span>
            </div>
          </div>
        {% endfor %}
        {% else %}
        <h3 class="mb-0">No post are available.</h3>
        {% endif %}
        </div>

   </section>

   해석: 장고프레임웍에서는 {% %} 혹은 {{ }} 안에 파이썬 구문이 들어가게 된다.

   일반적으로 구문 자체는 {% 를 사용하고 변수 및 데이터를 출력할 때는 {{ 를 사용한다.


====================================

Ps. 지금까지 실습과 앞으로 실습할 내용

01_[Django + 웹 호스팅] PythonAnyWhere.  이전블로그- 장고(파이썬)프로젝트_1

 -참조: http://blog.naver.com/PostView.nhn?blogId=shino1025&logNo=221316423585&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

02_[Django 입문] 장고로 웹 개발 입문하기.  이전블로그- 장고(파이썬)프로젝트_1

 -참조: http://blog.naver.com/PostView.nhn?blogId=shino1025&logNo=221316480686&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

03_[Django 입문] settings.py 설정 및 앱 만들기.  이전블로그-  장고(파이썬)프로젝트_1

 -참조: http://blog.naver.com/PostView.nhn?blogId=shino1025&logNo=221318447186&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView 

04_[Django 입문] Model과 DataBase 다루기.  이전블로그- 장고(파이썬)프로젝트_3

 -참조: http://blog.naver.com/PostView.nhn?blogId=shino1025&logNo=221318486234&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

05_[Django 입문] Urls와 Views 다루기.  현재포스트- 장고(파이썬)프로젝트_5

 -참조: http://blog.naver.com/PostView.nhn?blogId=shino1025&logNo=221318541360&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

06_[Django 입문] Model 다루기 2.  이전블로그- 장고(파이썬)프로젝트_4

 -참조: http://blog.naver.com/PostView.nhn?blogId=shino1025&logNo=221319031389&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

07_[Django 입문] 폼 만들기.  현재포스트- 장고(파이썬)프로젝트_5

 -참조: http://blog.naver.com/PostView.nhn?blogId=shino1025&logNo=221319135887&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

08_[Django 입문] 템플릿 확장시키기.  이전블로그- 장고(파이썬)프로젝트_2

 -참조: http://blog.naver.com/PostView.nhn?blogId=shino1025&logNo=221319598750&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

09_[Django 입문] CSS 적용하기.  이전블로그- 장고(파이썬)프로젝트_2

 참조: http://blog.naver.com/PostView.nhn?blogId=shino1025&logNo=221320924962&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

관련글 더보기

댓글 영역