오늘은 장고(파이썬) 프레임워크에서 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
02_[Django 입문] 장고로 웹 개발 입문하기. 이전블로그- 장고(파이썬)프로젝트_1
03_[Django 입문] settings.py 설정 및 앱 만들기. 이전블로그- 장고(파이썬)프로젝트_1
04_[Django 입문] Model과 DataBase 다루기. 이전블로그- 장고(파이썬)프로젝트_3
05_[Django 입문] Urls와 Views 다루기. 현재포스트- 장고(파이썬)프로젝트_5
06_[Django 입문] Model 다루기 2. 이전블로그- 장고(파이썬)프로젝트_4
07_[Django 입문] 폼 만들기. 현재포스트- 장고(파이썬)프로젝트_5
08_[Django 입문] 템플릿 확장시키기. 이전블로그- 장고(파이썬)프로젝트_2
09_[Django 입문] CSS 적용하기. 이전블로그- 장고(파이썬)프로젝트_2
장고마무리_어깨힘 풀고 파이썬 (0) | 2019.06.01 |
---|---|
장고(파이썬)프로젝트_6 (0) | 2019.05.30 |
장고(파이썬)프로젝트_4 (0) | 2019.05.28 |
장고(파이썬)프로젝트_3 (0) | 2019.05.27 |
장고(파이썬)프로젝트_2 (0) | 2019.05.26 |
댓글 영역