HTTP: stateless protocol
process 생성 - 파이썬 메모리 올리고 - 제거하고 -> 05ch
url mapping 자동으로 해준다.
소켓은 내가 url을 책임지고 호출해야 한다. 웹서버가 안 해
@app.rate(./...) 이렇게 명시를 했다.
큰 규모의 웹서비스를 만들기 위해서는 플라스크는 너무 간단하고 비효율적이다.
쟝고는 현실적으로 사용가능한 웹프로그램. 어느정도 가볍다.
MVC & MTV
모든 어플리케이션은 MVC 설계 방법?
MVC
- Model : 안전하게 데이터를 저장
연속성이 있는 데이터를 어떻게 저장할 것인지. 별도의 모듈을 만들어 데이터 모델링. DB도 나름의 모델링 방법을 가지고 데이터베이스와 연결.
- View : 데이터를 적절하게 유저에게 보여준다.
사용자에게 데이터를 어떻게 보여줄지. (graph, template, ...)
- Control, Template (Django) : 사용자의 입력과 이벤트에 반응하여 model과 view를 업데이트
모델과 뷰를 서로 연결시켜주는 작업.
그런데 장고에서는 이름을 조금 바꾸었다.
MTV
기존의 V는 컨트롤러에 가깝(연결)지만, 장고에서의 V는
Project, App
Project
App : 전체적인 세팅 관련
Practice
초기 설정
프로젝트 구성
reload 기능 자동으로.
컴파일 에러가 발생해도 죽지 않아. manage.py 동작 중이어서 그 안에서 서버모듈이 중단된다해도 ㄱㅊ
동적으로 서비스가 추가되어도 다 인식해
- console
django-admin #설명서
cd mysite
python manage.py runserver
python manage.py startapp myapp #프로젝트 하위구조. 생성도 어드민에서 하는 게 아니라, manage.py를 가지고 하위 앱을 만드는 것.
python manage.py migrate #DB initialization
DB 구조가 변경되었을 경우 migration 필요. field 추가 및 삭제 등... (글이 아니고)
초기 설정
settings.py
- template directory setting
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['templates'],
- static directory setting
STATIC_URL = '/static/' STATICFILES_DIRS = [ #static folder의 물리적은 경로 os.path.join(BASE_DIR, 'static'), ]
urls
- mysite/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls'))
]
뒤에 urls는 통상적으로.
전역적인 세팅은 mysite 폴더 안에.
쟝고는 대부분 지역변수/함수를 사용하도록 설계되어 있다.
- myapp/urls.py
from django.urls import path
from . import views #from 다음에는 폴더명. import 다음에는 함수명이나
urlpatterns = [
path('', views.index),
path('test/main', views.test),
]
views
- myapp/views.py
def test(request):
out = {'s':
{'img':'test.png'}
}
return render(request, 'template.html', out)
#쟝고에서는 딕셔너리로만 데이터 전달 가능.
views.py : 어떤 템플릿을 연결해줄지 정리해주는 역할.
Web Service
상대 경로
항상 경로를 생각해야 해. current 어디인지
<form action="login" method="get"> <!--localhost:8000/static/login-->
<form action="/login" method="get"> <!--localhost:8000/login-->
상대경로. current에 있는 login(localhost:8000/static/login
)으로 연결된다.
절대경로는 /
로 시작.
경로가 파이썬에서는 서버기준, 브라우저에서는 실행되는 웹주소 기반이다.
세팅하면 login.html을 다른 폴더에 넣을 수 있지만,
오늘 수업에서는 static/login.html 으로 할 것임
전체적인 프로세스는 쟝고가 운영하니 current directory는 BASE_DIR
이다.
./dirname
BASE_DIR
는 앱의 베이스가 아니라 프로젝트의 base directory를 가리킨다.
Redirect
return HttpResponse("login FAIL<a href='/static/login.html'>돌아가기</a>")
주소창: http://localhost:8000/login?id=d&pwd=d
return service(request)
주소창: http://localhost:8000/login?id=d&pwd=d
새로고침(F5)하면 다시 로그인 요청을 하는 것이다.
새로고침하면 서비스 페이지가 오는게 논리적이다. (이미 로그인이 되어있는데)
return redirect('/service')
주소창: http://localhost:8000/service
리다이렉트: 브라우저에게 서비스파일 다시 요청해달라고 요청
페이지에서 페이지로 이동할 때에는 브라우저에 요청해서 간접적으로 이동해야 한다.
새로고침하면 http://localhost:8000/service
요청
리다이렉트란, 입력을 login으로 받아서 출력 끝내놓고, 다시 입력을 서비스 페이지로 바꾸는 것이다. -> 요청한 페이지와 출력한 페이지가 항상 같다는 보장을 해주면서 페이지와 페이지를 이동할 수 있는 방법이다.
another issue) 로그인 안 한 상태에서 service page 요청하면 service page 들어가져.
-> 사용자 인증 과정 필요하다. 비인가된 사용자들이 서비스페이지에 요청을 직접적으로 하면 안 되도록.
- HTML Redirection
<head>
<meta http-equiv="refresh" content="0;URL='http://www.example.com/'" />
</head>
브라우저는 0초 후에 요청된 url을 다시 요청한다.
리다이렉트 파이썬에서 구현하면 아래와 같다.
HttpResponse("""
<script>
window.location.href = "/service"
</script>
""")
session
세션과 쿠키는 거의 동일한 개념인데, 어떤 메모리이다.
namevalue 상의 데이터를, 쿠키는 그 공간을 client에, 세션은 server 상에 저장하는 것이다. 보안상 세션이 더 유리하다.
세션은 자동으로 유저별로 구분해서 준다. user마다 전용 세션 공간이 할당된다.
internet explorer로 들어오고 chrome으로 들어오면 둘 세션 값이 다르다.
face recognition: multi classes problem
face verification: binary class problem
'Python > Django' 카테고리의 다른 글
Django에 Database 사용하기 (1) | 2020.02.19 |
---|---|
HTML과 python web server 구축 (0) | 2020.02.18 |
Python Socket programming (0) | 2020.02.18 |
OSI 참조 모델 이론 (0) | 2020.02.18 |
AJAX를 활용한 비동기 방식 웹페이지 Django로 구동하기 (0) | 2020.02.14 |