자고 일어나니 새우 한마리가 탈피한 흔적이..
암수 누가 탈피했는지는 모르겠고..
포란춤은 구경도 못했으나..
울집 새우 사이즈 큰거는 난황이 차는걸로 보아 다 암인거같은데 탈피한 껍질 사이즈로 봐서는 암이 탈피한거같다

탈피한껍질 모양이 비교적 선명하다
좀더 확대해보면 놀라울정도로 새우 모양 그대로 남아있다

탈피하다 죽기도 많이 한다는데 죽은 개체는 보이지 않았다
내친김에 포란까지 되었으면 좋으련만..
지켜봐야겠다

'물생활' 카테고리의 다른 글

백점병? 곰팡이병?  (0) 2019.01.21
미니어항 준비  (0) 2019.01.19
19/01/14 새우 한마리 용궁가다  (0) 2019.01.14
19/1/12 여과기 교체 준비  (0) 2019.01.14
19/1/13 어항 대청소  (0) 2019.01.14

퇴근하고 오니 사쿠라새우 한마리가 용궁에 갔다ㅠ

뭐가 문제였을까..

어제 대청소하며 사이펀으로 바닥 구석구석 너무 청소해줘서 새우가 놀랐나..
몰리의 공격을 받았나.. 모르겠다.

미안하다 새우야ㅠ

'물생활' 카테고리의 다른 글

백점병? 곰팡이병?  (0) 2019.01.21
미니어항 준비  (0) 2019.01.19
사쿠라새우 탈피  (0) 2019.01.16
19/1/12 여과기 교체 준비  (0) 2019.01.14
19/1/13 어항 대청소  (0) 2019.01.14

기존 여과기 출수량이 현저히 떨어져 교체를 하기로 하였다.


+ 준비물

아마존 2구 기포기: SH-A3

Y분지

역류방지기

호스

스펀지 여과기: SF-2820 


기존 여과기를 바로 제거해버리면 박테리아때문에 안된다 하여 기존여과기와 새여과기를 보름정도 같이 두기로 했다.

기포기 또한 오래 사용하여 2구짜리로 교체해줬다.

검색해보니 아마존 SH-A3가 가성비 괜찮고 뽑기 운이 있다 했는데 뽑기를 잘한건지 큰 소음은 없었다.

(Tip. 2구 기포기를 1구만 사용하면 소음이 크다고 한다.)


현재 2구 기포기에 새여과기와 오래된 여과기 두개를 달아놨는데 기포기를 교체한 덕분인지 기존보다 출수량이 현저히 늘어났다.


두개중 새 여과기가 출수량이 더 많다.


첨엔 여과기만 교체할까 했는데 기포기도 같이 교체해주길 잘 한듯..


보름정도 후에 예전 여과기는 제거할 생각이다.




'물생활' 카테고리의 다른 글

백점병? 곰팡이병?  (0) 2019.01.21
미니어항 준비  (0) 2019.01.19
사쿠라새우 탈피  (0) 2019.01.16
19/01/14 새우 한마리 용궁가다  (0) 2019.01.14
19/1/13 어항 대청소  (0) 2019.01.14
준비물: 수이사쿠 사이펀, 페트병, 다시백, 

사이펀으로 바닥재에 쌓인 부유물들 다 빼주고 찌꺼기는 다시백에 거르고 어항물은 다시 어항에 부어주었다
이번에 구매한 수이사쿠 사이펀은 듣던 소문대로 괜찮았다
바닥재는 딸려오지 않고 부유물들만 빨려온다
출수량도 많지 않아 청소하기 제격이고 어항과 바닥 낙차가 크지 않아도 펌핑이 잘된다

어항청소후 한컷


'물생활' 카테고리의 다른 글

백점병? 곰팡이병?  (0) 2019.01.21
미니어항 준비  (0) 2019.01.19
사쿠라새우 탈피  (0) 2019.01.16
19/01/14 새우 한마리 용궁가다  (0) 2019.01.14
19/1/12 여과기 교체 준비  (0) 2019.01.14


지난 글에서 models.py를 이용하여 db를 생성한 적이 있다.

http://leopit.tistory.com/174?category=684110

 

DJANGO는 디폴트로 sqlite db를 사용하게 되어 있는데 django 자습을 하다 문득 궁금해졌다. MODEL에 정의한 필드들은 실제 DB에 어떻게 저장되는지..

 

그래서 sqlite보다는 더 익숙한 MYSQL을 연동해 보았다.

 

1. mysql 설치

- mysql 은 유료다. 무료인 mariadb를 설치하였다.

[root@leopit.com ~]# yum install mariadb-server
[root@leopit.com ~]# systemctl start mariad


이제 실제 사용할 mysql 유저 계정과 DB를 만들겠다.

