파이썬 웹프레임워크중 하나인 Django에 대해 배웠다..
settings.py: 프로젝트에 다양한 설정에 관한 내용이 들어있는 파일
urls.py: (URI를 설정하기위한 파일) 하나의 프로젝트에는 여러개의 urls 파일이 만들어지고 config 안의 urls파일은 최초로 탐색되는 기준 urls 파일 기준 urls 파일은 settings 파일에서 변경 가능
각 기능을 앱으로 만든다(게시판,로그인,결제 등등)
python manage.py startapp [앱이름]
App 구조는
1) admin.py: 관리자가 접속하면 보이는 화면, 내장돼 있음
2) apps.py: 앱을 프로젝트에 등록하는 기능을 함
3) models.py : 장고 DB 관련된 파일 / DB 사용계획, 정의, 연결 등의 다양한 설정들을 함
4) tests.py : 테스트를 위한 파이썬 파일
5) views.py : 실질적으로 파이썬 코드가 실행이 되는 부분, 클래스형, 함수형 모두 가능
6) urls.py : 폴더 안에 없지만, 추가로 생성해서 사용해야 하는 파일
7) migrations/ : 파이썬 모듈로 작동하는 폴더, 데이터 베이스 스키마 관련
test.py :요새는 tdd(참고자료)개발을 주로 해서 테스트코드를 짜서 하는방식을 위한 test.py
실질적인 기능은 3번과 5번으로 한다
urls.py > views.py 에 있는 함수나 클래스를 불러와서 사용함
models.py : ORM(참고자료) 를 위한 파일
앱폴더/views.py에 함수 추가
config/urls.py에 url 추가
path(‘사용자가 접속할 url’, 실행 할 함수)
Django 는 MVT구조로 V는 해봤고 T는 템플릿이라고 한다 이제 해보자
채워넣기위한 스킨이라고 생각하면 좋다. 일명 껍데기...
템플릿은 프로젝트에 templates 폴더를 만들고 그안에 html파일들을 만든다.
config/settimgs.py 에 템플릿 부분에 dirs 에 경로를 설정해주면 기곳이 템플릿의 기본 디렉토리로 되며
views.py 에서 템플릿에 있는 html파일을 리턴해주는데 상대경로이다.
그러면 특정URI를 호출하여 test.html을 불러보자
django 리턴값는 render 이며 리퀘스트와 템플릿 그리고 context로 반환된다.
클라이언트가 서버로 보내기 위한 설정
urls.py
path('input_url/', ex01.views.input_page),
views.py
def input_page(request):
return render(request, 'input.html')
templates
input.html
GET 방식으로 요청
<a href="/get_data?num1=10&num2=20">보내기</a> <br>
POST 방식으로 요청
<form action="/get_data/" method="post">
{% csrf_token %}
<input type="text" name="num1"> <br>
<input type="text" name="num2">
<button>보내기</button>
</form>
클라이언트가 서버로 보낸 데이터를 받기 위고 계산한 결과를 다시 클라이언트한테 보내주는 설정
urls.py
path('get_data/', ex01.views.get_data_func),
views.py
def get_data_func(request):
if request.method == "GET":
num1 = request.GET.get('num1', None)
num2 = request.GET.get('num2', None)
else :
num1 = request.POST.get('num1', None)
num2 = request.POST.get('num2', None)
sum = int(num1) + int(num2)
context = {"sum" : sum}
return render(request, 'result.html', context)
templates
result.html
잘 받았음
{{ sum }}
실습해본거
views.py
from django.shortcuts import render
from django.http import HttpResponse
import random # 남이 만든거 가져오기
def Pension(request):
lottery = [] # 번호를 여러개 저장할 변수 lottery
lottery.append("당신의 연금복권 번호는: ")
var2= 1
no = ""
if request.method == "GET" : no = request.GET.get("no")
if no == "" : no =1
no = int(no)
while var2 <= no :
var1 = 1 # var1에 1 저장
jo = random.randrange(1, 6) # num에 0~9중 랜덤한 숫자 하나 저장
lottery.append(str(jo)+"조")
while var1 < 7: # var1이 7보다 작은 동안 계속 반복
num = random.randrange(0, 10) # num에 0~9중 랜덤한 숫자 하나 저장
lottery.append(num) # lottery 리스트에 num를 추가
var1 = var1 + 1 # var1에 var1 + 1을 저장
var2 = var2 + 1
context = {'lottery' : lottery}
return render(request,'test.html', context)
def lotter(request):
lottery = []
lottery.append("당신의 로또 번호는: ")
var2= 1
no = ""
if request.method == "POST" : no = request.POST.get("no")
if no == "" : no =1
no = int(no)
print(no)
while var2 <= no :
var1 = 1
lottery.append(str(var2)+"번째 로또번호:")
while var1 < 7:
num = random.randrange(1, 46)
if num in lottery:
print(lottery)
else:
lottery.append(str(num)+",")
var1 = var1 + 1
var2 = var2 + 1
context = {'lottery' : lottery}
return render(request,'test.html', context)
def input_page(request):
return render(request,'input_page.html')
#### 실습 3
def test_page(request):
return render(request,'test_page.html')
def test_result(request):
print(request.method)
if request.method == "GET":
num1 = request.GET.get("num1")
num2 = request.GET.get("num2")
elif request.method == "POST":
num1 = request.POST.get("num1")
num2 = request.POST.get("num2")
sum = int(num1)+int(num2)
context = {'sum':sum}
return render(request, 'test_result.html',context)
# 실습
'''
POST 방식으로 서버에게
title와 contents를 전달
데이터를 받는 부분
클라이언트가 POST 방식으로 보낸 title과 contents를 바ㅣㄷ아서
print로 출력하고 read.html반환
read.html에는 title과 contents가 출력되어야함.
'''
def test_ing(request):
return render(request,'testing.html')
def test_ing_result(request):
if request.method == "POST":
title = request.POST.get("title")
contents = request.POST.get("contents")
print(title)
print(contents)
context = {'title': title , 'contents' : contents}
return render(request, 'read.html',context)
실습
1. 파이참에서 새로운 프로젝트 생성
web2
2. 장고 프로젝트
터미널에서
pip install django
django-admin startproject config .
python manage.py runserver 로 테스트 후 종료
3. 기능 추가(게시판 - 작성create, 조회read, 수정update, 삭제delete)
터미널에서
python manage.py startapp board
urls.py에 url과 함수 매핑 추가
board/create create함수
board/read read함수
board/update update함수
board/delete delete함수
board/list list함수
views.py 에 html을 반환하는 함수 추가
POST title,contents create함수 print board/result.html
GET num=1 read함수 print board/read.html
GET num=1 update함수 print board/result.html
POST title,contents update함수 print board/result.html
GET num=1 delete함수 print board/result.html
GET list함수 board/list.html
templates 밑에 html 추가
board/result.html 이건 result.html 파일입니다.
board/read.html 이건 read.html 파일입니다.
board/result.html 이건 result.html 파일입니다.
board/result.html 이건 result.html 파일입니다.
board/list.html 클릭해서 create, read, update, delete로 이동하는 버튼
from django.shortcuts import render
# Create your views here.
def create(request):
context = {}
title = request.POST.get('title')
content = request.POST.get('content')
print(title)
print(content)
context = { 'title' : title , 'content' : content}
return render(request, 'board/create.html', context)
def read(request):
num = request.GET.get('num')
print(num)
context = {'num' : num}
return render(request, 'board/read.html', context)
def update(request):
context = {}
if request.method =="GET":
num = request.GET.get('num')
print(num)
context = {'num': num ,'type_tile' : 'GET_update'}
else:
title = request.POST.get('title')
content = request.POST.get('content')
print(title)
print(content)
context = {'title': title,'content': content, 'type_tile': 'POST_update'}
return render(request, 'board/result.html', context)
def delete(request):
num = request.GET.get('num')
print(num)
context = {'num' : num}
return render(request, 'board/result.html', context)
def list(request):
context = {}
return render(request, 'board/list.html', context)
'''
게시판 만들기 프로젝트
board/create
board/read
board/update
board/delete
board/list
pip install django
django-admin startproject config .
py .\manage.py startapp board
py .\manage.py runserver
setting.py
TEMPLATES = [
'DIRS': [BASE_DIR/'templates'], 수정
urls.py에 url와 함수 매핑 추가
view.py에 html을 반환하는 함수 추가
templates밑에 html추가
board/create.html
board/read.html
board/update.html
board/delete.html
board/list.html
'''
참고자료
https://docs.djangoproject.com/ko/4.1/intro/tutorial01/
첫 번째 장고 앱 작성하기, part 1 | Django 문서 | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
http://clipsoft.co.kr/wp/blog/tddtest-driven-development-%EB%B0%A9%EB%B2%95%EB%A1%A0/
TDD(Test-Driven-Development) 방법론 - CLIPSOFT
작성자 : 강성웅 부장 TDD(Test-Driven-Development) 방법론에 대하여… - TDD가 무엇 일까? TDD란 Test Driven Development의 약자로 ‘테스트 주도 개발’이라고 한다. 테스트 주도 개발(TDD)은 설계 이후
clipsoft.co.kr
https://eun-jeong.tistory.com/31
[DB] ORM (Object Relational Mapping) 사용 이유, 장단점
ORM (Object Relational Mapping) 객체지향적 구조? 모든 데이터는 객체이며, 각 객체는 독립된 데이터와 독립된 함수를 지님 SQL 구조? 데이터는 테이블 단위로 관리되며 객체들을 조회하기 위한 명령어
eun-jeong.tistory.com