Python – postgresql – Django – REST – TensorFlow 서비스 개발(1)

Anaconda , Django, Djangorestframework, Tensorflow, postgres 환경에서 REST API 호출을 통해  간단한 Tensorflow 예제를 실행하고 결과를 리턴하는 것까지 설명하고자 한다. Spark 연동 및 Tensorflow Serving 을 연동하는 부분은 따로 설명하겠다

[링크]
Anaconda – PyCharm – Tensorflow  환경 구성 : http://wp.me/p7xrpI-8Q

가. Anaconda sub Library Install

virtualenv 설정은 사용하지 않고 바로 설치하고 진행

[Django 설치]

conda install -c anaconda django=1.9.5

[Django Rest Frame Work]

conda install -c ioos djangorestframework=3.3.3

[postgress 연동 plugin]

conda install -c anaconda psycopg2=2.6.1

[pygments 설치]

conda install -c anaconda pygments=2.1.3

나. PostgresSql  설치

[설치]

yum install postgresql-server

[계정확인 / 비밀번호 지정]

cat /etc/passwd | grep postgres
 sudo passwd postgres

[DB  생성 경로 확인]

cat /var/lib/pgsql/.bash_profile
 env | grep PGDATA

[DB 초기화/실행]

sudo -i -u postgres
initdb
pg_ctl start
ps -ef | grep postgress

[DB 접속 / database 생성]

# psql
postgres=# create database test1  ;
postgres=# select *   from pg_database  ;

 

스크린샷, 2016-08-21 04-41-22

 

[user  생성 및 권한 부여 ]

postgres=#CREATE USER testuser WITH PASSWORD '1234';
postgres=#ALTER ROLE testuser SET client_encoding TO 'utf8'; 
postgres=#ALTER ROLE testuser SET default_transaction_isolation TO 'read committed'; postgres=#ALTER ROLE testuser SET timezone TO 'UTC';
postgres=#GRANT ALL PRIVILEGES ON DATABASE test1 TO testuser;


[생성 유저 테스트]

psql -U testuser test1

[psql command]

순서대로 전체 DATABASE LIST 출력, 선택한 DATABASE 접속, 해당 DATABASE TABLES

postgres=#\list 
postgres=#\connect DATABASE_NAME 
postgres=#\dl+

 

 다. Django 작업 목차

[1. 뼈대 구성]

startproject : 프로젝트 생성 
settings.py : 프로젝트 설정 항목 변경 
migrate : 유저/그룹 테이블 생성 
createsuperuser : 프로젝트 관리자 생성 
startaup : 북마크 앱 생성 
settings.py : 북마크 앱 등록

[2. 모델 코딩]

models.py : 모델(테이블)정의
admin.py : Admin 사이트에 모델 등록 
makemigrations  : 모델을 데이터베이스에 반영 
migrate

[3. 기타]

urls.py : URL 정의 
views.py : 뷰 로직 작성 
templates directory : 템플릿 파일 작성

라. 프로젝트 생성

[프로젝트 생성]

# cd ~/PycharmProjects 
# django-admin.py startproject djangodemo

 

마.북마크 앱 생성/등록

[북마크 앱 생성 ]

python manage.py startapp snippets

 

스크린샷, 2016-08-21 06-16-09

[북마크 앱 등록]

INSTALLED_APPS =(...'rest_framework','snippets.apps.SnippetsConfig',)

 

바. 디비 정보 세팅

[settings.py  수정 – 디비 정보 입력]

vi ~/PycharmProjects/djangodemo/djangodemo/settings.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'test1', 'USER': 'testuser', 'PASSWORD': '1234', 'HOST': 'localhost', 'PORT': '', } }

사. Model 생성

[models.py]

스크린샷, 2016-08-21 06-45-38

[예제 코드]

from django.db import models
from pygments.lexers import get_all_lexers
from pygments.styles import get_all_styles

LEXERS = [item for item in get_all_lexers() if item[1]]
LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS])
STYLE_CHOICES = sorted((item, item) for item in get_all_styles())


class Snippet(models.Model):
 created = models.DateTimeField(auto_now_add=True)
 title = models.CharField(max_length=100, blank=True, default='')
 code = models.TextField()
 linenos = models.BooleanField(default=False)
 language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
 style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)

 class Meta:
 ordering = ('created',)

아. Admin.py 등록

위에 정의한 테이블 구조에 맞춰 admin UI 에서도 볼 수 있도록 정의해 줍니다.

[admin.py]

from django.contrib import admin
from snippets.models import Snippet

# Register your models here.

class SnippetsAdmin(admin.ModelAdmin):
        list_display = ('created','title','code','linenos','language','style')

admin.site.register(Snippet, SnippetsAdmin)

차.  Project Migration

[migration]

python manage.py makemigrations 
python manage.py migrate

[reset migration]

python manage.py migrate --fake <app-name> zero

 

[실행 결과]

스크린샷, 2016-08-21 06-46-50

[Postgres DB Table 생성 확인]

마이그레이션은 기본적으로 디비와 모델을 동기화하는 작업

SELECT * FROM information_schema.tables ;
SELECT  <table name>  FROM information_schema.tables  ;

 

스크린샷, 2016-08-21 08-03-25

카. 슈퍼유저 생성 및 서버 테스트

[Create Super User]

python manage.py createsuperuser

[슈퍼유저 정보 입력]

Username (leave blank to use 'root'): kim
Email address: kim@naver.com
Password: 
Password (again): 

 

[Server Start]

프로젝트 폴더로 이동 (프로젝트 폴더에 manage.py   가 있는 위치) 하여   서버를 기동한다.

ip addr | grep "inet "
python manage.py runserver localhost:8989

 

 

 

스크린샷, 2016-08-21 05-53-58

[Admin Page]

http://등록한 주소 : 포트 /admin

계정은 아까 위에서 생성한 슈퍼 유저 (저는 OS 계정과 동일하게 설정)
위에서 생성한 테이블까지 출력된다면, 여기까지 문제없이 진행된 것

스크린샷, 2016-08-21 07-29-59

타. REST Service App 개발

– 참조 사이트 :  http://www.django-rest-framework.org/tutorial/1-serialization/

– 현재 상태
. snippets APP 생성 완료
. Snippet Model 생성
. postgresql  동기화 완료

==> 다음 포스트에서 작성

 

Leave a Reply

Your email address will not be published. Required fields are marked *