통합검색
로그인
회원가입
Open menu
로그인
회원가입
통합검색
Synology
7
AWS
5
Linux
30
PHP
9
Python
3
Javascript
24
HTML / CSS
12
ETC
4
떡볶이집앞 사진관
Synology
7
AWS
5
Linux
30
PHP
9
Python
3
Javascript
24
HTML / CSS
12
ETC
4
떡볶이집앞 사진관
Python
Python Django 를 Mariadb와 연동 및 admin 활성화 방법
Python Django를 설치하면 기본으로 설치되는 urls.py 파일에 아래와 같은 코드를 확인할 수 있는데, django를 설치하게 되면 기본적으로 admin 기능이 함께 설치가 되는데, admin 페이지 접근을 위해 작성되어 있는 코드다. django 개발시 admin페이지를 손쉽게 구축할 수 있으며, 웹사이트의 관리 또한 한결 쉬워진다. 브라우저에서 https://domain.name/admin 과 같이 접근하면 장고 admin페이지로 접근된다. admin을 사용하기 위해선 서버 환경에 아래 몇가지 사전 작업이 필요하다. - django 와 mariadb 연동을 위한 settings.py 환경설정 - django project에 커넥터 모듈 (pymysql) 설치 - django manage.py 로 table 생성 및 static 파일 다운로드 django 와 mariadb 연동을 위한 settings.py 환경설정 django 설치시 admin은 로컬서버의 sqlite dmns를 기본으로 사용하도록 셋팅되어 있다. 하지만, 나의 경우 외부에 mariadb 서버가 따로 있으므로, sqlite 대신 원격 mariadb를 바라보도록 설정했다. mariadb 연동을 위해 settings.py 파일을 vi로 연다. 나의 경우 ( /home/py/public_html/testproject/testproject/settings.py ) 경로에 설정 파일이 있다. #vi /home/py/public_html/testproject/testproject/settings.py settings.py을 열어 보면 아래와 같이 기본 설정되어 있는 것을 확인할 수 있다. 위 설정을 아래와 같이 변경한다. 여기서 반드시 'ENGINE'을 'django.db.backends.mysql' 로 설정해야 한다. (mariadb는 mysql엔진에서 파생되어 나온 엔진이기 때문에 mysql로 설정하면 된다.) django project에 mysql 커넥터 모듈 설치 (pymysql) 설치 django에서 mariadb 연결을 위해 mysql 커넥터 모듈이 설치되어 있어야 한다. 나의 경우 django를 python 가상 환경에서 설치 하였기 때문에 가상환경 진입 후 모듈을 설치하였다. 먼저, 가상환경 디렉토리가 있는 경로로 이동한다. # cd /home/py/public_html/ ( 이 경로에 'pyenv'라는 명칭으로 만들어 놓은 가상환경 디렉토리가 있다. ) pyenv(가상환경 디렉토리)를 통해 가상 환경에 접근한다. # source pyenv/bin/activate 가상 환경에 진입 되었다면, pip를 통해 pymysql 모듈을 설치한다. 파이썬 공식 사이트에서는 mysqlclient 사용을 권장하고 있지만, mysqlclient는 centos 환경에 mysql-devel 이 설치되어 있어야 하기에, 나는 그냥 pymysql을 설치했다. (성능은 mysqlclient 가 더 좋다고 한다.) (pyenv) pip3 install pymysql 설치가 완료 되었다면, deactivate로 가상환경에서 빠져 나온다. (pyenv) deactivate * mysqlclient 를 설치했다면 manage.py 설정 변경은 필요 없지만, pymysql을 설치했기 때문에 manage.py 와 settings.py 에서 pymysql을 mysqldb로 인식 시켜줘야 한다. (기본이 mysqlclient 인가보다.) # vi /home/py/public_html/testproject/manage.py 로 열어 아래와 같이 pymysql관련 구문을 추가한다. import pymysql pymysql.install_as_MySQLdb() 마찬가지로, settings.py 에도 추가해 준다. # vi /home/py/public_html/testproject/testproject/settings.py 로 열어 아래와 같이 pymysl관련 구문을 추가한다. import pymysql pymysql.install_as_MySQLdb() manage.py 로 mariadb에 table 생성 앞서 만났던 manage.py를 통해 admin 구동에 필요한 기본 db table과 static 파일을 다운로드 받을 수 있다. manage.py가 있는 경로로 이동한다. # cd /home/py/public_html/testproject/ 아래와 같이 manage.py 명령어로 연동되어 있는 mariadb 데이터베이스에 admin 구동에 필요한 필수 table을 생성한다. # python3 manage.py migrate mariadb에 접속해서 table이 잘 생성 되었는지 확인해 본다. 생성된 여러개의 테이블이 확인 된다! 생성된 테이블에 manage.py를 통해 최고 권한의 superuser를 등록해주면 DB설정은 모두 끝. # python3 manage.py createsuperuser 화면에서 나오는 안내에 따라 관리자 id, email, pw를 차례로 설정한다. manage.py 로 static 파일 다운로드 DB 설정까지 모두 완료 됐다면, 브라우저로 /admin 을 접속 해보자! 위와 같이 css가 적용되지 않는채로 화면이 보이는데, 아직 admin 관련 static 파일을 다운로드 하지 않아서 그렇다. 좀 전과 마찬가지로 manage.py를 통해 자동 다운로드 한다. #python3 manage.py collectstatic 위와 같이 css, font, img, js 파일이 다운로드 됐다. 다시 한 번 admin으로 접속 해보자!
Python Django 의 views.py 분리 및 urls.py 처리 방법
Python Django를 설치 후 프로젝트 디렉토리 내의 views.py 와 urls.py로 라우팅하여 웹페이지로 띄우게 되는데, 웹페이지의 수가 증가할 수록 코드가 길어져 식별이 어려워지게 된다. 이번 글에서는 views.py를 원하는 디렉토리에 여러개로 분산시키고 urls.py로 라우팅 하는 방법을 안내한다. 사전 작업 환경 views.py 와 urls.py 분리 작업에 앞서 현재 구성된 django 프로젝트의 환경을 요약해 본다. - 외부접속주소 : http://py.chanyeongpark.com - project경로 : /home/py/public_html/testproject/ - views.py / urls.py경로 : /home/py/public_html/testproject/testproject/ - app 경로 : /home/py/public_html/testproject/testapp/ 현재 /home/py/public_html/testproject/testproject/ 내에 위치한 views.py를 통해 template과 결합되고, urls.py를 통해 py.chanyeongpark.com 으로 외부 접속시 index 화면이 노출되고 있다. [현재 views.py] [현재 urls.py] project 메인 urls.py 설정 project 의 메인 urls.py 에서 app 디렉토리에 추가로 생성할 urls.py로 라우팅할 수 있도록 설정한다. 프로젝트 설정 폴더로 이동하여 urls.py를 vi로 연다. # cd /home/py/public_html/testproject/testproject # vi urls.py vi로 urls.py에 아래와 같이 app urls.py로 라우팅해주는 구문을 추가한다. from django.contrib import admin from django.urls import path, include from . import views urlpatterns = [ path('views/', include('testapp.urls')), path('admin/', admin.site.urls), path('', views.index, name='index'), ] urlpatters 에 path('views/', include('testapp.urls')), 가 추가 되었으며, 접속하는 url이 http://py.chanyeongpark.com/views/* 와 같은 경우 testapp 앱의 urls.py로 이관하게 된다. app 디렉토리에 views.py, urls.py 추가 생성 프로젝트 urls.py에서 이관 받아 매핑 처리할 views.py와 urls.py를 앱 디렉토리내에 추가 생성하도록 한다. 아래와 같이 앱 디렉토리로 경로 이동 후 views.py 파일들을 몰아 넣을 디렉토리를 하나 만든다. # cd /home/py/public_html/testproject/testapp/ # mkdir views vscode 등에서 작업할 수 있도록 호스팅 user(py) user에게 적절한 권한을 부여한다. # chown -R py.py views # chmod -R 705 views views 디렉토리로 들어가 새로운 views 파일 ( basic_views.py / test_views.py )을 생성한다. # cd views # vi basic_views.py basic_views.py는 아래 내용으로 작성한다. basic_views.py는 http://py.chanyeongpark.com/views/ 로 접속시 화면 출력을 담당한다. from django.shortcuts import render def index(request): return render(request, 'index.html') test_views.py를 하나 더 만든다. test_views.py는 http://py.chanyeongpark.com/views/test 로 접속시 화면 출력을 담당한다. # vi test_views.py from django.shortcuts import render def test(request): return render(request, 'views/test.html') views 파일을 생성 했다면, 그 다음 urls.py 추가 생성을 위해 앱 디렉토리로 이동한다. # cd ../ (또는) # cd /home/py/public_html/testproject/testapp vi 로 urls.py 를 작성한다. # vi urls.py urls.py 내용은 아래와 같다. from django.urls import path from .views import basic_views, test_views app_name = 'testapp' urlpatterns = [ path('', basic_views.index, name='index'), path('test', test_views.test, name='test'), ] from .views import basic_views, test_views 는 'app디렉토리 > views' 디렉토리 내의 basic_views.py 와 test_views.py 파일을 import 시키는 구문이다. app_name = 'testapp' 통해 app 이름을 명시한 뒤 urlpatters 를 추가한다. 이 때, http://py.chanyeongpark.com/views/test 로 URL을 매핑을 해야 하는데 '/views' 가 urlpatterns 에 명시되지 않은 이유는, 프로젝트 메인경로의 urls.py 에서 매핑하여 app디렉토리의 urls.py 로 라우팅 해줬기 때문이다. views 파일이 views 디렉토리에 새로 생성 되었으니, app 디렉토리의 기본 views.py는 필요가 없어졌으니 삭제 한다. # rm -rf /home/py/public_html/testproject/testapp/views.py app 에 template 생성 앞서 생성한 앱의 views 파일에서 결합된 template 파일 생성을 위해 app의 templates 경로로 이동한다. # cd /home/py/public_html/testproject/testapp/templates templates 경로에 http://py.chanyeongpark.com/views/ 와 결합될 index.html 템플릿을 생성한다. (경로는 앞서 작성한 basic_views.py 에서 명시한 경로와 일치해야 한다.) # vi index.html (내용은 'Hello World 1' 로 했다.) 그런 다음, 디렉토리를 하나 더 만들어 http://py.chanyeongpark.com/views/test 와 결합될 템플릿을 하나 더 만든다. (경로는 앞서 작성한 test_views.py 에서 명시한 경로와 일치해야 한다.) # mkdir views # vi views/test.html (내용은 'Hello World 2' 로 했다.) 현재까지 작성된 파일들의 구조는 아래 화면과 같다. 브라우저에서 테스트 해보기 urls.py가 제대로 매핑 되는지 웹브라우저에서 접속해 본다. [http://py.chanyeongpark.com/views/ & http://py.chanyeongpark.com 출력 결과] http://py.chanyeongpark.com 의 경우 프로젝트의 urls.py에서 앱의 urls.py에서 설정한 index와 같은 템플릿 파일로 설정되어 있기 때문에 http://py.chanyeongpark.com/views/ 와 같은 화면을 호출하고 있다. [http://py.chanyeongpark.com/views/test 출력 결과]
CentOS7 Apache 환경에 Python Django 설치하기
CentOS 7 환경에서 Python Django를 설치한 뒤 Apache의 Virtual Host에 연결하여 웹에서 띄우는 방법을 설명한다. 사전에 Python3와 Apache2가 설치되어 있어야 하며, Virtual Host 구동을 위해 'py' 라는 user와 호스팅 경로(/home/py/public_html)를 만들어둔 상태다. Python 가상환경 진입 및 프로젝트, 앱 생성 Django를 사전에 만들어 놓은 홈디렉토리(/home/py/public_html/)에 설치해도 구동에 문제는 없지만, 로컬 python환경의 의존적이지 않은 독립적인 구동 환경 구성을 위해 가상환경을 생성한 다음 가상환경내에서 django 설치와 프로젝트 생성, 앱 생성등의 작업을 수행한다. 우선, django 프로젝트를 생성할 미리 만들어 놓은 홈디렉토리로 이동한다. #cd /home/py/public_html/ pyenv 명칭의 새로운 가상환경을 생성한다. # python3 -m venv pyenv 위와 같이 가상환경을 생성하면 현재 경로에 pyenv 디렉토리가 새로 생긴 것을 확인할 수 있다. 새로 생성된 디렉토리 내에 가상환경 관련 실행파일이 위치해 있으며, 아래 명령어를 통해 가상환경에 진입한다. # source pyenv/bin/activate 위와 같이 진입하게 되면 프롬프트상에 '(penv)' 가 추가되며, 진입에 성공한다. 이제, django 패키지를 설치하면 된다. (pyenv) pip3 install django 설치가 완료 되었다면, 같은 경로에 testproject 명칭의 django 프로젝트를 생성한다. (pyenv) django-admin startproject testproject 프로젝트 생성이 완료되면 방금 전 생성한 pyenv와 나란히 testproject 디렉토리가 생성된다. 그런 다음, testproject 디렉토리로 들어간다. (pyenv) cd testproject testproject 내부에 새로운 앱을 생성하기 위해 아래와 같이 명령어를 실행한다. (pyenv) python3 manage.py startapp testapp 현재 경로에 testapp 디렉토리가 새로 생긴 것을 확인할 수 있다. 이제 모든 가상환경 셋팅이 마무리 되었으며, 아래 명령어로 가상환경에서 빠져 나온다. (pyenv) deactivate 현재까지 생성된 디렉토리의 구성은 아래와 같다. Django 에 필요한 teplates, static 디렉토리 생성 Django View역할을 할 html 파일들이 위치할 templates 디렉토리와 img, css, js 등의 정적 파일들이 위치할 static 디렉토리를 생성하기 위해 앞서 생성된 testapp 디렉토리로 이동한다 # cd testapp templates, static 디렉토리를 생성한다. # mkdir templates static vscode 등에서 파일을 작성하거나 수정할 수 있어야 하기에 적절히 권한을 부여한다. # chown -R py.py templates static # chmod -R 705 templates static Django wsgi.py, setting.py 환경 설정 기본적인 django 설정을 위해 프로젝트 환경설정 디렉토리로 이동한다. # cd ../testproject (혹은) # cd /home/py/public_html/testproject/testproject wsgi.py 파일을 vi 로 연다. # vi wsgi.py 아래와 같이sys 모듈과 django.core.handlers.wsgi 모듈을 import한 뒤 프로젝트 디렉토리와 가상환경 모듈 디렉토리를 시스템 경로로 설정한다. import os import sys import django.core.handlers.wsgi sys.path.append('/home/py/public_html/testproject') sys.path.append('/home/py/public_html/pyenv/lib/python3.6/site-packages') from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'testproject.settings') application = get_wsgi_application() setting.py 파일을 vi 로 연다. # vi setting.py ALLOWED_HOSTS 에 접근 host 값을 추가한다. 모든 host가 접근 가능하도록 설정 하려면 '*'를 입력한다. INSTALLED_APPS 에 앞서 추가한 앱 이름을 추가한다. TEMPLATES 에서 DIRS 에 앞서 생성한 templates 디렉토리 경로를 입력한다. LANGUAGE_CODE 와 TIME_ZONE 을 설정한다. STATIC_ROOT 를 추가하고 앞서 생성한 경로를 입력 해준다. Apache Vritualhost에 Django 앱 연동 Apache Virtualhost에 django 앱을 연동하여 도메인 접속으로 웹에서 볼 수 있도록 연동한다. 연동에 앞서 먼저 apache 와 django를 연동해주는 아파치 모듈을 yum으로 설치한다. # yum install mod_wsgi virtualhost 설정파일을 열어 호스트를 추가한다. # vi /etc/httpd/conf.d/vhosts.conf 위 예시는 py.chanyeongpark.com 으로 접속시 django 프로젝트의 wsg.py를 참조하여 프로젝트와 static 디렉토리를 호스팅 하는 역할을 해준다. <VirtualHost *:80> ServerName py.chanyeongpark.com DocumentRoot /home/py/public_html ErrorLog /home/py/error_log CustomLog /home/py/access_log common WSGIScriptAlias / /home/py/public_html/testproject/testproject/wsgi.py <Directory /home/py/public_html/testproject> <Files wsgi.py> Require all granted </Files> </Directory> Alias /static /home/py/public_html/testproject/testapp/static <Directory /home/py/public_html/testproject/testapp/static> Require all granted </Directory> </VirtualHost> 아파치 재시작 후 웹브라우저에서 실행시 아래와 같이 화면이 나온다면 정상적으로 모든 설치가 완료된 것이다. urls.py 설정으로 index 화면 설정하기 아파치 설정 후 웹브라우저로 접속시 위와 같은 django 환영 페이지가 노출되는 이유는 urls.py 설정이 되지 않았기 때문이다. django는 urls.py 설정을 통해 간단하게 접속 url을 조작하여 controller 구성을 할 수 있다. urls.py가 route 역할을 한다고 보면 된다. 웹페이지가 구성되기 위해선 templates/index.html => 템플릿 파일 views.py => Controller 파일 urls.py => route 세 파일이 결합되어야 한다. 먼저, 템플릿 파일 생성을 위해 앱 디렉토리의 templates 로 이동한다. # cd /home/py/public_html/testproject/testapp/templates index.html 파일을 만든다. # vi index.html (예시에서 index.html 의 파일 내용은 'Hello World!!' 로 했다.) view.py 설정을 위해 프로젝트 설정 디렉토리로 이동한다. # /home/py/public_html/testproject/testproject 해당 경로 내에 view.py 파일이 없는 경우도 있는데, vi 로 파일을 새로 생성하면 된다. # vi views.py views.py 내용은 아래와 같이 작성한다. from django.shortcuts import render def index(request): return render(request, 'index.html') urls.py를 설정하기 위해 vi로 설정 파일을 연다. # vi urls.py urls.py 내용을 아래와 같이 추가한다. from django.contrib import admin from django.urls import path from . import views urlpatterns = [ path('admin/', admin.site.urls), path('', views.index, name='index'), ] from . import views (파일명) 로 방금 생성한 views.py를 import 했고, urlpatterns 에 path('', views.index, name='index') 를 추가하여 앞서 생성한 views.py 의 index 함수를 호출하도록 했다. views.index 함수 구문에 의해 index.html 이 render되어 브라우저에 출력 되는 것이다.
1