장고에서 slug 사용하기

개요

slug는 의미있는 URL을 만드는데 사용되며, 블로그의 주소에서 주로 볼 수 있습니다.

정의

짧은 라벨로서, 문자, 숫자, 밑줄 또는 하이픈만을 포함. 일반적으로 URL에 사용. 예를 들어, 블로그 엔트리 URL은 다음과 같다고 할 때,
https://www.djangoproject.com/weblog/2008/apr/12/spring/
마지막 부분(spring)이 슬러그입니다.
출처: 용어 | Django 문서 | Django

이 글의 제목이 '장고에서 slug 사용하기'인데 이 글의 URL을 예로 들어 보겠습니다.

  • http://blog.jiktong.kr/1234
  • http://blog.jiktong.kr/%uC7A5%uACE0%uC5D0%uC11C%20slug%20%uC0AC%uC6A9%uD558%uAE30
  • http://blog.jiktong.kr/장고에서-slug-사용하기

마지막 예시가 slug입니다.

환경

  • Django 2.2.1

장고 models.py에서 slug

from django.db import models
from django.utils.text import slugify

class MyModel(models.Model):
  title = models.CharField(max_length=50)
  slug = models.SlugField(max_length=201, db_index=True, unique=True, allow_unicode=True)
  created = models.DateTimeField(auto_now_add=True)

  class Meta:
    ordering = ['-created']
    index_together = [['id', 'slug']]
  • allow_unicode=True 영문을 제외한 다른 언어도 사용할 수 있도록 합니다. => 한글지원
  • db_index=True 해당 필드를 인덱스 열로 지정합니다.
  • index_together = [['id', 'slug']] 'id'와 'slug'필드를 묶어서 색인하는 '멀티 컬럼 색인'을 지원합니다.

장고 urls.py에서 slug

from django.urls import path

from . import views

