TIL 25. Django C.R.U.D (#. setting)

윤현묵·2021년 8월 18일
1

Django

목록 보기
2/17
post-thumbnail
post-custom-banner

장고를 이용한 C.R.U.D를 만들기 위해 초기 setting을 하고 간단한 데이터를 생성하는 작업을 진행하도록 하겠습니다.

장고 초기 Setting

  • 가상환경 생성

    프로젝트 마다 독립적인 패키지의 관리를 위해 새로운 가상환경을 생성해서 사용해주세요

    # 가상환경 생성
    conda create -n "가상환경 이름" python=3.8 (버전에 맞게 설정)
    conda activate "가상환경 이름"
  • Database 생성

    $ mysql -u root -p
    
    mysql> create database NAME character set utf8mb4 collate utf8mb4_general_ci;
  • Project Python Package 설치

    $ pip install django
    
    # 이후에 MySQL server에 접속하기 위한 package
    $ pip install mysqlclient
      mysql 설치되어 있는지 먼저 확인해주세요
  • Django Project 생성

    $ django-admin startproject 프로젝트 이름
    $ cd 프로젝트 폴더
  • Settings.py 설정

    • IP 허용

      ALLOWED_HOSTS = ['*'] → 전체 접속자 허용
    • 주석처리 (admin, csrf, auth)
      -. 사용하지 않는 것들을 주석처리 해줍니다.

      (**중요**) 추가로 프로젝트/urls.py를 아래와 같이 수정해주세요.
      
      ```python
      from django.urls import path
      
      urlpatterns = [
      ]
      ```
    • my_settings.py 생성 (DATABASES, SECRET_KEY)

      • 장고 설정에 존재하는 내용 중 SECRET_KEY, DATABASE 등은 소스로서 공유해야 하는 내용이 아닙니다. 별도의 파일 혹은 환경변수로서 관리하는게 좋습니다. (보안문제 등)

      • settings.py에 바로 저장되는 방식보다 별도로 관리하는 것이 좋습니다.

      • 별도의 참조용 파이썬 파일(my_settings.py)을 생성해서, 참조하는 방법으로 진행

        cd '생성한 프로젝트 폴더명'
        touch my_settings.py
      • 파일에 실제 쓰여지는 내용

        
        DATABASES = {
            'default' : {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'DATABASE 명',
                'USER': 'DB접속 계정명',
                'PASSWORD': 'DB접속용 비밀번호',
                'HOST': '127.0.0.1',
                'PORT': '3306',
            }
        }
        
        SECRET_KEY = '시크릿키' #settings.py에 있는 secret_key 를 사용합니다.
    • settings.py ↔ my_settings.py 연동

      from pathlib        import Path #기존에 settings.py 에 있는 코드
      from my_settings    import DATABASES, SECRET_KEY
      
      ...
      
      DATABASES = DATABASES
      
      SECRET_KEY = SECRET_KEY
    • M1 사용자 mysql setting

      pip install PyMySQL
      • pymysql package 설치 후 settings.py에 추가

        from pathlib        import Path #기존에 settings.py 에 있는 코드
        from my_settings.py import DATABASES, SECRET_KEY
        
        import pymysql
        
        pymysql.install_as_MySQLdb()

      corsheaders: CORS는 Cross Origin Resource Sharing의 약자로, 도메인 또는 포트가 다른 서버의 자원을 요청하는 매커니즘입니다. 최근 대부분의 웹 브라우저는 Javascript를 이용한 AJAX(Asynchronous Javascript XML)통신을 통한 데이터 송수신을 하는데, 다른 도메인을 가진 서버의 URL을 호출해 데이터를 가져오려고 하는 경우, 보안 문제인 Cross Domain 이슈를 발생시킵니다. 왜냐하면 만약 우리 웹 서비스에서 사용하기 위해 다른 서브 도메인을 가진 API 서버를 구축했는데, 우리가 아닌 다른 웹 서비스에서 이 API 버서에 접근해서 마음대로 API를 호출해서 사용하면 안되기 때문입니다.
      CORS 문제는 다른 도메인의 서버로부터 요청이 들어왔을 때, 헤더에 접근을 허락하는 내용이 없으면 발생하는데, 예를 들어 클라이언트는 localhost:3000이고 외부 서버는 localhost:8000이면 포트가 달라서 CORS가 발생할 수 있습니다.

    • corsheaders 설치

      pip install django-cors-headers
      • 설치했다면 settings.py에 INSTALLD_APPS 안에 추가해줘야합니다.

        INSTALLED_APPS = [
        ...
        		'corsheaders'
        ]
      • middleware도 추가해야합니다.

        MIDDLEWARE = [
        	...
        		'corsheaders.middleware.CorsMiddleware',
        	...
        ]
      • 마지막으로 허용할 값을 정의 합니다.

        #REMOVE_APPEND_SLASH_WARNING
        APPEND_SLASH = False
        
        ##CORS
        CORS_ORIGIN_ALLOW_ALL=True
        CORS_ALLOW_CREDENTIALS=True
        
        CORS_ALLOW_METHODS = (
            'DELETE',
            'GET',
            'OPTIONS',
            'PATCH',
            'POST',
            'PUT',
        )
        
        CORS_ALLOW_HEADERS = (
            'accept',
            'accept-encoding',
            'authorization',
            'content-type',
            'dnt',
            'origin',
            'user-agent',
            'x-csrftoken',
            'x-requested-with',
        		#만약 허용해야할 추가적인 헤더키가 있다면?(사용자정의 키) 여기에 추가하면 됩니다.
        )

        모든 내용은 settings.py안에 기록되야 합니다.

  • 프로젝트 서버 실행

    • 서버 동작(Runserver)을 통한 오류 검증

      python manage.py runserver
    • 정상 동작 예시

profile
진정성 있는 개발자를 꿈꾼다
post-custom-banner

0개의 댓글