자세한 메뉴얼은 MYSQL 관련 사이트에서 확인하기 바란다.

# 계정 생성

create user 'cert'@'%' identified by 'password';
create user 'cert'@'localhost' identified by 'password';

 

# DB 생성

create database pat;

 

# 권한주기

grant all privileges on *.* to 'cert'@'localhost';
grant all privileges on *.* to 'cert'@'%';

 

cert라는 계정과 pat이란 db를 만들었다.

장고랑 연결해주자

 

2. settings.py 설정

- 상단에 pymysql을 추가해주고 sqlite 부분을 주석처리 해주고 mysql 정보를 입력하였다.

import pymysql
pymysql.install_as_MySQLdb()

 

.

.

.

 

#DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#    }
#}

 

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'pat',
        'USER': 'cert',
        'PASSWORD': 'xxxx',
        'HOST': 'x.x.x.x',
        'PORT': '3306',
        'OPTIONS': {
            'read_default_file': './db.cnf',
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
        }
    }
}


 

3. DB 생성 및 확인

지난글에서 만들었던 models.py 내용이다. (클래스명만 변경)

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.

 

class testmodel(models.Model):
    name = models.CharField(max_length=50)
    title = models.CharField(max_length=50)
    content = models.TextField()
    cdate = models.DateTimeField(auto_now_add=True)

 

makemigration과 migrate 커맨드를 통해 DB 등록 진행

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

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

 

이제 실제 DB에 어떻게 테이블이 생성되었는지 보자

[root@leopit.com ~]# mysql -u cert -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 74
Server version: 5.5.60-MariaDB MariaDB Server

 

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

MariaDB [(none)]> use pat


Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

 

Database changed
MariaDB [pat]> show tables;
+----------------------------+
| Tables_in_pat              |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| pat_testmodel              |
+----------------------------+
11 rows in set (0.00 sec)

MariaDB [pat]> Ctrl-C -- exit!
Aborted
[root@cert-pat pat]#


 

 

장고에 필요한 기본적인 테이블과 models.py에 등록한 testmodel이란 테이블이 앱이름_testmodel 이란 테이블명으로 생성되어 있다. 테이블 안에 필드들도 살펴보자

MariaDB [pat]> desc pat_testmodel;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(50) | NO   |     | NULL    |                |
| title   | varchar(50) | NO   |     | NULL    |                |
| content | longtext    | NO   |     | NULL    |                |
| cdate   | datetime    | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

MariaDB [pat]> Ctrl-C -- exit!
Aborted

 

models.py에서 필드를 4개 선언했는데 5개가 생성되었다.

django에서는 Primary Key값이 자동으로 생성된다. id라는 필드명으로 PK가 생성되어져 있었다.

 

4. ADMIN 페이지에 DB 등록

앱 디렉토리 하단에 admin.py 를 아래와 같이 수정한다.

앱이름.models를 import 하고 models.py 에 입력한 testmodel 클래스명을 등록해준다.

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

 

from django.contrib import admin

 

# Register your models here.
from pat.models import *

 

admin.site.register(testmodel)

 

이렇게 하면 웹페이지에서 DB 확인이 가능하다.

http://자신의 URL/admin 으로 이동하면 로그인 계정정보를 입력하고 아래와 같이 테이블을 확인할 수 있다. 로그인 계정을 만들지 않았다면 python manage.py createsuperuser 커맨드를 통해 생성할 수 있다.

 

 

'Coding' 카테고리의 다른 글

로우코드와 노코드, 코딩 해방 가능한가?  (0) 2024.07.06
5. Django 글쓰는 폼 만들기  (0) 2018.12.30
4. Django DB 만들기  (0) 2018.12.30
Django 개발 흐름  (0) 2018.12.16
3. Django + Bootstrap  (1) 2018.12.16

간단히 글쓰는 폼을 만들어보겠다.


1. 글쓰는 폼 만들기

간단히 글쓰기 위한 폼을 만들어본다.

편리한 작업을 위해 bootstrap에서 제공하는 css를 활용하겠다.

bootstrap css는 아래 URL 참조 바란다.

https://getbootstrap.com/docs/3.3/css/


상기 URL에서 제공하는 기본 폼 태그를 Copy하여 html 파일을 하나 만들어준다.

앱 디렉토리의 template디렉토리 안에 생성해준다.

이 폼은 공지사항 등록용으로 사용할것이기에 Notice 라는 디렉토리를 추가로 만들어서 그 안에 생성하였다.


[root@leopit.com notice]# pwd

/home/root/pat/templates/pat/notice


html 페이지 상단에 staticfiles 로드를 해주고 css, js 경로를 수정해준다. 우선 웹페이지만 잘 열리는지 확인할것이므로 이상태로 두고 이 템플릿을 연결할 view페이지를 설정한다.

