여행시기: 8월 중순


장점

수심은 낮지만 물놀이 가능한 계곡이 있다.

사이트옆 주차

풍부한 나무그늘 (여름에 짱)

아이들을 위한 방방이

소 염소 등 주인이 기르는 동물들도 볼수 있다.


단점

예약제이긴 한데 사이트번호를 예약하는게 아닌 정원에 대해 예약을 받고 먼저 좋은자리 차지하는 사람이 임자다

갠적으로 이런 시스템 별로..



물놀이~ 수심은 깊지 않아 가끔 보트바닥이 계곡 바닥 돌맹이에 걸린다.


쥔장이 기르는 동물..


방방이~


풍성한 나무들.. A-24 사이트가 한여름에 명당인듯


여름엔 나무그늘이 최고지~!


'Trip' 카테고리의 다른 글

가평 햇살고요캠핑장  (0) 2018.12.28
가평 호명산캠프  (0) 2018.12.28
야인시대 캠핑장  (0) 2018.12.24
노산팔경 캠핑장  (0) 2018.12.22
별밤캠핑장  (0) 2018.12.22

여행시기: 8월초


더운 기억밖에..

한여름엔 더워서 잠을 제대로 못잔다

수레에 짐 싫고 나르다 쓰러질뻔..

물놀이 시설이 있다



'Trip' 카테고리의 다른 글

가평 호명산캠프  (0) 2018.12.28
가평 맑은물소리캠핑장  (0) 2018.12.26
노산팔경 캠핑장  (0) 2018.12.22
별밤캠핑장  (0) 2018.12.22
라온캠핑장  (0) 2018.12.22

시기: 9월 중순


장점: 

- 밥줍기 체험을 해볼수 있다. 꽤 많이 주울수 있음

- 사이트옆 주차

- 피래미인가? 물고기 잡을수 있다.

- 아이들을 위한 방방이 놀이터


단점: 

- 물놀이 가능한 계곡이 조금 멀리 있다. 

- 나무 그늘 부족, 한여름은 더울듯..


그늘은 별로 없다. 한여름은 좀 더움..


좀 내려가면 계곡이 있긴 한데 물놀이를 할정도로 깊이가 있진 않다.

물고기들은 꽤 보였다.

밤줍기.. 돈내고 체험하는건 아니고 캠핑장 바로 옆에 밤나무들이 그득 있어서 떨어진밤들 주울수 있게 해준다. 우리가 주은밤만 이정도.. 알이 꽤 굵었다.


'Trip' 카테고리의 다른 글

가평 맑은물소리캠핑장  (0) 2018.12.26
야인시대 캠핑장  (0) 2018.12.24
별밤캠핑장  (0) 2018.12.22
라온캠핑장  (0) 2018.12.22
유명산 자연휴양림 캠핑장  (0) 2018.12.22


장점: 사이트옆 주차, 물놀이 계곡

단점: 여름엔 나무가 부족하여 그늘이 많지 않음



'Trip' 카테고리의 다른 글

가평 맑은물소리캠핑장  (0) 2018.12.26
야인시대 캠핑장  (0) 2018.12.24
노산팔경 캠핑장  (0) 2018.12.22
라온캠핑장  (0) 2018.12.22
유명산 자연휴양림 캠핑장  (0) 2018.12.22



장점: 

나무 그늘 풍부, 물놀이 충분히 할만한 계곡, 사이트 바로 옆 주차

아이들을 위해 그네도 있음


단점: 잘 모르겠다.




'Trip' 카테고리의 다른 글

가평 맑은물소리캠핑장  (0) 2018.12.26
야인시대 캠핑장  (0) 2018.12.24
노산팔경 캠핑장  (0) 2018.12.22
별밤캠핑장  (0) 2018.12.22
유명산 자연휴양림 캠핑장  (0) 2018.12.22




장점: 휴양림답게 나무가 많다. 여름을 시원하게 보낼 수 있는곳.


