2020. 10. 4. 16:30ㆍ클론을 해보자
지난 번 글에서 필요한 api들을 모두 python code로 만들고, pip 파일 설치까지 완료했습니다.
이제 서버를 가동하려고 다음과 같은 명령어를 치고나니 에러가 납니다.
python manage.py runserver
File "C:\Users\devgu\Envs\simple\lib\site-packages\psycopg2\__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: fe_sendauth: no password supplied
다음 에러는 매우 간단한 에러입니다. 우리가 데이터베이스를 생성하지않았고 데이터베이스와 연결작업도 안해주었기 때문입니다. 데이터베이스를 생성해보도록 하겠습니다.
지난번에 깔았던 pgAdmin을 켜보도록 하겠습니다. 설정한 비밀번호로 로그인(필자의경우 root1234로 설정)
Object-> Create -> Database로 simplegg 데이터베이스를 생성해줍니다.
데이터베이스를 생성했다면 config->settings->base.py의 database부분을 다음과 같이 수정해줍니다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'simplegg',
'USER': 'postgres',
'PASSWORD': 'root1234',
'HOST': 'localhost',
'PORT': '5432',
}
}
다시 python manage.py runserver를 한다면 정상적으로 서버가 가동되는 것을 확인할 수 있습니다.
그런데 위에 다음과 같은 문구가 뜹니다.
ou have 26 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): account, admin, auth, contenttypes, sessions, sites, socialaccount, users.
Run 'python manage.py migrate' to apply them.
이 문구가 뜨는 이유는 데이터베이스에 migration을 하지 않았다는 말입니다. 따라서 데이터베이스에 반영하기 위해 manage.py를 이용하여 다음과 같은 명령어를 입력합니다.
python manage.py migrate
migration을 완료하였다면 superuser(관리자)를 만들어보도록 하겠습니다. 관리자를 만드는 명령어는 다음과 같습니다.
(simple) C:\Users\devgu\simplegg>python manage.py createsuperuser
Username: root
Email address:
Password:
Password (again):
Superuser created successfully.
root라는 이름의 관리자를 만들었기 때문에 이 계정으로 admin page에 대한 접근이 가능합니다.
runserver로 서버를 가동시킨 후 localhost에 들어가면 다음과 같은 사이트가 뜹니다.
adminpage는 뒤에 /admin 주소로 들어갈 수 있습니다.
위에서 생성했던 superuser 계정으로 로그인하면 다음과 같은 화면이 뜹니다.
다양한 application들이 나옵니다. account site 등등이 나오는데 우리가 생성했던 lol application이 보이지 않습니다. admin.py를 수정하지 않았기 때문입니다. admin.py와 app.py models.py를 다음과 같이 수정하도록 하겠습니다.
우선 첫 번째로 models.py를 수정해보도록 하겠습니다. simple.gg에서 필요한 database는 lol api key하나만 쓰도록 하겠습니다. models.py를 다음과 같이 작성합니다.
#model.py
from django.db import models
class Riot(models.Model):
api_key = models.CharField(max_length=50,null=True)
#apps.py
from django.apps import AppConfig
class LoLConfig(AppConfig):
name = 'simplegg.lol'
#admin.py
from django.contrib import admin
from . import models
@admin.register(models.Riot)
class RiotAdmin(admin.ModelAdmin):
search_fields = (
'api_key',
)
models.py에 작성한 데이터베이스형식을 반영하려면 makemigrations와 migrate를 해주어야합니다.
python manage.py makemigrations
python manage.py migrate
migrations을 했는데 no change detected가 나옵니다. 이렇게 나오는 이유는 django가 해당 application을 찾지 못하는 현상입니다.
(simple) C:\Users\devgu\simplegg>python manage.py makemigrations
No changes detected
따라서 base.py의 local_apps를 다음과 같이 수정해줍니다.
#base.py
LOCAL_APPS = [
"simplegg.users.apps.UsersConfig",
"simplegg.lol.apps.LoLConfig",
# Your stuff: custom apps go here
]
users app아래에 lol app을 추가시켜준뒤 다시 makemigrations를 하면, model을 생성합니다.
(simple) C:\Users\devgu\simplegg>python manage.py makemigrations
Migrations for 'lol':
simplegg\lol\migrations\0001_initial.py
- Create model Riot
그 다음 migrate를 하면 데이터베이스에 반영됩니다. 그 다음 다시 adminpage에 들어가면 다음과 같이 riots이 생긴 것을 확인할 수 있습니다.
riots에는 apikey밖에 없기때문에 key값을 추가하도록 하겠습니다.
키 값을 만들면 데이터베이스에 키 값이 들어가는 것을 확인 할 수 있습니다.
이제 우리는 urls.py와 views.py를 수정하여 이 키값을 사용하여 api를 통한 값들을 얻어낼 수 있습니다.
이번 글에서는 데이터베이스 연결과 superuser 생성, admin.py apps.py model.py를 수정해봤습니다.
다음 글에서는 urls.py와 serializer라는 기능을 살펴보도록 하겠습니다.
'클론을 해보자' 카테고리의 다른 글
OP.GG 클론하기 - 롤 전적 검색 사이트 만들기 8 (0) | 2020.10.06 |
---|---|
OP.GG 클론하기 - 롤 전적 검색 사이트 만들기 7 (0) | 2020.10.05 |
OP.GG 클론하기 - 롤 전적 검색 사이트 만들기 5 (0) | 2020.10.04 |
OP.GG 클론하기 - 롤 전적 검색 사이트 만들기 4 (0) | 2020.09.15 |
OP.GG 클론하기 - 롤 전적 검색 사이트 만들기 3 (1) | 2020.09.15 |