[root@leopit.com notice]# vim form.html
{% load staticfiles %}

<!DOCTYPE html>
<html>
  <head>
    <title>Notice - register</title>
    <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">
  </head>
  <body>
    <form>
      <div class="form-group">
        <label for="exampleInputEmail1">Email address</label>
        <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Email">
      </div>
      <div class="form-group">
        <label for="exampleInputPassword1">Password</label>
        <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
      </div>
      <div class="form-group">
        <label for="exampleInputFile">File input</label>
        <input type="file" id="exampleInputFile">
        <p class="help-block">Example block-level help text here.</p>
      </div>
      <div class="checkbox">
        <label>
          <input type="checkbox"> Check me out
        </label>
      </div>
      <button type="submit" class="btn btn-default">Submit</button>
    </form>
  </body>
</html>


앱디텍토리 하위에 있는 뷰파일을 수정하여 방금 생성한 form.html과 연결해준다.

뷰에 대한 상세한 내용은 아래 URL을 참고하기 바란다.


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


뷰페이지에서는 인자를 받을수도 있고 줄수도 있다.

우선 메뉴얼 예제에 있는 내용을 그대로 사용하겠다.


# -*- 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 DisplayMyPage(request): return render(request, 'pat/main.html', { 'welcome_text': 'Hello World!' }) def main(request): template = loader.get_template('pat/main.html') context = { 'latest_question_list': "test", } return HttpResponse(template.render(context, request)) def ntform(request): template = loader.get_template('pat/notice/form.html') context = { 'latest_question_list': "test", } return HttpResponse(template.render(context, request))

이 코드는 pat/notice/form.html 템플릿을 불러온후 context를 전달한다. context는 템플릿에서 사용하는 변수명과 python 객체를 연결하는 역할을 한다. 우선 외부에서 페이지가 정상적으로 열리는지만 테스트 할것이므로 더이상 수정하지 않고 이제 URL을 설정하자



외부에서 접근 가능한 URL이 있어야 할것이다.