urlpatterns = [
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

MariaDB(MySQL) 외부 접근 허용|금지하기

개요

데이터베이스를 처음 설치하면 내부(localhost)에서만 접근이 가능합니다.
HeidiSQL과 같은 데이터베이스 관리툴에서 외부(카페24 가상서버)에 운영중인 데이터베이스에 연결하려면, 서버에 외부 접근에 필요한 설정이 필요합니다.

사용환경

외부 서버의 데이터베이스에 접근하기 위한 관문(조건)

  1. 방화벽 접근 정책 추가
  2. database의 접근 권한 부여
  3. mysqld의 Listen IP대역 변경

외부 접근 허용하기

방화벽 접근 정책 추가

방화벽을 운영중인 경우에만 해당합니다.

카페24 가상서버는 관리자 페이지에서 방화벽을 관리합니다.
방화벽이 활성화(on)되어 있다면 'Inbound 접근 정책'에 3306 포트를 추가합니다.

추가내용

  • 이름: mariadb
  • 프로토콜: tcp
  • 포트: 3306

아래와 같이 설정내용이 추가됩니다.

NO 이름 프로토콜 포트 접근허용 IP 접근 차단 IP 관리
3 mariadb tcp 3306 ANY [Rule 삭제] [차단IP추가]

database의 접근 권한

데이터베이스 사용 계정은 root 보다 '다른 계정'을 만들어 사용하는 것이 안전합니다.

  1. 외부 접근 계정을 추가합니다.

모든 IP에 대해 접근을 허용하기 위해 '%'를 사용했습니다.
특정 IP대역에 대해 허용하려면 '111.222.%'를 사용합니다.

CREATE USER 계정이름@'%' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON 데이터베이스이름.* TO 계정이름@'%';
FLUSH PRIVILEGES;

마지막에 FLUSH PRIVILEGES는 현재 실행중인 세션에 변경 내용을 적용하기 위해 실행합니다.

  1. 확인

mysql에 로그인한 후 아래 명령어를 실행합니다.

mysql> SELECT Host,User,password FROM mysql.user;

mysqld의 Listen IP대역 변경

  1. 현재 상태를 확인한다.
$ netstat -ntlp | grep mysqld

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      19688/mysqld
  1. 원본 백업
sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf_org
  1. Listen IP대역 변경
    이래 내용을 찾아 바꿔줍니다.

bind-address = 127.0.0.1 <= 수정 전
bind-address = 0.0.0.0 <= 수정 후

sudo vim /etc/mysql/my.cnf
bind-address        = 0.0.0.0
  1. mysql 재시동
$ sudo /etc/init.d/mysql restart
$ netstat -ntlp | grep mysqld

tcp        0      0 0.0.0.0:3306          0.0.0.0:*               LISTEN      19688/mysqld

외부 접근 금지

위에서 지정한 내용을 모두 해제합니다.

방화벽 접근 정책 삭제

Rule삭제 버튼으로 추가 했던 Inbound 접근 정책을 삭제합니다.

MariaDB 사용자 계정 삭제

외부 접근을 위해 추가된 계정이라면 해당 계정을 삭제합니다.

DELETE FROM mysql.user WHERE Host='%' AND User='계정이름';
FLUSH PRIVILEGES;

mysqld의 Listen IP대역 변경 취소

  1. 원본 복원
sudo cp /etc/mysql/my.cnf_org /etc/mysql/my.cnf

vim을 이용해 직접 수정해도 됩니다.

  1. mysql 재시동
$ sudo /etc/init.d/mysql restart
$ netstat -ntlp | grep mysqld

tcp        0      0 0.0.0.0:3306          0.0.0.0:*               LISTEN      19688/mysqld

참고

'database' 카테고리의 다른 글

관계 대수의 기본 연산자  (0) 2019.06.02
MariaDB(MySQL) 외부 접근 허용|금지하기  (0) 2019.05.09

환경설정에서 공유로 이동합니다.

컴퓨터 이름 오른쪽 끝에 편집 버튼을 선택하면 아래 그림과 같이 로컬 호스트의 이름을 바꿀 수 있습니다.



맥에서 파이썬 사용환경 만들기


homebrew 설치


homebrew 설치 디렉토리 설정

.bash_profile 추가

export PATH=/usr/local/bin:/usr/local/sbin:$PATH




python, python3 최신버전 설치

설치경로 확인은 which 사용한다.



pip와 pip3는 brew로 python을 설치할 경우 함께 설치된다. #2017년 1월 18일 수정

굳이 pip를 설치하려면

$ sudo easy_install pip

또는 $ sudo easy_install pip3



virtualenv 설치

$ sudo pip install virtualenv

또는 $ sudo pip3 install virtualenv


가상환경 구성

$ virtualenv -p python env27

또는 $ virtualenv -p python3 env36

'python & django' 카테고리의 다른 글

장고에서 slug 사용하기  (0) 2019.05.09
파이썬 사용환경 만들기  (0) 2017.01.14
파이썬의 정수 나누기 연산  (0) 2016.11.29
우분투에서 장고1.4 설치하기  (0) 2014.10.29
파이썬의 정수 나누기 연산에 대해 정리입니다.

파이썬의 사칙연산은 + - * /(나누기)가 있고,
나누기 연산은 // % /를 사용한다.

몫을 구할때 //
나머지 구할때 %
나누기는 /로 이해하자.

나누기 연산 중에 헷갈리는 연산자가 있는데 바로 몫 구하기

Python 2.7.10 (default, Jul 30 2016, 18:31:42)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 3//2
1
>>> 3/2
1

위와 같이 차이가 없어 보인다.
하지만, 실수 연산을 해 보면 구분할 수 있다.
실수 연산을 위해 __future__를 임포드하는 방법도 있다.

>>> from __future__ import division
>>> 3//2
1
>>> 3/2
1.5

이제야 몫과 나머지가 구분이 된다.

파이썬3에서의 연산
Python 3.5.2 (default, Oct 11 2016, 04:59:56)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 3//2
1
>>> 3/2
1.5


그 외에 몫과 나머지를 돌려주는 함수
>>> 1.5
1.5
>>> divmod(3,2)
(1, 1)
>>> a,b = divmod(3,2) #a는 몫, b는 나머지
>>> a
1
>>> b
1


맥북프로를 사용한 지 반년이 되어 간다.
맥에 익숙한 터라 잘 사용하고 있었는데
요즘 들어 command나 option의 사용이 불편하다.

특히 한영전환, 복사, 붙여넣기를 할 때 실수가 잦다.

평소 기계식 키보드에 대한 로망이 있어 프로젠 기계식 키보드를 사들였는데
이게 윈도우용 키보드다.
내 불편은 윈도우용을 보조 키보드로 사용하면서 시작됐다.

왜? 맥을 위한 기계식 키보드가 없는지… 맥용 기계식 키보드를 본 기억이 없다.

윈도우용 키보드를 맥에서 사용하려면
option 키 대신 Alt 키와, command 키 대신 Windows 로고 키를 사용하면 된다.

간단하다. 누구나 알고 있다.

하지만, 맥북 키보드와 보조 키보드를 혼용하는 경우
command와 Windows 로고 키의 위치가 달라 맥용과 윈도우용 키보드가 바뀔때 마다 헷갈린면!

보조 키보드의 Windows 로고 키와 Alt 키의 동작 키값을 바꾸길 권한다.
즉, option 키 대신 Windows 로고 키와, command 키 대신 Alt키를 사용해 보자.

더 이상 헷갈리지 않는다.

보조 키보드 혼용할 때 설정 방법
1. 한영전환은 Karabiner(https://pqrs.org/osx/karabiner/)을 이용해 스페이스 바 오른쪽 키를 이용한다. 맥북은 오른쪽 command, 보조 키보드는 한/영키를 사용할 수 있다.

2. 맥북 및 윈도우에서 시프트키를 두 번 눌러 Alfred(https://www.alfredapp.com) 실행한다.

3. 시스템 환경설정/키보드/보조 키보드에서 option과 command 키에 대한 동작을 변경한다.



끝!



고양이 임보를 시작한지 두달이 되어 간다.
‘아메리칸 코카스페니엘’과는 함께 살아봤는데, 고양이는 어떤지 잘 몰라 하나 하나 알아 가는 중.

그 중 첫 번째가 고양이는 불러도 오지 않는다는 것!

임보하고 있는 고양이 이름이 ‘소리’인데

“소리야"
“소리야"
“소리!"
“쏠" 하다가
“쏘리"로 끝난다.

고양이는 자기가 관심이 있는 경우에만 쳐다본.. 아니 지켜본다는 것이 맞는 표현인 듯.

밥에 연어나 조개 살 비벼줄때~
“미양~ 미양~”거리며 엄청 친한 척한다.

나쁜 xx시키

아참 소리는 수컷이다. 그리고 남자를 더 좋아한다. 밥 주는 사람보다 남자라니~


이렇게 생겼다.



고양이 처음 키우면서 좋았던 점은
화장실 모레에서 대소변 보는 것
각자 생활을 한다는 것
우리는 서로 놀고 싶을때만 함께 논다. 그 외에는 각자 자기의 삶을 즐긴다.

소리의 하루 일과
1. 잠자기 - 아직 어려서 그런지 하루 종일 잠만 잔다.
2. 뛰어 다니기 - 하루 두번 15분 정도 에너지를 발산한다.
3. 실 찾아 물어 뜯기 - 실밥이 풀리는 천은 기가막히게 찾아서 뜯어 놓는다.

이 녀석 이쁜 만큼 인내와 이해가 필요하다.


'생활일기' 카테고리의 다른 글

임보 중인 고양이 ‘솔(Sol)'  (0) 2016.09.06
세계의 건물들  (0) 2014.12.08
실전 HDR의 시작  (0) 2011.04.20
'내 감정 조절법'에 나오는 '벽을 넘는 기술'  (0) 2011.02.03

/* 추상클래스는 상속을 강제하기 위한 것이다.
 *
 * - 용도 -
 * 다양한 맥락으로 사용할 필요가 있을때 추상클래스로 만들어
 * 추상클래스에서는 공통적인 로직을 구현하고
 * 상속받는 사용하는 용도에 따라 달리지는 부분을 구현하기 위한 용도로 사용
 *  */

package com.actionshin.javastudy;

abstract class Calculator {
    int left, right;
   
    public void setOperands(int left, int right) {
        this.left = left;
        this.right = right;
    }
   

    int _sum() {
        return this.left + this.right;
    }
    int _avg() {
        return (this.left+this.right)/2;
    }


    public abstract void sum();
    public abstract void avg();
   
    public void run() {
        sum();
        avg();
    }
}

class CalculatorDecoPlus extends Calculator {
    public void sum() {
        System.out.println("+ sum"+_sum());
    }
    public void avg() {
        System.out.println("+ avg"+_avg());
    }
}

class CalculatorDecoMinus extends Calculator {
    public void sum() {
        System.out.println("- sum"+_sum());
    }
    public void avg() {
        System.out.println("- avg"+_avg());
    }
}

public class CalculatorDemoAbstract {
    public static void main(String[] args){
        CalculatorDecoPlus c1 = new CalculatorDecoPlus();
        c1.setOperands(10, 20);
        c1.run();
       
        CalculatorDecoMinus c2 = new CalculatorDecoMinus();
        c2.setOperands(10, 20);
        c2.run();
    }
}

'android' 카테고리의 다른 글

추상클래스를 사용하는 이유  (0) 2014.12.23
실행중인 액티비티의 상태를 확인하기  (0) 2014.12.23
두 액티비티 간 생명주기  (0) 2014.12.23
클래스 변수의 용도  (0) 2014.12.18

+ Recent posts