Python 웹 프레임워크 중 하나인 Django에 대해서 공부한 내용을 정리
목차
Django

https://www.youtube.com/playlist?list=PLuHgQVnccGMDLp4GH-rgQhVKqqZawlNwG
Python Django Web Framework
www.youtube.com
1. Django
ⓐ. 설치
python3 -m pip install django
ⓑ. 프로젝트 시작
djago-admin startproject myproject .
점(.) : 현재 디렉토리에 프로젝트 시작

ⓒ. 서버 실행
python manage.py runserver 0:80
글작성자의 환경은 클라우드 환경이라 80번 포트를 열어서 웹으로 외부 사이트로 접속 가능하도록 설정
◆ 만약 localhost로 설정하고 싶으면 뒤에 포트번호를 생략

2. app 만들기
2.1. urls.py :Django로 작성된 사이트들의 목차
- 특정 기능을 수행하기 위해 접속하는 주소를 url이라고 하고 이를 설정
- url 설정을 이 파일 안에 기록

프로젝트에 해당하는 urls.py는 여러 앱들에 대한 목록을 가지고 있어서 사용자의 요청에 맞게 데이터를 뷰, 모델, db를 거쳐 요청에 맞는 응답을 제공해주는 것이 django의 기본적인 구조
2.2. 라우팅
- project에 있는 url를 통해 호출하는 정보를 app으로 위임
- app에서 해당 경로에 해당하는 값이 있다면 views.py에서 해당하는 함수를 호출
- 정의된 함수에 따라 http요청, json 반환 등을 실행해서 진행하는 것으로 마무리




→ /read/3asd라는 url로 요청 시 read <3asd>라는 http 응답을 주는 것으로 확인할 수 있음.

3. 사이트 Read
views.py 수정본
from django.shortcuts import render, HttpResponse
import random
topics = [
{'id':1, 'title':'routing', 'body':'Routing is ...'},
{'id':2, 'title':'view', 'body':'view is ...'},
{'id':3, 'title':'model', 'body':'model is ...'}
]
def HTMLTemplate(articleTag) :
global topics
ol = ''
for topic in topics:
ol += '<li><a href="/read/{}">{}</a></li>'.format(topic["id"], topic["title"])
return '''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Django</title>
</head>
<body>
<h1><a href="/">Django</a></h1>
<ol>
{}
</ol>
{}
</body>
</html>
'''.format(ol, articleTag)
# Create your views here.
def index(request):
article = '''<h2>Welcome</h2>
hello, Django'''
return HttpResponse(HTMLTemplate(article))
def read(request, id):
global topics
article = ''
for topic in topics:
if topic['id'] == int(id):
article = '<h2>{}</h2><p>{}</p>'.format(topic['title'], topic['body'])
break
if not article:
return HttpResponse('<h3>404 Not Found: Requested article does not exist</h3>', status=404)
else:
return HttpResponse(HTMLTemplate(article))
- HTMLTemplate() 함수 정의
- HTML 기본적인 탬플릿 함수를 제공해서 공통적으로 사용되는 템플릿 제공
- index() 함수 정의
- index로 들어오는 경우 어떤 형식을 보여줄 지에 대한 정의
- read() 함수 정의
- 각 read/1 여러 ur로 들어오는 경우 해당하는 url에 맞게 제공
- 이 때 해당하지 않는 url로 들어오는 경우 404 not found로 설정
- 또한 문자열로 들어오는 경우에도 에러날 거같은데 일단 수정 보류
→ views.py로 들어올때 어떻게 들어오는지에 대한 정의를 해줌으로써 라우팅해주는 결과다.
외부 요청 시 사이트 Create
def create(request):
article = '''
<form action="/create" method="post">
<p><input type="text" name="title" placeholder="title"></p>
<p><textarea name="body" placeholder="body"></textarea></p>
<p><input type="submit"></p>
</form>
'''
return HttpResponse(HTMLTemplate(article))
- /create 로 들어오는 경우
- title과 body를 입력하면 post 방식으로 전달해주는 방향
def create(request):
global nextId
if request.method == 'GET':
article='''
<form action="/create/" method="post">
<p><input type="text" name="title" placeholder="title"></p>
<p><textarea name="body" placeholder="body"></textarea></p>
<p><input type="submit"></p>
'''
return HttpResponse(HTMLTemplate(article))
elif request.method == 'POST':
# 요청된 데이터를 받는다
title = request.POST.get('title', None)
body = request.POST.get('body', None)
newTopic={"id":nextId, "title":title, "body":body}
topics.append(newTopic)
url= '/read/'+str(nextId)
nextId = nextId + 1
return redirect(url)
- title과 body라는 요청된 데이터를 받으면 newTopic으로 받고 topics 리스트에 append
- 그 후 id +1
- redirect로 해당 url로 연
마무리
여러 함수들로 서로 라우팅해주면서 연결해주다보니 그거에 대한 헷갈리면서 놓치는 경우가 다수 발생
이에 대해서 유의하며 django를 익힐 것이 필요하다고 판단!
'IT > Python' 카테고리의 다른 글
| [Python] 인공 신경 구현 실습하면서 느낀 주의점. (0) | 2023.05.03 |
|---|---|
| [데이터 시각화] Python-라이브러리 Seaborn 기초 내용 정리 (0) | 2023.03.31 |
| [데이터 시각화] Python-라이브러리 matplotlib 기초 내용 정리 (0) | 2023.03.31 |
| [데이터 처리] Python-pandas 기초 공부 내용 정리(연산, 데이터프레임 구조,통계 추출, 데이터 입출력) (0) | 2023.03.31 |
| [데이터 처리] Python pandas-기초 공부 내용 정리 (자료구조) (0) | 2023.03.31 |
댓글