Form


역할

  • 폼 클래스의 데이터를 렌더링하여 입력폼 HTML 생성
  • 입력폼 값에 대한 유효성 검증 (Validation) 및 값 변환
  • 검증을 통과한 값들을 dict 형태로 제공 ›› form.cleaned_data 으로 제공

+ CSRF (Cross Site Request Forgery)

데이터를 변경하는 HTTP 폼은 언제타 CSRF 보안 (사이트 간 위조 요청 방지) 을 이용하자. 개발 단계에서 잊어버리고 이용하지 않았을 경우 보안 위험성이 있을 수 있다는 친절한 안내 메시지를 보여주기도 한다.
django-rest-framework 같은 API 프레임워크에서는 이러한 처리를 자동으로 다 해준다.

# forms.py
...

<form action="" method="post>
	{% csrf_token %}
    ...
</form>



ModelForm


보통 Model 에 맞춰서 Form을 구성하기 때문에, Model이 바뀌면 Form도 그에 따라 의존되는 코드들을 변갱해 줘야하므로 유지보수가 귀찮다. 그러나 ModelForm을 사용하면 Model에서 사용할 Field만 정의하면 그 정보를 가져와 formField 를 자동으로 구성해주기 때문에 편하다.

특징

  • 장고 Form 상속 (forms.ModelForm)
  • 지정된 모델로부터 필드정보를 읽어들여, 자동으로 폼 필드를 세팅
  • 내부적으로 Model Instance 유지
  • 유효성 검증에 통과한 값들로 지정 Model Instance로의 저장(save) 지원

 

+ Form 과 ModelForm 의 차이

  • Form : 직접 필드 정의, 위젯 설정이 필요
  • ModelForm : 지정된 모델로부터 필드정보를 읽어들여, 자동으로 폼 필드를 세팅
# forms.py
from django import forms

# Form
class PostForm(forms.Form):
	title = forms.CharField()
	content = forms.CharField(widget=form.Textarea)
    
# ModelForm 
from .models import Post

class PostForm(forms.ModelForm):
	class Meta:
		model = Post
		fields = '__all__'	# 모든 필드를 불러온다.

 

+ form.save(commit=False)

🚀 (Django) The save() method

모델폼 데이터는 폼에 먼저 저장된 이후 모델 인스턴스에 저장된다.
ModelForm에서 폼 데이터는 두 가지 각기 다른 단계를 통해 저장된다.

  • 첫 번째로 폼 데이터가 폼 인스턴스에 저장된다.
  • 그 다음에 폼 데이터가 모델 인스턴스에 저장된다.

ModelForm 클래스에는 form.save(self, commit=True) 메서드가 구현되어 있는데, DB 저장 여부를 commit flag를 통해서 결정한다.

commit=False 를 사용하면 함수 호출을 지연시켜 DB에 바로 저장하지 않는다(임시 저장 상태).

DB에 실제 데이터를 저장하기 전에 따로 일련의 작업을 하고 싶을 때 사용하기 유용하다. form.save() 메서드에 의해 적용되기 전까지는 ModelForm이 모델 인스턴스로 저장되지 않는 분리된 특징 자체를 장점으로 이용할 수 있는 것이다.

# views.py
from django.shortcuts import render, redirect
from .models import Post
from .forms import PostForm

def post_new(request):
	if request.method == 'POST':
		form = PostForm(request.POST, request.FILES)
		if form.is_valid():
   			# 필수필드인 ip필드 값을 아직 채우지 않았으므로 
   			# DB 세이브를 지연시켜 오류를 방지한다.
			post = form.save(commit=False)  
			post.ip = request.META['REMOTE_ADDR']	# 유저로부터 ip 필드를 입력받음.
 			post.save()
			return redirect('/dojo/')
	else:
		form = PostForm()
 	return render(request, 'dojo/post_form.html', {'form': form,})

+ form.cleaned_data 사용하기

🚀 (Django) Accessing “clean” data

form.is_valid() 를 통해서 검증을 통화한 값들은 dict 형태로 form.cleaned_data 변수명으로 제공된다.

 폼의 입력값을 얻고 싶은 경우는form.cleaned_data 로 접근하도록 하자.

