[Django] Django란?

bbolddagu·2023년 4월 18일
0

Django

목록 보기
1/1

Django

파이썬으로 작성된 웹 프레임워크로서, 웹 개발을 더 쉽고 빠르게 만들어주는 많은 기능과 라이브러리를 제공

특징

1. MTV 패턴

: Django는 모델(Model), 템플릿(Template), 뷰(View)라는 MTV(Model-Template-View) 패턴을 사용하여 웹 애플리케이션을 구성합니다. 이를 통해 개발자는 로직, 디자인, 데이터베이스 등을 분리하여 개발할 수 있으며, 유지보수와 확장성도 용이합니다.

  • Model : 데이터저장 형태를 어떻게할지 설정
  • Template : 실제로 화면을 보여주는 인터페이스
  • View : Model과 View를 연결해주는 역할

2. ORM (Object-Relational Mapping)

: Django는 ORM을 지원합니다. ORM은 객체와 데이터베이스 간의 매핑을 자동으로 처리하여 SQL문을 작성하지 않고도 데이터베이스를 조작할 수 있게 합니다. 이를 통해 개발자는 데이터베이스의 복잡한 작업을 더 쉽게 처리할 수 있으며, 더욱 안정적인 애플리케이션을 만들 수 있습니다.

3. Admin 사이트

: Django는 Admin 사이트를 자동으로 생성해줍니다. 이를 통해 개발자는 데이터베이스의 CRUD(Create, Read, Update, Delete) 작업을 빠르게 수행할 수 있으며, 관리자 페이지의 디자인과 개발에 시간을 적게 사용할 수 있습니다.

[사용법]

  • settings.py 파일에서 INSTALLED_APPS 변수에 django.contrib.admin'을 추가
from django.contrib import admin
from .models import Post

admin.site.register(Post)
  • models.py에서 정의한 모델 클래스를 Admin 사이트에 등록할 수 있습니다.
    - 위와 같이 models.py에 정의된 Post 모델 클래스를 admin.site.register()를 사용하여 등록하면, Admin 사이트에 Post 모델이 등록됩니다.
  • Admin 사이트를 커스터마이징하려면, admin.py 파일에 ModelAdmin 클래스를 상속받아 작성한 후, 등록하면 됩니다.

4. 보안

Django는 보안에 강조를 두고 있습니다. 기본적으로 CSRF(Cross-Site Request Forgery) 공격 방지, XSS(Cross-Site Scripting) 방지 등을 지원하며, 인증과 권한 관리를 쉽게 구현할 수 있습니다.

CRSF

: CSRF 공격은 Cross-site request forgery 공격의 약자로, 사용자가 자기 의지와는 상관없이 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 방식으로 수행하는 공격
=> 이를 해결하기 위해, Django에서는 CSRF 토큰(일종의 난수 비슷한것)을 도입

  • 토큰을 통해서, 우리 사이트 이외의 다른 사이트에서 HTTP 요청을 보내는 경우, 유효하지 않은 요청이라 판단해서 403에러와 함께 요청 거부

[POST 양식을 사용하는 템플릿에 CSRF token 사용 예시]

<form>
  {% csrf_token %}
  <input type="text" name="name"/>
  ....
</form>

🖐 AJAX 통신을 통해 서버와 통신하는 경우, csrf_token 키워드 사용불가

해결방안

  • 뷰에서 템플릿을 만들어 넘길때, CSRF 토큰값을 쿠키에 담아 보내주기
  • Django에서 설정한 헤더와 쿠키로 CSRF 토큰 넘기기
  1. setting.py에 아래와 같이 코드 추가
CORS_ORIGIN_ALLOW_ALL = True

CORS_ALLOW_CREDENTIALS = True

CSRF_TRUSTED_ORIGINS = (
    'localhost:8000',
    '127.0.0.1:8000',
)

CORS_ORIGIN_WHITELIST = (
    'localhost:8000',
      '127.0.0.1:8000',
)

CORS_ALLOW_HEADERS = (
    'access-control-allow-credentials',
    'access-control-allow-origin',
    'access-control-request-method',
    'access-control-request-headers',
    'accept',
    'accept-encoding',
    'accept-language',
    'authorization',
    'connection',
    'content-type',
    'dnt',
    'credentials',
    'host',
    'origin',
    'user-agent',
    'X-CSRFToken',
    'csrftoken',
    'x-requested-with',
)
  1. index.html 스크립트 최상단에, 아래 코드 추가
axios.defaults.xsrfCookieName = 'csrftoken'
axios.defaults.xsrfHeaderName = "X-CSRFToken"
axios.defaults.headers.common['X-CSRFToken'] = getCookie("csrftoken");

5. 커뮤니티

Django는 커뮤니티가 활발합니다. 오픈소스이기 때문에 많은 개발자들이 참여하고 있으며, 다양한 문제점과 개선점을 빠르게 해결할 수 있습니다. 또한, 많은 라이브러리와 플러그인이 개발되어 있어, 웹 개발에 대한 생산성을 높일 수 있습니다.


📖참고

0개의 댓글