단점:

여름에 물놀이 가능한 계곡이 있긴 하나 딱 유아들 놀 수준

사이트 옆 주차가 안된다. 짐을 수레에 실어 꽤 먼곳까지 이동해야 한다.


'Trip' 카테고리의 다른 글

가평 맑은물소리캠핑장  (0) 2018.12.26
야인시대 캠핑장  (0) 2018.12.24
노산팔경 캠핑장  (0) 2018.12.22
별밤캠핑장  (0) 2018.12.22
라온캠핑장  (0) 2018.12.22

실전 프로젝트 개발 과정


 이전 시간에는 Django(이하 장고) 프레임워크를 활용한 개발 패턴에 대해서 정리했었다. 이번에는 김석훈 저자의 '장고를 활용한 쉽고 빠른 웹 개발 파이썬 웹 프로그래밍'이라는 서적에서 다루고 있는 기본적인 웹 애플리케이션 제작을 직접 해보고, 내용에 대해서 나름대로 정리해본다. 책에서는 본격적인 애플리케이션 개발에 앞서서 디자인을 먼저 수행하는데, 화면(UI) - 테이블(데이터베이스) - 로직 - URL 순서에 따라서 설계를 진행한다. 그리고 이전 포스팅에서 정리했던 것과 마찬가지로 개발 순서를 가이드하고 있다.


프로젝트 생성 - 모델 작성 - URL 작성 - 템플릿 작성 - 뷰 작성


프로젝트 생성 - 프로젝트 및 앱 개발에 필요한 디렉터리와 파일을 생성

모델 작성 - 테이블 관련 사항을 개발, modelsspy, admin.py

URL 작성 - URL 및 뷰 매핑 관계를 정의 urls.py

템플릿 작성 - templates 디렉터리 하위의 html 파일 작성

뷰 작성 - 제어 흐름 및 로직 개발 views.py


 실제적인 개발을 진행해보면 위 다섯가지 단계보다 조금 더 세세한 개발 패턴을 정의할 수 있다. 내 나름대로의 정리한 장고를 활용한 웹 개발은 아래의 사이클을 갖고있는 것 같다.