➔ Avoid code : request.POST[] 로 접근

# views.py
...
form = CommentForm(request.POST)

if form.is_valid():
	# request.POST 데이터는 폼 인스턴스 초기 데이터를 가져 오므로 	
	# `form.clean()` 메서드를 통해 변경될 가능성이 있어
	# 나쁜 접근이다.
	message = request.POST['message']
	comment = Comment(message=message)
	comment.save()
return redirect(post)

➔ Good code : from.cleaned_data[] 로 접근

# views.py
...
form = CommentForm(request.POST)

if form.is_valid():
	# 폼 인스턴스 내에서 clean함수를 통해 변환되었을 수도 있는 데이터를 가져오므로
	# 좋은 접근이다.
	message = form.cleaned_data['message']
	comment = Comment(message=message)
	comment.save()
return redirect(post)



Form Validation


장고 폼은 파이썬 딕셔너리의 유효성을 검사하는 최상의 도구이다.
유효성 검사를 수행하는데는 2가지의 방법이 있다.

1. validator 함수를 통한 유효성 검사

  • 값이 원하는 조건에 맞지 않을 때 ValidationError 예외를 발생시킨다.
  • 리턴값은 사용되지 않는다.
  • 모델필드 또는 폼필드 정의 시에 지정한다.
  • ⚡ 사용자 정의 Validator 보다 빌트인 Validator 사용을 추천한다.

2. Form 클래스 내의 clean , clean_ 멤버함수를 통한 유효성 검사 및 값 변경

  • 값이 원하는 조건에 맞지 않을 때 ValidationError 예외를 발생시킨다.
  • 리턴값을 통해 값을 반환한다.
  • ⚡ 원하는 포맷으로 값 변경을 원할 때 사용

 

+ 유효성 검사 호출 로직

유효성 검사는 form.is_valid() 가 호출되는 시점에서 수행된다.
보통 from.is_valid() 가 호출될 때 다음과 같은 절차가 진행된다.

# views.py
def post_new(request):
	if request.method == 'POST':
		form = PostForm(request.POST, request:FILES)
		if form.is_valid():		# 유효성 검사 수행
			form.save()
			# SUCESS 후 처리
	else:
    	form = PostForm()
	# ...
  1. 폼이 데이터를 받으면 form.is_valid()  form.full_clean() 메서드를 호출한다.
  2. form.full_clean() 은 폼 필드들과 각각의 필드 유효성을 하나하나 검사하면서 다음과 같은 유효성 검사를 수행한다.
    ㅤ- 필드에 들어온 데이터에 대해 파이썬 형식으로 변환하거나, 변환할 때 문제가 생기면 ValidationError를 일으킨다.
    ㅤ- 커스텀 유효성 검사기(validator)를 포함한 각 필드에 특별한 유효성을 검사한다. 문제가 있을 때 ValidationError를 일으킨다.
    ㅤ- 폼에 clean_() 메서드가 있으면 이를 실행한다.

  3. form.full_clean()  form.clean() 메서드를 실행한다.
  4. ModelForm 인스턴스의 경우 form.post_clean() 이 다음 작업을 한다.
    ㅤ- form.is_valid() 가 True나 False로 설정되어 있는 것과 관계없이 ModelForm의 데이터를 모델 인스턴스로 설정한다.
    ㅤ- 모델의 clean() 메서드를 호출한다.

 

+ form 필드 별로 유효성 검사 함수 추가 적용

(1) forms.py 에 적용

›› form 에서는 리턴값을 따로 처리하지 않고, forms.ValidationError 예외 발생 유무로 처리

# forms.py
import re
from django import forms
from django.forms import ValidationError
  
def phone_number_validator(value):
	if not re.match(r'^010[1-9]\d{7}$'):
		raise forms.ValidationError('3글자 이상 입력하시오.')
                      
class ProfileForm(forms.Form):
	phone_number = forms.CharField(validators=[phone_number_validator])

(2) models.py 에 적용

›› model 클래스 정의 시에 validators 옵션 적용. (권장!! 로직이 분산되지 않는다.)
›› 가급적이면 모든 validators 는 모델에 정의하고, ModelForm 을 통해 모델의 validators 정보를 가져오도록 하자.

