반응형

Template 란?

 

- 얻은 데이터들을 포함한 웹 HTML 파일입니다.

 

- App 폴더 밑에 "templates" 라는 폴더를 만들고 그 안에 파일(*.html)을 생성

 

- 이는 App이 1개이거나 동일 템플릿명이 없을때 사용할 수 있다.

 

 

 

 

이제 view로 가서 어떻게 데이터를 가공할 뿌려줄지 정의할 함수를 만들어줍니다.

 

형태는 다음과 같습니다.

 

def 함수명(request):
	return render(request, '템플릿파일', 'Optional로 dict type 데이터 전달')

 

템플릿에서 사용하는 것들

템플릿 변수

 

템플릿 변수는 {{  }} 의 형태로 만들어 값이 해당 위치인 {{ }} 안에서 치환되며, 변수에는 변수 혹은 객체의 속성을 가질 수 있습니다.

 Name : {{ name }}

 

템플릿 태그

 

if문의 경우

{% if 조건 %}
	소스코드
{% else %}
	소스코드
{% endif %}



for문의 경우


{% for d in data %}
	반복할 소스코드
{% endfor %}

템플릿 태그 사용 후, 해킹 방지를 위해서

 {% csrf_token %}

를 추가해주셔야 합니다

반응형

'Django' 카테고리의 다른 글

[Dango] DB 연결 및 Migrate  (0) 2020.05.21
[Django] Model  (0) 2020.05.20
[Django] View  (0) 2020.05.19
[Django] Application  (0) 2020.05.19
[Django] 프로젝트 설정 준비  (0) 2020.05.18
반응형

2020/05/19 - [Django] - [Django] Application

 

[Django] Application

각각의 역할에 대해 간단하게 정리한 내용은 아래 포스팅글 참고해주세요 2020/05/18 - [Django] - Django 란 ? Django 란 ? 각각의 .py 파일들이 하는 역할은 다음과 같습니다. urls.py - URL 요청을 처리, URL을.

lightchan.tistory.com

 

Django에서 View 역할 ?

 

- MVC 패턴의 웹 개발에서 Controller와 비슷한 역할을 합니다.

 

- View는 적절한 데이터를 모델로부터 얻어와 웹 페이지 결과를 도출할 수 있도록 컨트롤하는 역할을 한다.

 

- views.py 에 각 함수는 각각의 View를 정의해줍니다.

 

def MainFunc(request):
    return render(request, 'main.html')

 

해당 함수에서는 요청이 들어오면 'main.html'로 가도록 설정되어있습니다.

 

장고는 MTV( Model, Template, View ) 패턴을 따르고 있습니다.

 

Model

- 클래스를 만드는 역할이며, 데이터를 출력 시키는 모델을 생성합니다.

- 하나의 클래스는 DB에서 테이블 역할도 해줍니다.

 

Template

- HTML 파일로 화면에 출력해줄 웹 페이지를 해당 위치에 만들어줍니다.

 

View

- 메소드를 통하여 받으며, HTTPRequest를 받아 HTTPResponse로 응답해줍니다.

 

반응형

'Django' 카테고리의 다른 글

[Django] Model  (0) 2020.05.20
[Django] Template  (0) 2020.05.19
[Django] Application  (0) 2020.05.19
[Django] 프로젝트 설정 준비  (0) 2020.05.18
Django 란 ?  (0) 2020.05.18
반응형

각각의 역할에 대해 간단하게 정리한 내용은 아래 포스팅글 참고해주세요

2020/05/18 - [Django] - Django 란 ?

 

Django 란 ?

각각의 .py 파일들이 하는 역할은 다음과 같습니다. urls.py - URL 요청을 처리, URL을 기준으로 HTTP 요청을 알맞은 view 에 전달해주기 위해 사용합니다. 추가로, URL 매퍼(mapper)는 패턴(숫자 또는 문자)�

lightchan.tistory.com

Django에서 Project와 APP의 역할