템플릿, URL, 뷰, 모델 작업 순서에 대해 이해가 잘 안간다면 이전글(http://leopit.tistory.com/164?category=684110)을 참조하기 바란다.

프로젝트 디렉토리 하단에 있는 URL 파일을 연다.


아래와 같이 아까 생성한 뷰페이지를 MyAppView 클래스로 생성한후 notice/form.html 에 연결해준다. 외부에서 notice/form.html URL로 들어올 경우 MyAppView의 ntform 클래스를 실행해주겠다는 이야기이다.

from django.conf.urls import url from django.contrib import admin from pat import views as MyAppView urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^main/', MyAppView.main), url(r'^main.html/', MyAppView.main), url(r'^$', MyAppView.main), url(r'^notice/form.html$', MyAppView.ntform), ]


여기까지 한 후 웹 데몬을 실행해주고 외부에서 정상접근 되는지 확인해보자

[root@leopit.com leopit]# python manage.py runserver 0.0.0.0:8000 Performing system checks... System check identified no issues (0 silenced). December 30, 2018 - 17:22:52 Django version 1.11.17, using settings 'cert.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C.


외부에서 정상적으로 URL을 불러들인 모습이다.

다음장에서는 실제 Django DB에 데이터를 입력하기 위한 폼을 만들어 보겠다.





'Coding' 카테고리의 다른 글

로우코드와 노코드, 코딩 해방 가능한가?  (0) 2024.07.06
6. Django + Mariadb 연동 & APP DB 어드민 등록  (0) 2019.01.06
4. Django DB 만들기  (0) 2018.12.30
Django 개발 흐름  (0) 2018.12.16
3. Django + Bootstrap  (1) 2018.12.16


이전장에서 bootstrap 과 django를 다루어보았다.

이번장에서는 DB를 생성하는 방법을 다루어본다.


처음 django를 접하는 사람은 DB는 언제 어떻게 생성하지? 하는 궁금증을 가지게 된다.

Django에서는 models.py에 클래스를 정의하여 DB를 컨트롤 한다. 

기존에 웹프로그래밍을 했던 사람이라면 혼란스럽기도 하고 신세계이기도 할것이다.


이전장에서 pat이란 앱을 만들었다.

앱 디렉토리에 models.py가 존재한다.

[root@leopit.com pat]# ls
admin.py   apps.py   __init__.py   migrations  models.pyc  templates  views.py
admin.pyc  apps.pyc  __init__.pyc  models.py   static      tests.py   views.pyc
[root@leopit.com pat]#


DB를 생성하기 위해 models.py에 아래와 같이 필드를 추가하였다.

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.

class Notice(models.Model)
    name = models.CharField(max_length=50)
    title = models.CharField(max_length=50)
    content = models.TexeField()
    cdate = models.DateTimeField(auto_now_add=True)


간단히 이름/제목/내용/날짜 필드를 만들었다.

models 모듈에 속한 필드 클래스로 멤버를 선언하면 마이그레이션 후 자동으로 DB와 연결된다.

Field Type에 대한 상세한 내용은 Django 문서를 참조하기 바란다.

https://docs.djangoproject.com/en/1.8/topics/db/models/#fields


이제 makemigrations 명령어를 통해 마이그레이션 스크립트를 생성한다. 

수정/삭제/생성할 필드들을 스크립트로 생성하여 migrations 디렉토리에 저장하게 된다.

[root@leopit.com leopit]# python manage.py makemigrations Migrations for 'pat': pat/migrations/0001_initial.py - Create model Notice [root@leopit.com leopit]#


마지막으로 migrate를 하여 DB를 생성한다.

[root@leopit.com leopit]# python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, pat, sessions
Running migrations:
  Applying pat.0001_initial... OK
[root@leopit.com leopit]#


'Coding' 카테고리의 다른 글

6. Django + Mariadb 연동 & APP DB 어드민 등록  (0) 2019.01.06
5. Django 글쓰는 폼 만들기  (0) 2018.12.30
Django 개발 흐름  (0) 2018.12.16
3. Django + Bootstrap  (1) 2018.12.16
2. Django 설치편  (0) 2018.12.14

여행시기: 7월초

 

꽤 괜찮았던 캠핑장

캠핑 쥔장도 좋았고 시설고 괜찮음. 화장실이 아주 깨끗하게 관리됨, 주인장이 부지런해서 음식물쓰레기 넘치는걸 못봄

수영장과 방방이가 있어 아이들 좋아함

 

우리 사이트.. 좀 독립된 아늑한 자리.. 저 앞에 방방이가 보인다.

 

 

밑에는 이렇게 수영장이 있다. 물이 어찌나 차가운지.. 7월초라 아직은 무리.. 잠깐 입수했다 추워서 나왔다.

 

드넓은 잔디밭이 있다. 단체로 와서 예약해서 사용하는거 같은데
예약이 안되어 있으면 그냥 놀아도 되는듯..

캠핑장 전경

 

우리 사이트 가장 좋았던점. 나무 사이에 해먹 걸기 좋았음

 

저녁에 숯에 불붙히고 있는데 캠핑 주인장이 막걸리 좋아하세요? 하고 물었다.

왜물어보지? 생각하고 네 라고 했더니 막걸리를 한병 가져다 주셨다.

가평 잣막걸리.. 정말 맛있더라~~

주인장 최고!

 

'Trip' 카테고리의 다른 글

가평 햇살고요캠핑장  (0) 2018.12.28
가평 호명산캠프  (0) 2018.12.28
가평 맑은물소리캠핑장  (0) 2018.12.26
야인시대 캠핑장  (0) 2018.12.24
노산팔경 캠핑장  (0) 2018.12.22


여행시기: 10월 초


사이트가 너무 붙어 있다. 

구조가 좀 어수선 한듯..

사이트옆 주차는 안된다. 



나무가 울창하다. 한여름에도 시원할듯 


옆에 얕은 계곡이 있다. 물놀이를 할정도는 아니고 발 담글정도?

다슬기가 꽤 많아서 열심히 잡았다.


우리 사이트


불멍시간



'Trip' 카테고리의 다른 글

가평 녹천농원캠핑장  (0) 2018.12.28
가평 호명산캠프  (0) 2018.12.28
가평 맑은물소리캠핑장  (0) 2018.12.26
야인시대 캠핑장  (0) 2018.12.24
노산팔경 캠핑장  (0) 2018.12.22

여행시기: 6월 하순


사이트마다 데크로 구성되어 있다.

주인장이 밤마다 소독을 해서 그런지 모기가 없다.

사이트옆 주차는 불가하고 짐 내리고 차를 다시 밑으로 갖다 놔야 한다.

경사가 꽤 가파르다.


우리사이트.. 캠핑 주인장이 화로대 받침대도 가져다 주었다.


우리 사이트 옆 도로.. 경사가 꽤 가파르다. 차에서 짐 내릴때 전진으로 들어오면 트렁크 열자마자 짐 쏟아질듯. 후진으로 들어가야 한다. 짐 싫을때도 마찬가지


나무가 풍성하여 한여름에도 시원할듯. 밤마다 주인장에 모기 방역을 한다.




'Trip' 카테고리의 다른 글

가평 녹천농원캠핑장  (0) 2018.12.28
가평 햇살고요캠핑장  (0) 2018.12.28
가평 맑은물소리캠핑장  (0) 2018.12.26
야인시대 캠핑장  (0) 2018.12.24
노산팔경 캠핑장  (0) 2018.12.22

+ Recent posts