# models.py
import re
from django import forms
from django import models
  
def phone_number_validator(value):
	if not re.match(r'^010[1-9]\d{7}$'):
		raise forms.ValidationError('3글자 이상 입력하시오.')
                      
class Profile(forms.Model):
	phone_number = forms.CharField(validators=[phone_number_validator]) 
# forms.py 
from django import forms
from .models import Profile
  
class ProfileForm(forms.ModelForm):
	class Meta:
		model = Profile
  		fields = '__all__'

'Django' 카테고리의 다른 글

장고 심화  (0) 2024.09.02
Django_template  (0) 2024.08.27
Django_MTV Pattern  (0) 2024.08.23
Django App  (0) 2024.08.23
장고_개발 환경 구성 및, 장고 설치  (0) 2024.08.20

 

HTTP

 

 

HTTP Status Code

: HTTP 요청에 대해 성공 여부를 나타내는 코드값

 

  • 1XX : Informational Response
  • 2XX : Successful Response
  • 3XX : Redirection Message
  • 4XX : Client Error Response
  • 5XX : Server Error Response
200 OK 성공 - 에러없이 요청이 성공.
201 Created 요청이 성공했고 새로운 데이터가 만들어짐.
202 Accepted 요청은 정상적이나 아직 처리가 완료되지 않음.
204 No Content 요청은 성공적으로 처리했으나 전송할 데이터(Response Body)가 없음.
400 Bad Request 클라이언트의 요청이 잘못되었음.
서버는 해당 요청을 처리하지 않음.
401 Unauthorized 클라이언트가 인증이 되지 않았거나 인증정보가 유효하지 않음.
403 Forbidden 서버에서 요청을 이해했으나 금지된 요청.
요청에 대한 자원이 있으나 수행할 권한이 없음.
404 Not Found 요청한 자원을 찾을 수 없음.
500 Internal Server Error
요청에 대해 서버가 수행하지 못하는 상황.
서버가 동작하지 않는다는 포괄적인 의미가 내포됨.
503 Service Unavailable
서버가 요청을 처리할 준비가 되지 않았음.
서버가 다운되었거나 일시적으로 중단된 상태.

 

 

 

URI (Uniform Resource Identifier)

  • 통합 자원 식별자입니다.
  • 인터넷의 자원을 식별할 수 있는 유일한 문자열입니다.
  • 하위 개념 - URN, URL

⇒ 일반적으로 URN을 사용하는 비중이 낮기 때문에 URI와 URL을 같은 의미로 사용하기도 해요!

 

 

 

URL(Uniform Resource Locator)

  • **통합 자원 위치(Location)**를 의미합니다.
  • 웹상에 자원이 어디 있는지 나타내기 위한 문자열입니다.
  • → 어디에서 어떻게 리소스를 가져와야 하는지 나타내는 문자열이에요!
  • 흔히 말하는 웹 주소, 링크입니다.

 

 

URI의 구조

https://www.aidenlim.dev:80/path/to/resource/?key=value#docs

 

  • https://
    • Scheme(Protocol)
      • 브라우저가 사용하는 프로토콜입니다.
      • http, https, ftp, file, …
  • www.aidenlim.dev
    • Host(Domain name)
      • 요청을 처리하는 웹 서버입니다.
      • IP 주소를 바로 사용할 수 있지만 도메인 이름을 받아서 사용하는 것이 일반적입니다.
  • :80
    • Port
      • 리소스에 접근할 때 사용되는 일종의 문(게이트)입니다.
      • HTTP: 80 / HTTPS: 443이 표준 포트입니다.
  • /path/to/resource/
    • Path
      • 웹 서버에서의 리소스 경로입니다.
      • 웹 초기에는 실제 물리적인 위치를 나타냈으나 현재는 추상화된 형태를 표현합니다.
  • ?key=value
    • Query(Identifier)
      • 웹 서버에 제공하는 추가적인 변수입니다.
      • &로 구분되는 Key=Value 형태의 데이터입니다.
  • #docs
    • Fragment(Anchor)
      • 해당 자원 안에서의 특정 위치 (북마크)를 나타냅니다.
      • HTML 문서의 특정 부분을 보여주기 위한 방법입니다.

 

 

