Python/* Django

2. URL Conf 및 정규표현식

포꾼 2017. 12. 11. 17:58

Regular Expression (정규표현식)

- 문자열 패턴, 규칙, Rul을 정의하는 방법 

- 이를 통해, 문자열 검색이나 치환작업을 간편하게 처리 가능

- 파이썬3 정규표현식 라이브러리 re 모듈을 지원


예시

최대 3자리 숫자 : "[0-9]{1,3}" 혹은 "\d{1,3}"

휴대폰번호 : "010[1-9]\d{7}"

한글이름 2글자 혹은 3글자 : "[ㄱ-힣]{2,3}"

성이 "이" 인 이름 : "이[ㄱ-힣]{1,2}" 


1글자 패턴 예시

숫자 1글자 : "[0123456789]" 또는 "[0-9]" 또는 "\d"

알파벳 소문자 1글자 : "[abcdefghijklmnopqrstuvwxyz]" 혹은 "[a-z]"

알파벳 대문자 1글자 : "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]" 혹은 "[A-Z]"

알파벳 대/소문자 1글자 : "[a-zA-Z]"

16진수 1글자 : "[0-9a-fA-F]"

문자열의 시작을 지정 : "^"

문자열의 끝을 지정 : "$"

한글 1글자 : "[ㄱ-힣]"


반복횟수 지정

"\d?" : 숫자 0회 또는 1회

"\d*" : 숫자 0회 이상

"\d+" : 숫자 1회 이상

"\d{m}" : 숫자 m글자

"\d{m,n}" : 숫자 m글자 이상, n글자 이하 


휴대폰 번호를 판단하는 정규표현식

# 11자 (01012341234),  10자 (0111231234) [011,016,017,018,019] 과거 휴대폰 번호 존재

import re


val = "01012341234"

pattern = r"^01[016789][1-9]\d{6,7}$"

if re.match(pattern, val):

print ("휴대폰 번호 포맷 일치")

else:

print ("휴대폰 번호 포맷 불일치") 



URL Conf

- 프로젝트(askdjango) setting.py에 URLConf 모듈을 지정한다.

ROOT_URLCONF = 'AskDjango.urls' 

- 특정 URL과 뷰 매핑 List

- Django 서버로 Http요청이 들어올 때마다, URLConf매핑 List를 처음부터 끝까지 순차적으로 훝으며 검색한다.

- 매칭되는 URL Rule을 찾지 못할경우, 404 Page Not Found 응답을 발생 시킨다.


예제1

# blog/urls.py

url(r'^sum/(?P<x>\d+)/$', views.mysum) # (?P)영역 문자열 정규표현식을 적용하여 \d+패턴에 부합된다면 x라는 변수명을 인자로 넘기겠다.


# blog/views.py

def mysum(request, x):

return HttpResponse(int(x))

> x라는 인자 1개를 넘겨 받아 처리


예제2

# blog/urls.py

url(r'^sum/(?P<x>\d+)/(?P<y>\d+)/$', views.mysum)


# blog/views.py

def mysum(request, x, y):

return HttpResponse(int(x) + int(y))

> x,y라는 인자 2개를 넘겨받아 덧샘하여 return


예제3

# blog/urls.py

url(r'^sum/(?P<x>\d+)/(?P<y>\d+)/(?P<z>\d+)/$', views.mysum)

url(r'^sum/(?P<x>\d+)/(?P<y>\d+)/$', views.mysum)

url(r'^sum/(?P<x>\d+)/$', views.mysum)


# blog/views.py

def mysum(request, x, y=0, z=0):

     retrun HttpResponse(int(x) + int(y) + int(z))


예제4

# 인자가 여러개인 경우

url(r'^sum/(?P<numbers>[\d/]+)/$', views.mysum)


# blog/views.py

def mysum(request, numbers):

    return HttpResponse(sum(map(int,numbers.split('/'))))


# blog/urls.py (이름, 나이 인자 받기)

url(r'^hello/(?P<name>[ㄱ-힣]+)/(?P<age>\d+)$', views.hello)


# blog/views.py

def hello(request, name, age):

    return HttpResponse('안녕하세요. {}. {}살이시네요'.format(name,age)) 




"""본 내용은 AskDjango VOD, "장고 차근차근 시작하기" 강의내용을 참고하여 작성했습니다.(https://nomade.kr/)"""

반응형