1개의 프로젝트 안에 다양한 기능들이 있고, 기능들을 수행하는 여러개의 App으로 관리

 

 

- Django App 만드는 방법

python manage.py startapp 만들app이름

 

startapp을 통해 myapp 생성

- 만든 App을 사용 가능하게 하기

 

사용하여 '안녕하세요 Django App 사용해보기' 를 출력을 위해 views.py로 가서 다음과 같이 작성해줍니다.

 

views.py

from django.shortcuts import render

# Create your views here.
def MainFunc(request):
    return render(request, 'main.html')

그 다음 'main.html'이라는 웹에서 출력되어야하기 때문에 setting.py 와 urls.py 를 수정해줍니다.

 

 

settings.py

 

urls.py

 

 

여기서 import 추가 한 부분은 생성한 APP이름을 임포트 하고, 경로 설정은 자신이 설정한 'views.함수명'을 입력해주도록 합니다. 

 

이러한 과정이 끝나셨다면 프로젝트를 실행 후 웹에서 해당 주소를 입력후 접속하면 다음과 같이 정상 출력되는 것을 알 수 있습니다.

 

 

2020/05/19 - [Django] - [Django] View

 

[Django] View

2020/05/19 - [Django] - [Django] Application [Django] Application 각각의 역할에 대해 간단하게 정리한 내용은 아래 포스팅글 참고해주세요 2020/05/18 - [Django] - Django 란 ? Django 란 ? 각각의 .py 파일..

lightchan.tistory.com

 

반응형

'Django' 카테고리의 다른 글

[Django] Model  (0) 2020.05.20
[Django] Template  (0) 2020.05.19
[Django] View  (0) 2020.05.19
[Django] 프로젝트 설정 준비  (0) 2020.05.18
Django 란 ?  (0) 2020.05.18
반응형

이클립스로 설정을 하고 공부하기 때문에, 이클립스로 하실분들중에 준비가 되지 않으신 분들께서는 아래 글을 먼저 참고해주시기 바랍니다.

 

2020/05/06 - [python] - python - 특징 & 설치

 

python - 특징 & 설치

파이썬을 어디에 사용하면 좋을까 ? - 시스템 유틸리티 시스템 명령어를 사용할 수 있는 각종 도구를 갖추고 있기 때문에 이를 바탕으로 갖가지 시스템 유틸리티를 만들 수 있다. - GUI 화면에 또

lightchan.tistory.com

 

 

step 1

 

 

 

설정을 다 하신 후 Next -> Next -> 하시게되면 다음과 같은 창에서 Finish 를 클릭해줍니다.

 

 

 

 

프로젝트 생성을 마치시면 프로젝트 창에 다음과 같이 생성된 것을 확인하실 수 있습니다

 

 

프로젝트에서 기본적으로 사용할 명령어는 다음과 같습니다.

 

 

장고 APP 생성하는 방법

# 아나콘다와 같은 가상환경 또는 타 프롬포트를 사용할 경우

 

cd 해당 경로
python manage.py startapp 'APP이름'

ex)
cd django_practice100
python manage.py startapp myapp

 

또는 이클립스에서 사용 하는 방법

 

 

 

데이터베이스의 변경 사항 적용 방법

python manage.py migrate

 

또는 이클립스의 경우

 

 

 

장고 프로젝트 실행 방법

python manage.py runserver

 

이클립스에서 사용할 경우

 

 

반응형

'Django' 카테고리의 다른 글

[Django] Model  (0) 2020.05.20
[Django] Template  (0) 2020.05.19
[Django] View  (0) 2020.05.19
[Django] Application  (0) 2020.05.19
Django 란 ?  (0) 2020.05.18
반응형

 

각각의 .py 파일들이 하는 역할은 다음과 같습니다.

 

urls.py

- URL 요청을 처리, URL을 기준으로 HTTP 요청을 알맞은 view 에 전달해주기 위해 사용합니다.

