웹프로그래밍과 Django
네트워크
모든 사물이 네트워크로 연결 → 웹 서비스를 사용할 수 있음
Client: server를 통해 무언가 하고자 하는 모든 것 크게 device & software (Web Browser, App, 명령 프롬프트...) → request
HTTP: 수많은 Client와 Server을 연결해주는 통신 프로토콜
Server: 특정한 데이터가 모여있는 곳 → response
HTTP의 특징
1.
서버에 요청연결
2.
요청에 따른 작업
3.
클라이언트에 응답
4.
연결 해제 (Client가 많아! 계속 연결 어려워서 연결을 맺었다 끊었다)
→연결을 유지하기 위해서 쿠키 또는 세션 이용
(ex. 로그인 상태, 쇼핑몰 장바구니)
쿠키: PC에서 쿠키 값을 만들어 Server로 보내고 다시 통신할 때 쿠키 값을 서로 비교해서 연결을 유지하는 것처럼 보이게 함
세션: Server에서 세션 값을 만들어 PC로 보내고 다시 통신할 때 세션 값을 서로 비교해서 연결을 유지하는 것처럼 보이게 함 → 보안 Good
HTTP 처리 방식
Client → Server → DB
POST : 새로운 글을 입력해서 서버에 끼워넣고 싶을 때 → create(생성)
•
요청 메시지에 데이터를 담음
•
Django에서 주로 사용함
•
상대적으로 보안에 강함
GET : 내가 어떠한 데이터를 얻어오고 싶을 때 → read(조회)
•
URL에 데이터가 그대로 노출됨
•
데이터 길이에 제한 있음
•
상대적으로 보안에 취약
PUT : 기존 서버의 데이터를 수정하고 싶을 때 → update(수정)
DELETE : 내가 작성한 글을 삭제하고 싶을 때 → delete(삭제)
URL
-URL 기본 형태
https://search.naver.com/search.naver?query=weather
프로토콜 도메인(호스트) 경로 쿼리(요청)
서버 진입 서버의 어디까지 갈 거니
-REST URL 형태
https://search.naver.com/search/today/weather
URL 맵핑 (데이터)스트링
→맵핑 규칙을 정해놓고 그에 따라 실행될 함수를 호출
서버 구성(웹서버→애플리케이션 서버)
Web Server
•
주로 정적인 데이터 요청 처리 (ex. 그림 불러와)
•
Client의 요청을 받고 동적인 데이터 요청 시 애플리케이션 서버에 전달
•
애플리케이션 서버에서 받은 동적인 데이터를 다시 Client에 전달
Application Server
•
주로 동적인 데이터 요청 처리(ex. 오늘의 날씨 알려줘)
•
Database 연동
MVC 패턴
client의 request를 controller가 받아서 control 한다.
database가 필요하면 Model로 위임을 하고 Model이 data를 Control에 다시 보냄, 그러면 controller는 data 가공을 하고 response를 하기 위해 view를 찾아가 적합한 view를 선택해 client에게 response
MVT 패턴
django에서는 view에 해당되는 것을 Template으로, Control에 해당되는 것을 View로
Django 프로젝트 설계
URLconf(urls.py)
urlpatterns=[
path('student/register/', views.student_register),
#클라이언트 요청 URL, view(함수 또는 메서드)
]
View(views.py)
def student_register(request):
#요청에 따라 데이터 베이스 등을 이용한 프로그램 실행 결과
return HttpResponse()
request에 따른 애플리케이션 실행 결과를 Template(html), 에러메시지 등을 이용해서 response 한다.
Model(models.py)
ORM 방식 사용
class Student(models.Model):
s_name = models.CharField(max_length=30)
→ students(애플리케이션 이름)_student(클래스명) 테이블 생성
Template(*.html)
Django에서 필요한 Template 파일들을 찾을 수 있게 알려줘야 함
INSTALLED_APPS=[#경로 이름]
사용자 및 그룹 테이블 생성
데이터베이스 변경사항 반영
관리자 계정 생성
서버 구동
데이터베이스(ORM)
레코드 다루기
class.objects.all()→데이터 전체(QuerySet 타입으로 반환)
class.objects.get()→데이터 한개(Student 타입으로 반환)
레코드 읽기
데이터 필터
class.objects.filter(내가 원하는 데이터.다양한 함수)
_lt: ~보다 작다
_lte: ~보다 작거나 같다
_glt: ~보다 크다
_gte: ~보다 크거나 같다
_isnull: null인 자료 검색
_contains: 특정 문자열을 포함하는 자료 검색
_startwith: 특정 문자열로 시작하는 자료 검색
_endwith: 특정 문자여로 끝나는 자료 검색