'Django' 카테고리의 다른 글

장고 폼(Form) / 모델폼(ModelForm)  (1) 2024.09.12
Django_template  (0) 2024.08.27
Django_MTV Pattern  (0) 2024.08.23
Django App  (0) 2024.08.23
장고_개발 환경 구성 및, 장고 설치  (0) 2024.08.20

 

요청이 들어오면 장고는 어떻게 처리할까?

요청(request)  ➡️  URL(urls.py) 처리  ➡️  View(views.py) 처리  ➡️  Template(html) 처리  ➡️  응답(Response) 

 

: 장고가 요청을 받고 응답하는 과정을 이해하여, 각 도구의 사용법을 익히면서 작동 원리를 공부해야 함.

 

 


URL

프로젝트를 처음 생성하면 urls.py이 있음

 

 

urls.py란?

: 어떤 url패턴으로 들어오면, 지정된 뷰로 보내는 곳 (경로를 설정해줌)

 

💡Django에서 특정URL에 대한 요청을 처리할 뷰(View)와 연결할 때 주로 사용하는 함수는 무엇인가요?
==> path()

💡경로를 설정하기 위해선 urlpatterns가 반드시 필요하며, urlpatterns 내부에 정의해주면 된다.

💡 "index/" 처럼 반드시 경로 뒤에 " / "를 붙여준다.
이를 Trailing Slash 이라고 함.

💡 "from articles import views" 는 articles의 views 모듈을 사용하겠다는 뜻.

 

 

 

 


View

생성한 앱 내에 views.py 가 있음.

 


view를 작성하는 방법(FBV, CBV)

FBV(Function Based View = 함수형 뷰) CBV(Class Based View = 클래스형 뷰)
모든 흐름을 보기 위해서, 간단한 로직 혹은 상속이 필요하지 않는 로직일 경우 함수형 뷰가 간편하다. 상속과 같은 것을 이용할 수 있기 때문에 만들어진 코드를
상속해서 사용한다면 작성해야하는 코드가 줄어든다

 

 

 

함수형 뷰로 작성

  • URL에서 보내진 요청을 처리하는 index 함수 작성
  • HTTP 요청을 받고, HTTP 응답을 반환
위의 코드처럼, HTML 코드를 View에 작성하는 것보다 HTML 파일을 따로 만들어, 화면에 보여줄 코드는 따로 정리하는 게 좋을 것 같음.

 

 

 


Template

: Django에서의 Template은 데이터를 보여주는 로직을 작성하는 부분 (화면 상의 로직을 처리함)

 

뷰에서 템플릿 파일을 반환하기 위해 사용하는 함수는?

render (from django.shortcuts import render)

render 란?
: 주어진 template을 context와 결합해서 렌더링을 거친 후 완성된 html을 HttpResponse로 돌려주는 함수

render( reqeust, template_name, context ) 일단 이것만 기억하기!

 

 

index.html

html
<body> 태그에 내용을 작성한다.

view 파일이 있는 앱 내에 "templates" 폴더를 만들고, html파일만 해당 폴더 안에서 관리한다.
이때, templates 폴더(복수로!) 안에 "앱 이름"의 폴더를 또 생성한 후, html파일을 관리한다. (햄버거 구조)

ex. articles/templates/articles/index.html

주의할 점 : 장고가 template파일을 찾기 위해선 폴더명이 정확히 "templates"로 작성해야 됨.
( Django는 setting.py의 TEMPLATES의 APP_DIRS를 보고 파일을 찾)

Tip)
VScode에서는 !를 입력하고 Tab 버튼을 누르면 기본적인 HTML파일 구조가 생성되는 자동완성 지원

 

 

 


Django Template System

 

1. Django Template Language (DTL)

: Django Template에서 사용하는 문법

 

DTL 문법

변수, Variable

{{ variable }}

 

  • view의 context로 넘긴 데이터를 접근할 수 있음
  • " . " 을 사용하여 변수의 속성값에 접근 가능
  • render()의 세번째 인자인 context에서, dict형태로 넘겨진 데이터 중 key 값이 template에서 사용 가능한 변수가 됨

 

 

