https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Introduction
: Python web framework
- High-level Python web framework that enables rapid development of secure and maintainable websites
- Free & open source
-
web page 개발하는 과정에서 겪는 어려움을 줄이는 것이 목적
-
응용 프로그램의 표준 구조 를 구현하는 class와 library의 목록
Portable
- Python based which means it runs on may platform
Complete
- Django follows the "Batteries included" philosophy
- Everything you need is part of the one "product"
- Works seamlessly together
- Follows consistent design principles
- Has extensive and up-to-date documentation.
- Django follows the "Batteries included" philosophy
Versatile
- Can be used to build almost any type of website
- Can work with any client-side framework
- Can deliver content in almost any format (including HTML, RSS feeds, JSON, XML, etc)
- Can be used to build almost any type of website
Secure
- Provides a secure way to manage user accounts & passwords
- By avoiding common mistakes like putting session information in cookies where it is vulnerable
- Instead cookies just contain a key
- And the actual data is stored in the db
- By avoiding directly store passwords rather than password hash
- By avoiding common mistakes like putting session information in cookies where it is vulnerable
- Provides a secure way to manage user accounts & passwords
Scalable
- Uses a component-based "shared-nothing" architecture
- each part of the architecture is independent of the others
- can be replaced or changed if needed
- Can scale for increase traffic by adding hardware at any level
- caching servers
- database servers
- application servers
- Uses a component-based "shared-nothing" architecture
Maintainable
- Follows DRY (Don't Repeat Yourself) principle
- No unnecessary duplication
- Promotes the grouping of related functionality into reusable
- Follows DRY (Don't Repeat Yourself) principle
- 많은 기업에서 활용중
- Spotify
- Dropbox
- Delivery Hero
- etc.
- 요청 (request)
- 응답 (response)
-
django는 MVC (Model View Controller) pattern 을 따르고 있다.
-
MVC: Software design pattern 중 하나
MVC Pattern django Model Model View Template Controller View
-
-
MTV
- M: 데이터 관리
- T: 인터페이스 (화면)
- V: 중간 관리 (상호 동작)
: CS50 IDE is a cloud-based Integrated Development Environment powered by AWS Cloud9 that features a cloud-based Ubuntu environment, a browser-based editor that supports syntax highlighting and word completion, a GUI-based GDB debugging, themes, customizable layouts, keyboard shortcuts, and many more features. Since it’s cloud-based, you can continue working on your problem sets even if you use a different computer!
Cloud 기반 IDE (통합 개발 환경)
- OS: Ubuntu 18.04.4 LTS
- python 3.7.6
- 개발 local 환경에 영향이 없다는 장점이 있음
$ pip install django==2.1.15
- 2.1.15 로 다운받기
$ pip uninstall django
$ django-admin startproject {프로젝트 명}
- settings.py 28 번째 줄 수정하기
ALLOWED_HOSTS = ['*']
- 서버 실행 시 반드시 명령어가 실행되는 directory를 확인 할 것
$ cd djanggo_intro/
$ ls
$ python manage.py runserver 8080
서버 실행 된 화면
$ python manage.py startapp pages
$ django-admin startproject first_django
project
는 django의 atomic 한 단위!
$ python manage.py startapp pages
$ git init
$ ls -al
$ rm -rf .git
: 주민등록
- 주민등록을 위해
pages
추가함
$ python manage.py runserver 8080
$ echo $PORT
8080
- 80번과 8080으로 연결되어 있는 것 확인 가능
$ echo $IP
127.0.0.1
django는 DEBUG=True
가 default
문지기
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('요청 URL/', handling 할 view(controller) 함수)
path('admin/', admin.site.urls),
]
path('요청 URL/', handling 할 view(controller) 함수)
- url 끝에
/
가 붙는게 django의 특징!
- url 끝에
from django.shortcuts import render
# Create your views here.
def hello():
return render(request,'HTML file name')
- hello() 가 불릴 때마다 함수를 부른 객체가 첫번째 인자로 들어감
- view에서 함수를 정의하는 경우 항상 첫번째 인자를
request
로 정의한다!
- view에서 함수를 정의하는 경우 항상 첫번째 인자를
def lotto(request):
import random
pick = random.sample(range(1,46),6)
context = {'pick':pick}
return render(request, 'lotto.html', context)
- 첫 번째 인자 -
request
- 두 번째 인자 - 파일 명
- 세 번째 인자 - context
- context는 항상 dictionary 로 해야함!
- 이름이 꼭
templates
여야 한다
$ killall python
$ killall python3
- django는 여러개의 앱을 가진 하나의 project로 구성된다
- ex) 커뮤니티를 만든다
- 회원과 관련된 app -
accounts
- 게시글과 관련된 app -
posts
- 회원과 관련된 app -
- ex) 커뮤니티를 만든다
$ python manage.py startapp {app 이름}
-
app을 생성하고 반드시
settings.py
의INSTALLED_APPS
에 등록한다INSTALLED_APS = [ ... 'pages', ]
-
url.py
# django_intro/urls.py from pages import views urlpatters = [ path('lotto/', views.lotto), ]
- path 에 url은 항상
/
로 닫아준다
- path 에 url은 항상
-
views.py
# pages/views.py import random def lotto(request): pick = random.sample(range(1,46),6) context = { 'pick': pick } return render(request, 'lotto.html', context)
-
함수를 정의할 때, 항상 첫번 째 인자는
request
로 작성해둔다- why? 내부적으로 요청을 처리 할 때, 함수 호출 시 요청 정보가 담긴 객체를 보내줘야 해서
-
render
함수를 통해서 반환한다- 첫번째 인자:
reqeust
- 두 번째 인자: template file (
html
) - 세번째 인자
- dictionary type
- template에서 활용 하려고 하는 값들을 전달
- 첫번째 인자:
-
반환할
html
file은 항상templates
folder 안에 생성한다<!-- pages/templates/lotto.html --> <p> {{pick}} </p>
- context dictionary의 key 값을 적으면 출력된다