추가로, URL 매퍼(mapper)는 패턴(숫자 또는 문자)을 맞추고 뷰 함수에 전달합니다.

 

urlpatterns = [
    path('', views.Main),
    path('list1', views.List1),
]

위 예시에서

path('', views.Main),

이 문장이 뜻하는바는 다음과 같습니다.

 

URL에 ' 해당 URL/ ' 와 같이 ' 해당 URL ' 다음 아무것도 찍히지 않으면,

 views.py 의 'Main' 함수를 실행한다는 의미입니다.

 

path('list1', views.List1),

그렇다면 위의 한줄은 URL에 '해당URL/' 다음에 'list1'이 찍히면,

views.py의 'List1'함수를 실행한다는 의미입니다.

 

views.py

- HTTP request(요청) 수신하고 response(응답) 반환 역할을합니다.

models.py을 통해 요청에 적절할 데이터를 가져옵니다.

 

def Main(request):
    return render(request, 'main.html')

def List1(request):
    makers = Maker.objects.all()
    return render(request, 'list1.html', {'makers':makers})

 

해당 소스코드를 살펴보겠습니다.

 

def Main(request):
    return render(request, 'main.html')

urls.py 에서 보셨듯이, path가 '' 경우 Main 함수로 와야한다고 하였습니다.

Main 함수는 main.html로 보내는 것을 알 수 있습니다.

 

def List1(request):
    makers = Maker.objects.all()
    return render(request, 'list1.html', {'makers':makers})

urls.py 에서 list1을 만난 경우 'List1' 함수를 통해 'list.html'에 model로 부터 알맞은 데이터를dict 형식으로 makers라는 sql 파일을 가져오는 것을 알 수 있습니다.

models.py

- APP의 구조 정의 및 DB 기록 추가,수정,삭제 기능을 하며, query를 제공하는 파이썬 객체 설정

 

class Maker(models.Model): 
    mname = models.CharField()
    tel = models.CharField()
    addr = models.CharField()

Maker라는 클래스에 models.Model을 상속받아, 파이썬 객체를 설정한 것을 알 수 있습니다.

 

Templates 폴더 내 html 파일

- 파일 구조 및 css과 같은 디자인을 담당하는 HTML 페이지, 내용을 보여주는데 필요한 텍스트 파일입니다.

 

{% for m in makers %}
<tr>
	<td>{{m.id}}</td>
	<td><a href="/list3?id={{m.id}}">{{m.mname}}</a></td>
	<td>{{m.tel}}</td>
	<td>{{m.addr}}</td>
</tr>
{% endfor %}

 

장고에서 사용하는 문법으로 HTML 페이지에 필요한 내용을 출력해주는 것을 볼 수 있습니다.

 

 

결론:

 

view는 HTML 파일을 이용하여 HTML 페이지를 작성하고 model에서 얻어온 데이터로 채웁니다.

 

반응형

'Django' 카테고리의 다른 글

[Django] Model  (0) 2020.05.20
[Django] Template  (0) 2020.05.19
[Django] View  (0) 2020.05.19
[Django] Application  (0) 2020.05.19
[Django] 프로젝트 설정 준비  (0) 2020.05.18
반응형

스레드란 ?

 

- 1개의 프로세스가 1개의 일을 하지만,

스레드를 이용하면 동시에 여러 일을 수행 가능하게 해줍니다.

 

- Light Weight Process라고도 합니다.

 

스레드의 특징 및 장점

# process와 달리 값은 process 내에서 자원을 메소드 / 함수 자원을 공유합니다.

# 멀티 스레드를 사용하면 멀티테스킹이 가능합니다.

# CPU의 유효시간을 최소화 시킬 수 있다.

# idle time을 최소화하면서 메소드 단위로 진행 할 경우 메모리 절약, 여러개 응용프로그램을 동시 조작 가능

 

스레드를 사용하기 위해선 다음과 같은 모듈을 호출합니다.

import threading

 

Ex 1) 스레드를 사용한 경우와 사용하지 않은 경우 차이점 알기

 