필터, Filters

{{ variable|filter }}

ex. frist name을 소문자로 변경하고 싶다면?
{{ first_name|lower }}
  • 변수에 어떠한 작업을 추가적으로 더해 수정하고 싶을때 사용
  • 약 60개의 built-in template filter가 제공되며 일부 필터는 인자를 받기도 함.

 

 

태그, Tags

{% tag %}

ex. if조건문 태그를 쓴다면?
{% if ~ %}
{% endif %}
  • 반복문 또는 논리, 조건문을 수행하여 제어 흐름을 만들거나 특수한 기능을 수행
  • 일부는 시작 태그와 종료 태그가 있음

 

 

주석, Comments

{# 한 줄 주석 #}
{% comment %}
여러줄 주석
{% endcomment %}

 

 

 


2. Django template 작성해보기

 

context 넘기기 (views.py에서 render 함수 사용)

: template에서 사용할 데이터를 view에서 context에 담아 넘기기

 

context

 

 

Django 내장 템플릿 필터 사용하기

: 장고 공식문서를 참고하여 적절한 필터를 사용해보자

{% for %}
사용하여 반복문 만들 수 있음.
context에 key 값이 반복가능할 때, for문 태그를 사용하여 value를 반환한다.
이때 파이썬처럼 인덱싱 처리를 할 수 있으나 표기법이 다르니 주의할 것.

{{ key.0 }} , {{ key.1 }} 과 같이 [0]이 아니라 .0 으로 표기한다.

파이썬 문법들이 장고에도 있지만, 표기가 다를 수 있기 때문에 주의할 것.

 

 

length

: 값의 길이를 반환

{{ value|length }}

# abcd or ['a','b','c','d'] -> 4

 

join

: python의 join과 같이 문자열로 합침

{{ value|join:" // " }}

# ['a','b','c'] -> "a // b // c"

 

lower (upper (대문자 변환)도 있음)

: 문자열을 소문자로 변환

{{ value|lower }}

# Totally LOVING this Album! -> totally loving this album!

 

slice

: 리스트의 일부를 되돌려줌. 파이썬과 비슷하게 작동

{{ some_list|slice:":2" }}

['a', 'b', 'c'] -> ['a', 'b']

 

time

: 주어진 형식에 따라 시간을 포맷함.

{{ value|time:"H:i" }}

# datetime.datetime.now() -> "01:23"

 

timesince

: 해당 날짜 이후의 시간으로 날짜를 형식화

 {{ blog_date|timesince:comment_date }}

# blog_date=2006/6/1 comment_date=2006/6/1 08:00 -> 08:00

 

title

: 단어를 대문자로 시작하고 나머지문자를 소문자로 변환.

{{ value|title }}

# my FIRST post = My First Post

 

 

 

 


3. Template Inheritance 

: 코드의 재사용성에 초점이 맞춰져 있으며, 상위 템플릿에 공통이 될 부분을 정의하고, 하위 템플릿에서 달라질 부분을 블록(Block)으로 만드는 Skeleton 형태

 

 

base.html 생성

: html에서 <body> 부분 외에는 거의 다 내용이 중복됨. 즉 base.html 을 생성하여 중복되는 코드는 상속받으면 훨씬 편리하게 작업할 수 있음. (부트스트랩 작업하기에도 더 좋음!)

 

 

하위 템플릿에서 상속처리

extends 태그를 이용해서 상속할 상위 템플릿 지정
block 태그를 이용해서 달라진 부분만 명시

{% block block_name %} {% endblock block_name %}
: 상위 템플릿에서 하위 템플릿 마다 달라질 부분을 정의

{% extends 'template_name' %}
- 하위 템플릿에서 상위 템플릿을 상속해서 확장한다는 것
- 템플릿의 가장 최상단에 위치해야함
- 다중상속을 지원하지 않음

 

 

커스템 템플릿 경로 추가하기

BASE_DIR 이란?
- 프로젝트 최상단 경로값

프로젝트 최상단 경로에 templates 디렉토리를 생성한 후, base.html을 해당 폴더 안에 둔다.
장고가 base.html 템플릿을 먼저 읽은 후, 앱내에 있는 templates를 읽고 템플릿을 반환한다.

'Django' 카테고리의 다른 글

장고 폼(Form) / 모델폼(ModelForm)  (1) 2024.09.12
장고 심화  (0) 2024.09.02
Django_MTV Pattern  (0) 2024.08.23
Django App  (0) 2024.08.23
장고_개발 환경 구성 및, 장고 설치  (0) 2024.08.20

디자인 패턴

 

소프트웨어에 디자인 패턴이 왜 필요해?

: 다양한 응용 소프트웨어를 만들다보니 공통적인 구조와 문제가 발생. 이때, 구조에도 공통점이 있고, 문제에도 공통점이 존재.

 

==>  패턴이 보임.

 

 

소프트웨어의 디자인 패턴

- 특정 구조에 대한 설계를 빠르게 할 수 있습니다.
- 공통적으로 발생하는 문제에 대해 재사용 가능한 해결 방법을 제시할 수 있습니다.
- 즉, 프로그래머가 시스템을 디자인할 때 발생하는 공통된 문제를 해결하면서 진행할 수 있는 형식화된 관행입니다.

 

 

 

 

Django 디자인 패턴

 

MVC 디자인 패턴

  • Model - View - Controller 이렇게 3파트로 나누어져있습니다.
  • 데이터와 논리 구조를 제어하는 설계로 널리 사용되는 디자인 패턴 중 하나입니다.
  • → 하나의 큰 소프트웨어를 나눠서 생각해보기 위해서 등장한 패턴이에요!

 

역할

  • Model : 데이터와 관련된 로직을 관리
  • View : 레이아웃과 관련된 화면을 처리
  • Controller : Model과 View를 연결하는 로직을 처리

 

MTV 패턴은 MVC 패턴을 살짝 변형한 것
MVC MTV
Model Model
View Template
Controller View

 

 

Django의 MTV Pattern

MTV Pattern

  • Model
    • MVC에서의 Model입니다.
    • 데이터와 관련된 로직을 처리합니다.
    • → 데이터 구조 정의, 데이터베이스 기록 관리해요.
  • Template
    • MVC에서의 View입니다.
    • 레이아웃과 화면상의 로직을 처리
    • →즉, UI와 레이아웃을 다루어요.
  • View
    • MVC에서의 Controller입니다.
    • 메인 비지니스 로직을 담당합니다.
    • 클라이언트의 요청에 대해 처리를 분기하는 역할을 합니다.
      • DB도 조회하고 외부로 요청하기도 해요.
      • 응답을 만들어서 클라이언트에게 전달해요.

'Django' 카테고리의 다른 글

장고 폼(Form) / 모델폼(ModelForm)  (1) 2024.09.12
장고 심화  (0) 2024.09.02
Django_template  (0) 2024.08.27
Django App  (0) 2024.08.23
장고_개발 환경 구성 및, 장고 설치  (0) 2024.08.20

 

Djano App

: 내가 생각하는 하나의 기능 덩어리

하나의 프로젝트는 여러 개의 앱으로 구성될 수 있음.

 

프로젝트와 앱

프로젝트(Project) : 어플리케이션의 집합체
앱(App) : 각각의 기능 단위 모듈

 

 

 

 

App 생성하기

python manage.py startapp <앱 이름>

ex) python manage.py startapp articles 
앱이름은 복수형으로 짓는 것을 권장

 

 