가상환경 설정(virtualenv) - 프로젝트 생성(startproject) - 프로젝트 설정(settings.py) - 기본 테이블 생성(migrate) - 수퍼유저 생성(createsuperuser) - App 생성(startapp)과 등록(settings.py) - 모델 작성(model.py) - Admin 사이트 반영(admin.py) - 테이블(DB) 반영(makemigrations, migrate) 및 확인 - URL 작성(urls.py) - 로직 작성(view.py) - 화면(UI) 작성(templates) 


 프로세스에 대한 전반적인 얘기를 해보자면, 맨 처음 장고를 활용한 웹 개발을 진행할 때는 위의 모든 과정을 수행해야한다. 그러나 장고 프로젝트는 내부에 다수의 앱을 보유할 수 있기 때문에 각 앱을 작성할 때에는 파란색 과정만 수행하면 된다. 추가적으로 맨 처음 가상환경 설정의 경우 효율적인 파이썬 개발환경을 구축하기 위한 과정인데 필수적인 부분은 아니다. 그러나 파이썬 개발 서적에서 가상 환경에 대해서는 적극 권장하고 있기 때문에 이에 대한 내용을 따로 정리했다. virtualenv에 대해서는 다음 포스팅을 참조하기 바란다. [virtualenv를 활용한 독립개발 환경 구축



 이어서 가상환경 설정 단계를 제외한 각 단계에 대해서 세세하게 정리해본다.

 프로젝트 생성(startproject) - 앞으로 진행할 프로젝트의 뼈대를 구성하는 것이다. 아래의 명령어 한 줄로써 프로젝트에 뼈대가 생성되는데, 동일한 디렉터리가 두 개가 상하 관계로 생성된다. 동일한 이름으로 인해 상위 디렉터리의 이름은 변경을 권장한다.

# django-admin.py startproject `projectname`


 프로젝트 설정(settings.py) - 이전 포스팅에서 알아봤던 settings.py 파일에 개발에 필요한 프로젝트 초기 설정을 해야한다. 크게는 DATABASES, TEMPLATES, STATIC, TIME_ZONE, MEDIA, LANGUAGE_CODE 정도가 되겠다. 이들 중 타임존이나 언어 설정의 경우에는 필수는 아니다. 장고에서 정적 파일은 아래와 같이 두 종류로 구분이 된다.

STATIC: 개발 리소스 정적 파일, MEDIA: 유저로 업로드한 모든 파일


 기본 테이블 설정(migrate) - 아직 테이블 작성을 하지 않았지만, 장고는 디폴트로 사용자와 사용자의 권한 그룹 테이블을 갖는다. 따라서 기존에 어떤 테이블을 작성하지 않았어도, 아래의 명령어를 통해 사용자 및 권한 그룹에 대한 테이블을 생성해야 한다.

# python3 manage.py migrate


 수퍼유저 생성(createsuperuser) - 관리자 권한을 갖는 슈퍼 유저를 생성한다.

# python3 manage.py createsuperuser


 App 생성(startapp)과 등록(settings.py) - 하나의 장고 프로젝트는 다수의 앱으로 구성되는데, 아래의 명령어를 통해 앱을 생성할 수 있다. 그리고 만들어진 앱 정보를 settings.py에 입력함으로써 프로젝트에 앱이 등록된다.

# python3 manage.py startapp `app name`


 김석훈 저자의 '장고를 활용한 쉽고 빠른 웹 개발 파이썬 웹 프로그래밍'이라는 서적에서 가장 기본적으로 제작해보는 Bookmark 앱에 대한 코드는 [Github 저장소]에 업로드했다. 또한 코드에 대한 상세한 내용은 주석을 통해 설명한다.



출처: http://taekho-nology.tistory.com/64 [태코놀로지]

'Coding' 카테고리의 다른 글

5. Django 글쓰는 폼 만들기  (0) 2018.12.30
4. Django DB 만들기  (0) 2018.12.30
3. Django + Bootstrap  (1) 2018.12.16
2. Django 설치편  (0) 2018.12.14
1. Django 개념알기  (0) 2018.12.06

이번장에서는 Django에 bootstrap frame을 사용해보겠다.


이전장에서 프로젝트 이름을 cert, 앱 이름을 pat으로 만들었다.

django template을 사용하기 위해 pat 디렉토리 하위에 static을 만들고 static 하위에 pat이란 이름의 디렉토리를 생성한다.

[root@leopit.com ~]# mkdir -p pat/static/pat

[root@leopit.com ~]# cd pat/static/pat


본인이 사용할 bootstrap template을 가져온다.

[root@leopit.com pat]# wget https://github.com/BlackrockDigital/startbootstrap-shop-homepage/archive/gh-pages.zip

[root@leopit.com pat]unzip gh-pages.zip

[root@leopit.com pat]# ls

404.html              gulpfile.js        register.html

bak                   js                 scss

blank.html            LICENSE            startbootstrap-sb-admin-gh-pages

charts.html          index.html     login.html         tables.html

css                   package.json       vendor

forgot-password.html  package-lock.json

gh-pages.zip          README.md


이 다음 앱 디렉토리 하위에 templates/pat 디렉토리를 생성한 후 index.html 파일 옮긴다.

본인의 경우 index.html 파일명을 main.html로 변경하였다.

[root@leopit.com ~]# mkdir -p ~/pat/templates/pat

[root@leopit.com ~]# cd /pat/templates/pat

[root@leopit.com pat]# mv ~/pat/static/pat/index.html ./main.html

[root@leopit.com pat]# ls

main.html


이제 html 파일의 css 경로를 바꿔주자

문서 최상단에 {% load staticfiles %} 을 추가해주고 각종 css 경로를 수정한다.

경로는 static 디렉토리 하위에 존재하는 bootstrap 템플릿 경로를 써주면 된다.


[root@leopit.com ~]# vi main.html

<!DOCTYPE html>

{% load staticfiles %}


   <title>SB Admin - Dashboard</title>

    <!-- Bootstrap core CSS-->
    <link href='{% static "pat/vendor/bootstrap/css/bootstrap.min.css" %}' rel="stylesheet">

    <!-- Custom fonts for this template-->
    <link href='{% static "pat/vendor/fontawesome-free/css/all.min.css" %}' rel="stylesheet" type="text/css">

    <!-- Page level plugin CSS-->
    <link href='{% static "pat/vendor/datatables/dataTables.bootstrap4.css" %}' rel="stylesheet">

    <!-- Custom styles for this template-->
    <link href='{% static "pat/css/sb-admin.css" %}' rel="stylesheet">

    <!-- Bootstrap core JavaScript -->
    <script src='{% static "pat/vendor/jquery/jquery.min.js" %}'></script>
    <script src='{% static "pat/vendor/popper/popper.min.js" %}'></script>
    <script src='{% static "pat/vendor/bootstrap/js/bootstrap.min.js" %}'></script>


이제 view.html을 수정하여 template을 연결해준다.


[root@leopit.com pat]# vim ~/pat/views.py

# -*- coding: utf-8 -*-

from __future__ import unicode_literals

from django.shortcuts import render

from django.http import HttpResponse

from django.template import loader


# Create your views here.

def index(request):

    template = loader.get_template('pat/main.html')

    context = {

        'latest_question_list': "test",

    }

    return HttpResponse(template.render(context, request))


외부에서 접근할 url을 설정하고 해당 url에 대한 html 파일을 연결해준다.

settings.py에 맨 하단에 STATIC_URL과 ROOT설정을 해준다.


STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'static')