def run(id):
    for i in range(1,4):
        print('id : {} --> {}'.format(id, i))

# thread를 사용하지 않는 경우
# 순서대로 출력합니다. -> 일 3번찍고 둘 3번찍고
run('일')
run('둘')        
print()


# 출력 결과

id : 일 --> 1
id : 일 --> 2
id : 일 --> 3
id : 둘 --> 1
id : 둘 --> 2
id : 둘 --> 3

프로그램종료

우선, 스레드를 사용하지 않은 소스코드입니다.

 

for문이 1부터 3번을 반속 수행하는데 스레드를 사용 하지 않았기 때문에, 하나의 작업을 끝마친후 다음 작업을 진행하는 것을 알 수 있습니다.

 

이번에는 스레드를 사용한 경우

 

- 여기서 스레드를 사용할 경우 랜덤으로 실행되지만, 실행 순서를 정해줄 순 없다.

변수명 = threading.Thread(target=스레드 진행할 함수, args=(돌릴 인자))

변수명.start() : 스레드 시작시 사용

변수명.join() : 스레드가 종료되길 기다릴 경우

변수명.run() : 스레드의 동작을 정의

 

import threading

def run(id):
    for i in range(1,4):
        print('id : {} --> {}'.format(id, i))
        time.sleep(0.3) # 동시에 돌아가는것을 보여주기위해 작성

th1 = threading.Thread(target=run, args=('일'))
th2 = threading.Thread(target=run, args=('둘'))

th1.start()
th2.start()

th1.join()
th2.join()


# 출력 결과

id : 일 --> 1
id : 둘 --> 1
id : 일 --> 2
id : 둘 --> 2
id : 일 --> 3
id : 둘 --> 3
프로그램종료

 

th1 스레드 1번 th2 스레드 1번 이 과정을 반복하여 실행되는 결과를 볼 수 있습니다.

 

다음으로 join() 함수를 사용하지 않고, 출력한 경우의 출력 결과입니다.

# 출력 결과

id : 일 --> 1
id : 둘 --> 1
프로그램종료
id : 일 --> 2
id : 둘 --> 2
id : 둘 --> 3
id : 일 --> 3

 

차이점은 다음과 같습니다.

join 함수를 사용하지 않으면 스레드가 끝나길 기다리지 않고, print() 문의 '프로그램종료' 를 출력 후 다시 작동하는 것을 볼 수 있습니다.

반면 join() 함수를 사용한 경우 스레드 과정을 다 마친 후에 print() 문을 출력한 사실을 알 수 있습니다.

 

 

Ex 2) thread와 time 모듈을 이용하여 날짜 및 시간을 출력하기

import time

 

time 모듈의 localtime() 함수를 가지고 존재하는 속성값

tm_year

년도(4자리 작성)

tm_mon

월(1~12)

 

tm_mday

일(1~31)

tm_hour

시(0~23)

tm_min

분(0~59)

tm_sec

초(0~60)

tm_wday

각 요일을 숫자로 나타냅니다. (월요일= '0')

tm_yday

1월 1일부터 오늘까지 일 수 (1~365)

 

# 이 소스코드는 스레드를 사용하지 않았습니다.

now = time.localtime()

print('현재는{}년  {}월 {}일'.format(now.tm_year, now.tm_mon, now.tm_mday))
print('{}시 {}분  {}초'.format(now.tm_hour, now.tm_min, now.tm_sec))
print('오늘은  {} 요일 이고 올해  {} 번째 날'.format(now.tm_wday, now.tm_yday))


# 출력 결과

현재는2020년  5월 15일
17시 25분  53초
오늘은  4 요일 이고 올해  136 번째 날
프로그램  종료

 

thread를 사용하여 현재 진행중인 시간 1초마다 반복 출력

 

import time
import threading