App 등록하기

[setting.py]
INSTALLED_APPS 에 생성한 앱이름을 등록하면 됨. 

Trailing commas
마지막에 콤마 까먹지 않도록 주의!

 

 

App 살펴보기

admin.py 관리자용 페이지 관련 설정
apps.py 앱 관련 정보 설정
models.py DB관련 데이터 정의 파일
tests.py 테스트 관련 파일
views.py 요청을 처리하고 처리한 결과를 반환하는 파일

 

 

 

 


클라이언트 - 서버 구조

 

 

클라이언트(Client)

  • 인터넷에 연결된 장치 특히, 웹 브라우저를 말합니다.
  • → 서비스를 요청하는 주체 (사용자)

 

 

서버(Server)

  • 자원(Resource)을 가지고 있는 컴퓨터입니다.
  • 요청을 처리하고 응답하는 주체입니다.

 

  1. 구글.html 파일을 요청함
  2. 구글 서버가 요청을 받아서 구글.html 파일을 우리 컴퓨터에게 전달함
  3. 우리 컴퓨터의 웹 브라우저가 구글.html 파일을 해석해서 이쁘게 보여줌

→ 구글 서버 (Server) - 웹 브라우저 (Client)

 

 

 


요청과 응답

 

 

웹 브라우저란?

  • 인터넷에서 내가 원하는 페이지를 찾아서 보여주고 하이퍼링크를 통해 다른 페이지로이동할 수 있도록 도와주는 프로그램입니다.
  • HTML 파일을 우리가 보는 이쁜 화면으로 바꿔주는 프로그램입니다. (렌더링, Rendering)

 

 

