프로그래밍/python

Python (Django) 기초_db연결전까지

해아's 2022. 10. 6. 17:30

파이썬 웹프레임워크중 하나인 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


'''

 

 

 

 

 

 

 

 

참고자료

더보기
728x90
반응형