Django로 DB만들고 서버 연결

vector13·2021년 6월 3일
0

python 의 Django를 연결하는 실습

  • 파이썬 설치가 선행되어야한다.
    -Django를 설치할 폴더를 미리 새로 만든다
    (나는 User>Document>DjangoProject )

폴더가 위치하는 곳에서 cmd열고 파이썬 버전 확인 (3.7 이상이어야함)

C:\Users\82102\Documents\DjangoProject>python --version
Python 3.9.5

django 연결에 필요한 것들 pip명령어로 install 시행

C:\Users\82102\Documents\DjangoProject>pip install django


C:\Users\82102\Documents\DjangoProject>pip install djangorestframework


C:\Users\82102\Documents\DjangoProject>pip install markdown


C:\Users\82102\Documents\DjangoProject>pip install django-filter

DjangoProject 안에 Project 생성 django-admin startproject (프로젝트이름)

C:\Users\82102\Documents\DjangoProject>django-admin startproject samjeonwillneverdie

dir로 확인

C:\Users\82102\Documents\DjangoProject>dir

 C:\Users\82102\Documents\DjangoProject 디렉터리

2021-06-03  오전 11:50    <DIR>          .
2021-06-03  오전 11:50    <DIR>          ..
2021-06-03  오전 11:50    <DIR>          samjeonwillneverdie
               0개 파일                   0 바이트
               3개 디렉터리  381,865,766,912 바이트 남음

cd 이용해서 프로젝트 안으로 들어가기 + dir로 확인


C:\Users\82102\Documents\DjangoProject>cd samjeonwillneverdie
C:\Users\82102\Documents\DjangoProject\samjeonwillneverdie>dir

 C:\Users\82102\Documents\DjangoProject\samjeonwillneverdie 디렉터리

2021-06-03  오전 11:50    <DIR>          .
2021-06-03  오전 11:50    <DIR>          ..
2021-06-03  오전 11:50               697 manage.py
2021-06-03  오전 11:50    <DIR>          samjeonwillneverdie
               1개 파일                 697 바이트
               3개 디렉터리  381,867,036,672 바이트 남음

python manage.py에 앱 시작하기
-> python manage.py startapp 앱이름 -> dir로 생성 확인

C:\Users\82102\Documents\DjangoProject\samjeonwillneverdie>python manage.py startapp samjeonwillneverdie_app
C:\Users\82102\Documents\DjangoProject\samjeonwillneverdie>dir

앱 내부 dir로 확인

C:\Users\82102\Documents\DjangoProject\samjeonwillneverdie>dir samjeonwillneverdie_app


2021-06-03  오전 11:51    <DIR>          .
2021-06-03  오전 11:51    <DIR>          ..
2021-06-03  오전 11:51                66 admin.py
2021-06-03  오전 11:51               183 apps.py
2021-06-03  오전 11:51    <DIR>          migrations
2021-06-03  오전 11:51                60 models.py
2021-06-03  오전 11:51                63 tests.py
2021-06-03  오전 11:51                66 views.py
2021-06-03  오전 11:51                 0 __init__.py
               6개 파일                 438 바이트
               3개 디렉터리  381,865,439,232 바이트 남음
  • 다음단계
    DjangoProject 안의 samjeonwillneverdie 안의 samjeonwillneverdie안의 setting.py가서 파일 수정
  1. ALLOWED_HOSTS = ['ip주소'] 에 내 컴퓨터 ip넣기

  2. 앱등록

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #밑의 두개 추가 
    'rest_framework',		
    'samjeonwillneverdie_app'
]
  1. 데이터베이스 설정 (mysql 연결할것)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
        'USER' :'root',
        'PASSWORD': '',
        'HOST':'localhost',
        'PORT':'3306'
    }
}

저장하고 제대로 되었는지 실험
아까 cmd에서 서버 띄우기

C:\Users\82102\Documents\DjangoProject\samjeonwillneverdie>python manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
June 03, 2021 - 11:57:08
Django version 3.2.4, using settings 'samjeonwillneverdie.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CTRL-BREAK.

chrome에서
ip주소:8000 로 이동하면 Django 홈페이지로 이동 ->장고 서버 연결잘 된것

현 cmd는 서버 구동에 쓰고있기 때문에
manage.py가 있는 곳에서 cmd다시 열기
-> dir로 manage.py있는지 확인 -> python manage.py createsuperuser 명령어 입력
-> 오류 뜨면 >python manage.py migrate 시켜주고 다시
->python manage.py createsuperuser
슈퍼유저 계정 만들기