마지막으로 collectstatic을 해주면 static/pat에 파일이 복사된다.

[root@leopit.com ~]# python manage.py collectstatic

Copying '/usr/lib64/python2.7/site-packages/django/contrib/admin/static/admin/css/base.css'

Copying '/usr/lib64/python2.7/site-packages/django/contrib/admin/static/admin/css/changelists.css'

Copying '/usr/lib64/python2.7/site-packages/django/contrib/admin/static/admin/css/dashboard.css'

Copying '/usr/lib64/python2.7/site-packages/django/contrib/admin/static/admin/css/fonts.css'

Copying '/usr/lib64/python2.7/site-packages/django/contrib/admin/static/admin/css/forms.css'

Copying '/usr/lib64/python2.7/site-packages/django/contrib/admin/static/admin/css/login.css'

Copying '/usr/lib64/python2.7/site-packages/django/contrib/admin/static/admin/css/rtl.css'

Copying '/usr/lib64/python2.7/site-packages/django/contrib/admin/static/admin/css/widgets.css'

Copying '/usr/lib64/python2.7/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt'

...



[root@leopit.com ~]# cd ~/static/pat

[root@leopit.com pat]# ls

404.html     css                   js            package-lock.json  tables.html

bak          forgot-password.html  LICENSE       README.md          vendor

blank.html   gh-pages.zip          login.html    register.html

charts.html  gulpfile.js           package.json  scss


마지막으로 데몬실행후 사이트 접근

[root@leopit.com ~]# python manage.py runserver 0.0.0.0:8000





'Coding' 카테고리의 다른 글

4. Django DB 만들기  (0) 2018.12.30
Django 개발 흐름  (0) 2018.12.16
2. Django 설치편  (0) 2018.12.14
1. Django 개념알기  (0) 2018.12.06
[PHP] 다운로드 구현시 파일이름에 [1] 등이 자동으로 붙어버리는 문제  (0) 2017.01.07

1. python, pip 설치/업그레이드