def cal_show():
    now = time.localtime()
    print('현재 {} 년  {} 월 {} 일'.format(now.tm_year, now.tm_mon, now.tm_mday), end = ' ')
    print('{} 시  {} 분   {} 초'.format(now.tm_hour, now.tm_min, now.tm_sec))

def myRun():
    while True:
        now2 = time.localtime()
        if now2.tm_min == 34: break
        cal_show()
        time.sleep(1)
  
th = threading.Thread(target=myRun)
th.start()
th.join()

print('프로그램  종료')


# 출력 결과

현재 2020 년  5 월 15 일 17 시  28 분   6 초
현재 2020 년  5 월 15 일 17 시  28 분   7 초
현재 2020 년  5 월 15 일 17 시  28 분   8 초
현재 2020 년  5 월 15 일 17 시  28 분   9 초
현재 2020 년  5 월 15 일 17 시  28 분   10 초
현재 2020 년  5 월 15 일 17 시  28 분   11 초
현재 2020 년  5 월 15 일 17 시  28 분   12 초
현재 2020 년  5 월 15 일 17 시  28 분   13 초
현재 2020 년  5 월 15 일 17 시  28 분   14 초
현재 2020 년  5 월 15 일 17 시  28 분   15 초
현재 2020 년  5 월 15 일 17 시  28 분   16 초
현재 2020 년  5 월 15 일 17 시  28 분   17 초
현재 2020 년  5 월 15 일 17 시  28 분   18 초
현재 2020 년  5 월 15 일 17 시  28 분   19 초
현재 2020 년  5 월 15 일 17 시  28 분   20 초

 

 

반응형
반응형

예외처리란 ?

문법 또는 여러가지 이유로 오류가 발생하지만 오류를 무시하고 싶을 때 파이썬은 try, except를 사용해서 예외적으로 오류를 처리할 수 있게 해주는 것이 예외처리 입니다.

 

예외처리 형식은 다음과 같습니다.

try:
    실행할 소스코드
except [발생 오류[as 오류 메시지 변수]]:
    오류 일경우 출력 하고 싶다면 작성

예제 ZeroDivisionError - 0으로 나눌경우 예외처리

# 예외처리 try ~ except

def divide(a,b):
    return a / b


try:
    #c = divide(5,2)
    c = divide(5,0)

except ZeroDivisionError:
    print('두번째 숫자는 0을 빼고 주세요')


print('종료')


출력 결과

작업 후
두번째 숫자는 0을 주지 마시오
종료

 

소스코드에서 다음과 같은 함수를 주었습니다. 

a / b 의 계산을 하는데 0으로 나눌경우 ZeroDivisionError라는 예외처리를 하였습니다.

c = divide(5,0)을 작성할 경우 5 나누기 0을 의미하는 거이기 떄문에 위의 에러로 인한 예외처리가 발생하였습니다.

 

0이 아닌 divide(5,2)를 주면 출력 결과는 당연히 예외처리 부분을 제외한 나머지가 출력될 것입니다.

 

예외처리 IndexError - 참조 범위 오류

# 예외처리 try ~ except

def divide(a,b):
    return a / b

try:

    aa = [1,2]
    print(aa[0])

except IndexError as e:
    print('참조 범위 오류 : ', e)
    
except Exception as err:
    print('기타에러' + str(err)) 

print('종료')

 

이번에는 참조 범위를 벗어나면 예외처리를 해보겠습니다. 배열 aa는 1과 2를 저장하였고,

print 출력에서 0번째를 출력하도록 하였습니다. 

 

현재는 출력하면 1이 출력될 것입니다.

 

하지만 다음과 같이 바꿔주면

print(aa[3])

aa배열의 3번째는 없기때문에

다음과 같은 예외처리가 발생합니다.

 

finally

 

finally문은 try 수행 도중 예외 발생 여부에 상관없이 수행되는 문장입니다.

보통 close해야 할 때에 많이 사용합니다.

 

형태는 다음과 같습니다.

try:
	소스코드
    
except Exception as e:
    print('err : ' + e) 
    
finally:
    cursor.close()
    conn.close()