C:\Users\82102\Documents\DjangoProject\samjeonwillneverdie>python manage.py createsuperuser
Username (leave blank to use '82102'): 유저네임 쓰기 나는 mobile_admin
Email address: 이메일쓰기 
Password:
Password (again):
Superuser created successfully.

C:\Users\82102\Documents\DjangoProject\samjeonwillneverdie>

아까 장고 홈페이지에서
ip주소:8000/admin 하면 로그인 페이지 뜬다. 방금 설정한 로그인 정보로 로그인

장고는 models가지고 파이썬으로 DB관리가 된다는 것이 큰 장점이다
그러므로 DB모델을 생성해야함
만든 앱 (나의 경우 samjeonwillneverdie_app)안에 models.py 파일 열고
만들 DB에 따른 필드들을 클래스 내부에 생성
(밑의 예제는 수업때 사용한거고 프로젝트에서 사용할건 나중에 추가할예정)

from django.db import models

# Create your models here.
class humanInfo(models.Model):
    name = models.CharField(max_length=10)
    phone_number=models.CharField(max_length=13)
    address =models.TextField()
    created = models.DateTimeField(auto_now_add=True)   #생성시간

    class Meta :ordering=['created']

모델생성하면 장고서버에 등록해야한다
앱폴더 내의 admin.py에 등록

from django.contrib import admin

# Register your models here.
from samjeonwillneverdie_app.models import humanInfo
admin.site.register(humanInfo)

manage.py가 있는 폴더의 cmd에서 -> python manage.py makemigrations 명령어 실행 ->python manage.py migrate 명령어실행

C:\Users\82102\Documents\DjangoProject\samjeonwillneverdie>python manage.py makemigrations
Migrations for 'samjeonwillneverdie_app':
  samjeonwillneverdie_app\migrations\0001_initial.py
    - Create model humanInfo
    
    
C:\Users\82102\Documents\DjangoProject\samjeonwillneverdie>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, samjeonwillneverdie_app, sessions
Running migrations:
  Applying samjeonwillneverdie_app.0001_initial... OK

웹브라우저에서 확인 (새로운 클래스 생성)

장고에서 제공하는 파일 외의 새 파일 추가해야함
앱폴더 안에 serializers.py 생성 (restFramework에서 사용하는기능)
데이터모델 model과 json형태로 1대1로 매칭해준다.

from rest_framework import serializers
from .models import humanInfo

class hInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model =humanInfo
        fields=['name','phone_number','address']

앱폴더에있는 view.py 파일 열어서
(장고에서 뷰는 db에서 가져온 데이터 클라이언트 한테 전달위해 처리해주는 역할을한다.)

from django.shortcuts import render
from rest_framework import viewsets
from samjeonwillneverdie_app.models import humanInfo
from samjeonwillneverdie_app.serializers import hInfoSerializer

# Create your views here.
class hInfoViewSet(viewsets.ModelViewSet):
    queryset = humanInfo.objects.all()
    serializer_class = hInfoSerializer

프로젝트 내부에 있는 urls.py 수정

from django.contrib import admin
from django.urls import path, include, re_path
from rest_framework import routers
from samjeonwillneverdie_app import views

router = routers.DefaultRouter()
router.register(r'test', views.hInfoViewSet)
urlpatterns = [
    path('admin/', admin.site.urls),
    path('samjeonwillneverdie_app/',include('samjeonwillneverdie_app.urls')),
    path('',include(router.urls))
]

앱폴더에 urls 파일없으므로 urls.py 생성

from django.urls import path,include,re_path

app_name = 'samjeonwillneverdie_app'
urlpatterns =[
    path('',include('rest_framework.urls',namespace='rest_framework_category')),
    ]

그리고 난 다음 아까처럼 장고 홈페이지 방문하면

이렇게 뜬다 urls.py중에서
path('',include(router.urls))
->
router.register(r'test', views.hInfoViewSet) 때문임

페이지에서 저 주소링크(빨간줄) 로 들어가면

라우터 추가된 내용이 보인다.

모델에 정보 데이터 입력안해서 아무것도 안나옴

입력하고 post 버튼 누르면 네임, 전화번호, 주소 필드에 데이터 추가된다

위의 get버튼의 json을 누르면

데이터를 json형태로 얻을 수 있다.

json 형태로 만들었으면 서버에서 할일은 끝난 것이다. 이제 할일은 안드로이드에서 해야함.

profile
HelloWorld! 같은 실수를 반복하지 말기위해 적어두자..

0개의 댓글