TIL - 04/03 - Django part1

Sung Jun Jin·2020년 4월 3일
0

TIL

목록 보기
11/25
post-custom-banner

Django Replit 최대한 안보고 따라하기

우선 Django 프로젝트 생성전에 파이썬 가상환경 먼저 생성해준다.

 $ conda create -n test02 python=3.8

생성한 가상환경을 활성화

$ conda activate test02

장고를 설치하자

$ conda install django    

Collecting package metadata (current_repodata.json): done
Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.8.2
  latest version: 4.8.3

Please update conda by running

    $ conda update -n base -c defaults conda



## Package Plan ##

  environment location: /home/sungjunjin/miniconda3/envs/test02

  added / updated specs:
    - django


The following NEW packages will be INSTALLED:

  asgiref            pkgs/main/noarch::asgiref-3.2.5-py_0
  django             pkgs/main/noarch::django-3.0.3-py_0
  pytz               pkgs/main/noarch::pytz-2019.3-py_0
  sqlparse           pkgs/main/noarch::sqlparse-0.3.0-py_0


Proceed ([y]/n)? y

Preparing transaction: done
Verifying transaction: done
Executing transaction: done

프로젝트 생성

django-admin startproject test02

우선 test02/setting.py에서 프로젝트를 개발하기전에 초기 설정 먼저 해준다.

test02/settings.py

INSTALLED_APPS의 admin,auth 주석처리

 33 INSTALLED_APPS = [
 34 #   'django.contrib.admin',
 35 #   'django.contrib.auth',
 36     'django.contrib.contenttypes',
 37     'django.contrib.sessions',
 38     'django.contrib.messages',
 39     'django.contrib.staticfiles',
 40 ]
 41 

MIDDLEWARE CSRF, auth 주석처리

 42 MIDDLEWARE = [
 43     'django.middleware.security.SecurityMiddleware',
 44     'django.contrib.sessions.middleware.SessionMiddleware',
 45     'django.middleware.common.CommonMiddleware',
 46 #   'django.middleware.csrf.CsrfViewMiddleware',
 47 #   'django.contrib.auth.middleware.AuthenticationMiddleware',
 48     'django.contrib.messages.middleware.MessageMiddleware',
 49     'django.middleware.clickjacking.XFrameOptionsMiddleware',
 50 ]

세팅이 완료 후 테스트를 위해 runserver를 실행시켜보자.

하지만 마지막 세팅이 하나 남았다.

test02/urls.py

 from django.contrib import admin
 from django.urls import path
  
 urlpatterns = [
     path('admin/', admin.site.urls),
 ]

앞서 settings.py의 INSTALLED_APPS 리스트에서 admin을 주석처리했으므로 초기 세팅되어있는 admin url을 삭제시켜준다.

 from django.contrib import admin
 from django.urls import path
  
 urlpatterns = [
     
 ]

초기설정 완료 후 테스트

(test02)  sungjunjin@sungjunjin  ~/devel/test02  python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 3 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

April 03, 2020 - 10:38:23
Django version 3.0.3, using settings 'test02.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

서버는 잘 돌아가지만 중간에 You have 3 unapplied migration(s) 뭐라고 경고 메세지가 나온다. 아직 생성한 APP도, Model도 없으니 패스.

초기설정 테스트가 끝났으니 본격적으로 APP을 만들어보자 manage.py가 있는 경로로 이동한다

django-admin startapp user

user App이 생성되었다.

user App을 만들었으니 test02/settings.py에 INSTALLED_APPS에가서 등록해주자.

user model 먼저 만들어주자

test02/user/models.py

 from django.db import models
 
 
 class User(models.Model) :
 
     name       = models.CharField(max_length=50)
     email      = models.CharField(max_length=50)
     password   = models.CharField(max_length=300)
     
     created_at = models.DateTimeField(auto_now_add = True)
     updated_at = models.DateTimeField(auto_now = True)
     
     class Meta :
     	# 실제로 데이터베이스 table에 저장되는 이름이다.
        # SQL 테이블명은 복수형
        
     	db_table = 'users'    
     

migrations 파일을 생성하자

$ python manage.py makemigrations user 

생성한 migration 파일을 적용시키자. 테이블 구조가 Sqlite3에 생성된다.

$ python manage.py migrate 

Operations to perform:
  Apply all migrations: contenttypes, sessions, user
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying sessions.0001_initial... OK

migration 적용 현황 보기

세션

Raw Sql Table 보기

$ sqlmigrate user 0001 
BEGIN;
--
-- Create model User
--
CREATE TABLE "users" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(30) NOT NULL, "email" varchar(50) NOT NULL, "password" varchar(50) NOT NULL);
sqlite3
.open db.sqlite3

Shell의 save.()를 호출하면 실제로 앱에 데이터가 저장된다

>>> User( name= 'jsj', email = 'test@test.net', password = '123412314').save()

QuerySet으로 반환되는 데이터는 JSON Response로 보내기 위해 list 형변환 작업을 해야 한다.

>>> user_data = User.objects.all()
<QuerySet [<User: User object (1)>, <User: User object (2)>, <User: User object (3)>]>

>>> list(user_data)
[<User: User object (1)>, <User: User object (2)>, <User: User object (3)>]
profile
주니어 개발쟈🤦‍♂️
post-custom-banner

0개의 댓글