반응형

'python' 카테고리의 다른 글

python - Thread ( 스레드 ) (1)  (0) 2020.05.14
python - DataBase 연동 & SQL 작업  (0) 2020.05.13
python - OS & pickle  (0) 2020.05.11
python - 상속 (2)  (0) 2020.05.10
python - 상속  (0) 2020.05.10
반응형

외장함수중 하나인 OS 모듈이란 ?

- 환경 변수나 디렉터리, 파일 등의 OS 자원을 제어한다.

 

디렉터리의 위치를 돌려받고 싶은 경우 - os.getcwd()

import os

print(os.getcwd())



출력 결과
자신이 사용하고 있는 파이썬 저장 경로가 출력됩니다

 

파일 읽기 

 

파일을 불러올 txt 파일

 

ftest.txt

푸른하늘
은하수
하얀 쪽배에

 

 

import os

print(os.getcwd())

try:
    print(os.getcwd())

    print('파일 읽기')
    f1 = open(r'ftest.txt', mode='r', encoding='utf-8') # open 장치 열고
    print(f1.read())
    f1.close()
    
    
    
except Exception as e:
    print(e)
        
    
    
출력 결과

파일 읽기
푸른하늘
은하수
하얀 쪽배에

 

파일 저장

 

import os

print(os.getcwd())

try:
    print(os.getcwd())
    
    print('파일 저장 ')
    f2 = open('ftest2.txt', mode='w', encoding='utf-8')
    f2.write('kbs\n')
    f2.write('월요일 아침\n')
    f2.write('mbc11')
    f2.close()
    print('저장성공')
    
    
except Exception as e:
    print(e)
        
    
    
출력 결과

파일 저장 
저장성공

 

다음과 같이 출력이 되면서 해당 경로에

 

ftest2.txt 파일이 생성됩니다.

 

 

파일 추가

import os

print(os.getcwd())

try:
    print(os.getcwd())
print('파일 추가')
    f3 = open('ftest2.txt', mode='a', encoding='utf-8')
    f3.write('sbs\n')
    f3.write('홍길동\n')
    f3.close()
    print(' 추가 성공')
    
    
except Exception as e:
    print(e)
        
        
출력 결과

파일 추가
 추가 성공

 

위와 같은 출력 결과가 나타나면서 파일이 추가 된 것을 알 수 있습니다.

 

 

 

여러 종류의 객체 저장 및 읽는 방법은 pickle 외장 함수를 사용한다.

 

pickle 이란 ?

 

- 객체의 형태를 그대로 유지하고, 파일에 저장하고 읽기가 가능한 모듈이다.

 

import pickle
        
try:        
    dicdata = {'tom':'111-1111', '길동':'222-2222'}
    listdata = ['마우스','키보드']
    tupledata = (dicdata, listdata) # 복합 개체
    
    with open('hi.dat', 'wb') as ff3:
        pickle.dump(tupledata, ff3)
        pickle.dump(listdata, ff3)
        
    print('읽기')
    with open('hi.dat', 'rb') as ff4:
        a,b = pickle.load(ff4)
        print(a)
        print(b)
    
except Exception as err:
    print('에러 : ',err)
    
   
   
출력 결과

{'tom': '111-1111', '길동': '222-2222'}
['마우스', '키보드']

소스코드에서 딕셔너리 자료와 리스트 자료를 만들고 튜플 자료에 두개의 개체를 넣어서 복합 개체로 정의해주었습니다.

그리고 그 파일자료를 읽으면 어떤 자료형이든저장하고 불러올 수 있고, 위와 같은 결과가 나타납니다.납니다.

 

 

 

반응형

'python' 카테고리의 다른 글

python - DataBase 연동 & SQL 작업  (0) 2020.05.13
python - 예외처리  (0) 2020.05.11
python - 상속 (2)  (0) 2020.05.10
python - 상속  (0) 2020.05.10
python - 클래스  (0) 2020.05.10

+ Recent posts