웹 페이지(Web Page)란?

  • 우리가 보는 모든 화면 하나하나가 바로 웹 페이지입니다.

 


정적 웹페이지와 동적 웹페이지

 

정적 웹페이지(Static Web Page)

  • 작성한 상태를 그대로 제공하는 웹 페이지입니다.
  • 모든 상황에서 동일한 내용을 전달합니다.
  • 우리가 작성한 HTML을 말합니다.

동적 웹페이지(Dynamic Web Page)

  • 요청에 따라 보여주는 모습이 달라지는(수정되어) 웹 페이지입니다.
  • 포털사이트에 A유저가 로그인했을 때와 B 유저가 로그인했을 때의 화면은 다릅니다. (받은 메일의 갯수, 가입한 카페…)
  • 요청을 받아서 적절한 응답을 만들어주는 주체가 필요합니다.
  • ⇒ Django !

 

 


프론트엔드와 백엔드

 

🖥️ 백엔드 개발

  • 보이지 않는 서버 측의 작업을 담당합니다.
  • 데이터베이스와의 상호작용, 비즈니스 로직 처리, 보안, 사용자 인증 등을 처리합니다.
  • 사용자가 요청한 데이터를 처리하고 그에 따른 결과를 생성합니다.
  • 주로 서버 사이드 언어 및 프레임워크를 사용하여 개발되며, 데이터베이스와의 통신을 담당합니다.
  • 주요 목표는 안정성, 보안성, 성능을 유지하면서 프론트엔드와의 원활한 데이터 교환을 지원하는 것입니다.

 

 

🖥️ 프론트엔드 개발

  • 디자이너가 만든 웹 페이지를 기반으로 더 동적이고 상호작용적인 웹 애플리케이션을 개발합니다.
  • 주로 JavaScript 프레임워크나 라이브러리를 사용하여 프론트엔드 기능을 개발하고, 데이터 처리와 상태 관리를 담당합니다.
  • 백엔드와의 통신을 위한 API 요청 및 응답 처리, 데이터의 가공 및 표시, 사용자 입력에 대한 반응 등을 담당합니다.
  • 주로 웹 애플리케이션의 비즈니스 로직과 상호작용적인 요소를 다루며, UI 컴포넌트의 상태 관리와 라우팅 등을 수행합니다.
  • 프론트엔드 개발자는 보다 복잡하고 동적인 웹 애플리케이션을 만들기 위해 퍼블리셔와 협업하며, 웹 애플리케이션의 전체적인 아키텍처와 성능을 고려합니다.

 

 


요청과 응답

 

📚 요청(Request)

  • 클라이언트(웹 브라우저, 모바일 앱 등)가 서버에게 특정한 작업을 요청합니다.
  • 클라이언트의 정보, 요청의 형식, 인증 정보 등을 포함합니다.
  • 데이터를 포함하며, JSON이나 HTML 폼 데이터와 같은 형식으로 전달합니다.
  • 클라이언트가 요청하는 것이 무엇인지 URL을 보면 파악할 수 있습니다.

 

 

📚 응답(Response)

  • 서버가 클라이언트의 요청을 받고 처리한 후에 클라이언트에게 결과를 전송합니다.
  • 결과에는 여러 가지 부가적인 정보를 포함합니다.
  • HTML, JSON, XML 등의 형식일 수 있으며, 클라이언트가 요청한 작업에 따라 다양한 형태로 전송합니다. 