[root@leopit.com ~]# yum install python python-pip

[root@leopit.com ]# pip install --upgrade pip



2. Django 설치

[root@leopit.com ~]# pip install django

Collecting django

  Downloading https://files.pythonhosted.org/packages/09/2b/6c2d363e3d46307251a9d6bf74ec28543805bbcadf56ca729f4a04846914/Django-1.11.17-py2.py3-none-any.whl (7.0MB)

    100% |████████████████████████████████| 7.0MB 3.2MB/s

Collecting pytz (from django)

  Downloading https://files.pythonhosted.org/packages/f8/0e/2365ddc010afb3d79147f1dd544e5ee24bf4ece58ab99b16fbb465ce6dc0/pytz-2018.7-py2.py3-none-any.whl (506kB)

    100% |████████████████████████████████| 512kB 15.1MB/s

Installing collected packages: pytz, django

Successfully installed django-1.11.17 pytz-2018.7



3. 버전 확인

[root@leopit.com ~]# python -m django --version

1.11.17



4. 프로젝트 생성

[root@leopit.com ~]# django-admin startproject cert

[root@leopit.com ~]# cd cert

[root@leopit.com cert]# ls -al

합계 16

drwxr-xr-x  3 root root 4096 12월  6 19:29 .

drwxr-xr-x. 5 root root 4096 12월  6 19:29 ..

drwxr-xr-x  2 root root 4096 12월  6 19:29 cert

-rwxr-xr-x  1 root root  804 12월  6 19:29 manage.py



5. 관리의 편의성을 위해 투뎁스로 되어 있는 프로젝트를 원뎁스로 변경한다.

[root@leopit.com ~]# mv cert cert_tmp

[root@leopit.com ~]# mv cert_tmp/* ./

[root@leopit.com ~]# rmdir cert_tmp



6. 앱 생성

- 자 여기서.. 프로젝트와 앱의 개념을 이해 못하겠다면..
이전글을 다시 보자 -> http://leopit.tistory.com/160 

[root@leopit.com ~]# django-admin startapp pat

[root@leopit.com ~]# cd pat

[root@leopit.com pat]# ls

__init__.py  admin.py  apps.py  migrations  models.py  tests.py  views.py



7. 생성된 앱(tests) 추가

[root@leopit.com pat] vi ../leopit/settings.py

INSTALLED_APPS = [

    'pat',

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

]



8. 전역 설정

- 언어, 타임존변경

- 외부에서 접근 가능하도록 Allow_Hosts 변경

[root@leopit.com cert]# vim settings.py

LANGUAGE_CODE = 'ko-kr'

TIME_ZONE = 'Asia/Seoul'

ALLOWED_HOSTS = '*'



9. migrate 작업

migrate 명령은 INSTALLED_APPS 의 설정을 탐색하여, mysite/settings.py 의 데이터베이스 설정과 app 과 함께 제공되는 데이터베이스 migrations(나중에 설명하겠습니다) 에 따라, 필요한 데이터베이스 테이블을 생성합니다. 이 명령을 수행하면 각 migration 이 적용되는 메세지가 화면에 출력되는 것을 확인할 수 있습니다. 어떤 내용이 생성되었는지 궁금하다면, 데이터베이스 클라이언트로 접속한 후, \dt (PostgreSQL), SHOW TABLES; (MySQL), .schema (SQLite), SELECT TABLE_NAME FROM USER_TABLES; (Oracle) 을 통해 Django 가 생성한 테이블을 확인해 볼 수 있습니다.

[root@leopit.com ~]# python manage.py migrate

Operations to perform:

  Apply all migrations: admin, auth, contenttypes, sessions

Running migrations:

  Applying contenttypes.0001_initial... OK

  Applying auth.0001_initial... OK

  Applying admin.0001_initial... OK

  Applying admin.0002_logentry_remove_auto_add... OK

  Applying contenttypes.0002_remove_content_type_name... OK

  Applying auth.0002_alter_permission_name_max_length... OK

  Applying auth.0003_alter_user_email_max_length... OK

  Applying auth.0004_alter_user_username_opts... OK

  Applying auth.0005_alter_user_last_login_null... OK

  Applying auth.0006_require_contenttypes_0002... OK

  Applying auth.0007_alter_validators_add_error_messages... OK

  Applying auth.0008_alter_user_username_max_length... OK

  Applying sessions.0001_initial... OK



10. SuperUser 계정 생성

[root@leopit.com ~]# python manage.py createsuperuser

Username: leopit

Email address: leopit.kr@gmail.com

Password:

Password (again):

Superuser created successfully.



11. django 실행

[root@leopit.com ~]# ./manage.py runserver 0.0.0.0:8000

Performing system checks...


System check identified no issues (0 silenced).

December 06, 2018 - 19:33:09

Django version 1.11.17, using settings 'leopit.settings'

Starting development server at http://0.0.0.0:8000/

Quit the server with CONTROL-C.


12. 설치 완료


 

 

#참조

https://docs.djangoproject.com/ko/2.1/intro/tutorial02/


 

김석훈, 『Django로 배우는 쉽고 빠른 웹 개발 파이썬 웹프로그래밍, 한빛미디어 를 참고했다!


1)개념

Django(이하 장고)는 웹 프로그램 개발시 일반적으로 쓰이는 MVC 패턴을 따른다. MVC는 데이터, 사용자가 보는 인터페이스, 데이터 처리 로직을 모듈화 해서 설계하는 방식이다. UI디자이너와 개발자가 다루는 부분을 구분해서 작업의 효율을 높일 수 있는 방식이다. 장고도 이런 방식을 따르지만 용어가 조금 다르다.

장고에서는 MTV 패턴을 사용하며 이는 데이터를 의미하는 Model, 사용자 인터페이스를 의미하는 Template, 실제로 동작할 프로그램 로직인 View 세 가지 요소를 합친 것이다.


장고에서 웹클라이언트의 요청이 처리되는 과정은 다음과 같다.


1. 클라이언트로 부터 요청이 들어왔다!

2. URLconf 모듈을 이용해서 URL을 분석한다!

3. 분석한 결과로 해당 URL을 어떤 뷰가 처리할지 결정한다!

4. 지명당한 뷰는 자신의 로직을 실행하는데, 

5. 이 때 필요하다면 모델을 통해 데이터베이스 접근도 한다.

6. 뷰가 로직처리를 마치면 템플릿을 통해 클라이언트에게 보낼 HTML을 생성한다.

7. 최종적으로 뷰가 HTML파일을 클라이언트에게 보내 응답한다! 


2)Model(데이터베이스)

D장고에서는 ORM기법을 이용해서 쉽게 데이터베이스를 정의할 수 있다! ORM기법을 이용하면 Table을 만들때 데이터베이스 엔진의 종류에 상관 없이 테이블은 class로 테이블의 컬럼은 class의 속성으로 표현할 수 있다!


3)Template(UI)

템플릿 파일은 .html확장자를 가진다. settings.py파일에 정의된 TEMPLATE_DIR 및 INSTALLED_APPS에 등록된 경로 내에서만 검색하므로 저장 위치를 주의해야한다.


4)View(로직)

장고에서의 뷰는 함수나 클래스의 메소드로 작성한다. 웹 요청을 받고 HTML데이터나 리다이렉션 명령, 에러 메시지 등의 응답을 반환한다. 뷰 함수는 첫 번째 인자로 HttpRequest객체를 받고, 모든 처리 후에 최종적으로 HttpResponse 객체를 반환한다. HttpResponse클래스의 하위 클래스에는 HttpResponseNotFound 객체가 있어 에러를 반환할 수도 있다.



출처: http://doongkibangki.tistory.com/22 [둥기방기의 블로그]

+ Recent posts