'Django' 카테고리의 다른 글

장고 폼(Form) / 모델폼(ModelForm)  (1) 2024.09.12
장고 심화  (0) 2024.09.02
Django_template  (0) 2024.08.27
Django_MTV Pattern  (0) 2024.08.23
장고_개발 환경 구성 및, 장고 설치  (0) 2024.08.20

 

 

 

 

1. 가상환경 생성 및 적용, 장고 설치

venv 폴더 만들기
python -m venv venv

가상환경 활성화
source venv/Scripts/activate
(deactivate)

설치된 파이썬 패키지 조회
pip list

Django 라이브러리 설치
pip install django==4.2

requirements.txt에 freeze (패키지 설치할 때마다 freeze 진행)
pip freeze > requirements.txt

requirements.txt 읽어오기
pip install -r requirements.txt

 

 

 

 

2. Django 프로젝트

프로젝트 생성
django-admin startproject <프로젝트 이름> <생성 디렉토리>
프로젝트 이름 ex) my_first_pjt

* [ . ]은 현재 폴더를 의미하며 현재 폴더를 프로젝트 폴더로 사용해서 생성
django-admin startproject <프로젝트 이름> .

해당 폴더 안쪽으로 이동
cd my_first_pjt

django 개발 서버 실행
python manage.py runserver

 

살펴보기

settings.py 프로젝트의 설정을 관리하는 곳
urls.py 어떤 요청을 처리할지 결정하는 곳
__init__.py 하나의 폴더를 하나의 파이썬 패키지로 인식하도록 하는 파일

→ 3버전 이상으로 가면 없어도 됨. 하지만 3버전 이하에서도 동작하도록 호환성을 위해 지키는 규칙
wsgi.py 웹 서버 관련 설정 파일
manage.py Django 프로젝트 유틸리티 (조종기)

 

 

 

 

3. 웹 사이트 기본 기능

- 회원가입

- 유저기능 / 프로필페이지, 로그인/로그아웃

- 회원탈퇴

- 비밀번호 변경

- 데이터베이스

- 보안

- 좋아요 기능

- 팔로우 기능

 


 

프레임워크(Framwork)란?

- 소프트웨어 개발을 위한 구조적인 틀

 

개발자들이 프로그램을 만들 때 자주 사용하는 여러 도구들을 모아놓은 것
특정한 작업이나 목적을 수행하기 위한 코드 뭉치
파이썬에는 Django Flask, FastAPI 등의 여러 프레임워크가 있음

 

 

프레임워크 사용 목적

- 생산성이 높아짐

- 부가적인 부분은 프레임워크에 맡기고, 핵심 로직에만 집중할 수 있음

- 구조적으로 안정적인 형태의 개발 가능

- 빠르고 안정적이며, 높은 품질의 소트웨어 개발 가능

 

 


 

 

장고가 뭐야?

- Python 기반

: Django를 다루기 위해 다른 언어를 배울 필요 없이, Python을 사용해서 웹개발이 가능함

 

 

- 웹 프레임 워크

: 웹을 만들기 위한 프레임 워크로, 빠른 웹개발을 위한 모든 것이 준비되어 있음

 

DRY(Don’t Repeat Yourself) 원칙
: 코드 중복을 최소로하는 개발 원칙을 따릅니다.

모든 것이 갖춰진 프레임워크
: 보안, 관리자기능, Auth 등의 필요한 모든것이 준비되어있습니다.

풍부한 레퍼런스
: Google과 함께라면 두렵지 않겠죠? 여러분의 모든 에러는 이미 해결책이 있습니다.

검증된 프레임워크
:어떠한 도구(프레임워크)를 고를때는 그것을 어디에 사용했는지 봐야합니다.

'Django' 카테고리의 다른 글

장고 폼(Form) / 모델폼(ModelForm)  (1) 2024.09.12
장고 심화  (0) 2024.09.02
Django_template  (0) 2024.08.27
Django_MTV Pattern  (0) 2024.08.23
Django App  (0) 2024.08.23

+ Recent posts