라벨이 Python인 게시물 표시

(Python) Django 제네릭 뷰 오버라이딩

각 제네릭 뷰에서 제공하는 속성과 메소드가 많아서 모든 것을 설명하기는 어렵다. 여기서는 오버라이딩에서 자주 사용하는 속성과 메소드를 살펴보겠다. * 속성 오버라이딩 1. model 기본 뷰(View, TemplateView, RedirectView) 3개를 제외하고는 모든 제네릭 뷰에서 사용하는 속성이다. 뷰가 출력할 데이터가 들어 있는 모델을 지정한다. model 대신 queryset속성으로 지정할 수 도 있다. 다음 표현은 동일하다 model = Bookmark queryset = Bookmark.objects.all() 2. queryset 기본 뷰(View, TemplateView, RedirectView) 3개를 제외하고는 모든 제네릭 뷰에서 사용하는 속성이다. 뷰가 출력할 데이터가 들어 있는 모델을 지정한다. 출력대상이 되는 QuerySet객체를 지정한다. queryset속성을 지정하면 model은 무시된다. 3. template_name TemplateView를 포함해 모든 제네릭 뷰에서 사용하는 속성이다. 템플릿 파일 명을 문자열로 지정한다. 4. context_object_name TemplateView를 포함해 모든 제네릭 뷰에서 사용하는 속성이다. 템플릿 파일에서 사용할 컨텍스트 변수명을 지정한다. 5. paginate_by ListView와 날짜 기반 뷰에서 사용한다. 페이징 기능이 활성화된 경우에, 페이지당 몇 개 항목을 출력할 것인지 정수로 지정한다. 6. date_field 날짜 기반 뷰에서 기준이 되는 필드를 지정한다. 이 필드를 기준으로 년/월/일을 검사한다. 이 필드의 타입은 DateField 또는 DateTimeField 이어야 한다. 7. make_object_list 8. form_class FormView, CreateView, UpdateView 에서 사용한...

(Python) CSS selector

body > div.container > div:nth-child(1) > div.col-md-9.content > ul:nth-child(3) > li:nth-child(15) > a 에서 nth-child는 지원을 하지 않는다. 그래서 다음과 같이 변경한다. body > div.container > div:nth-of-type(1) > div.col-md-9.content > ul:nth-of-type(2) > li:nth-of-type(16) > a 이를 다음과 같이 변경가능하다. div > div.col-md-9.content > ul > li > a

(Python) CSS selector에서 점(.)과 샵(#)의 차이

#은 보통 id에 해당 하는 부분으로 html 파일에서 한 개만 존재 . 은 클래스 이름으로 해당 클래스를 여러 군데 사용할 수 있다.

(Python) 장고에서 객체를 문자열로 표현하기

장고에서 객체를 문자열로 표현하기 위해서, 파이썬 버전에 따라 다른 메소드를 사용합니다. 즉, 파이썬 2에서는 __unicode__() 메소드를, 파이썬 3에서는 __str__() 메소드를 사용합니다. 장고는 개발자의 편의를 위해 또 다른 방법을 제공합니다. 즉 파이썬 버전에 무관하게 하나의 메소드만 사용하게 하는 방식입니다. 1. 클래스 정의에 @python_2_unicode_compatible 데코레이터를 적용합니다. 2. 파이썬 3문법인 __str__() 메소드만을 사용합니다. (파이썬 2환경에서는 장고가 알아서 변환)

(Python) XPath Grammer

XPath is "(XML Path)" of abbreviation. This is query language that explore and select some part of XML document. In 1999, W3C make this and it is used in Java, Pytho, C# Unfortunately BeatifulSoup isn`t supported this XPath library. The XPath usage is similar with usage of CSS selector.(like my#idname) It is consist of four concept root node vs non root node -  /div is only choosing root div node in a document. - //div is every div node in a document choice attriute - //@href is choosing all href attribute node  ex) //a[@href='http://google.com] is choosing all node which is indicated to "google.com" in a document choice node according to location - (//a)[3] is choosing third link in a document. - (//table)[last()] is choosing last table in a document. - (//a)[position()<3] is choosing first and second link in a document. asterik(*) is every character node set, this is useful in every situation. - //table/tr/* ...

(python) selenium selector (multi elements)

There is scrapable library "BeautifulSoup" Selenium is almost same with "BeautifulSoup" but the difference is that Selenium can "DOM" attrubute in dynamic wep page. I will show you some example. ex) 1. driver.find_element_by_css_selector("#content") 2. driver.find_element_by_tag_name("div") If you have to select multi attribute not a single. you can use "elements" ( append character "s" above element of two example) the result value type is "LIST" ex) 1. driver.find_elements_by_css_selector("#content) 2. driver.find_elements_by_css_selector("div")

(Python) __unicode__함수

__unicode__()함수는 객체를 스트링으로 표현해주는 파이썬의 내장 함수로, 모든 객체가 기본적으로 갖고 있는 self.name속성값을 리턴한다. 파이썬3 버전에서는 __str__()함수로 대체되었다.

(Python) 정규표현식

*  . (Dot) -> 모든 문자 하나 *  ^(Caret) -> 문자열의 시작 *  $ -> 문자열의 끝 * [] -> [] 괄호 안에 있는 문자 하나, 예를들어 [akz]면 a 또느 k또는 z * [^ ] -> [] 괄호안에 있는 문자 의외의 문자하나, 만일 [^az] 라면 a와 b를 제외한 문자 하나 * * -> 0번 이상 반복, {0,}와 동일 * + -> 1번이상 반복, {1,}와 동일 * ? -> 0번 또는 1번 반복, {0, 1} 와 동일 * {n} -> n번 반복 * {m, n} -> 최소 m 번에서 최대 n 번까지 반복 * | -> 예를들어, A|B라면 A또는 B * [a-z] -> a에서 z까지 임의의문자, 즉 영문 소문자 한 개 * \w -> 영문,숫자 또는 밑줄(_) 한 개, [0-9a-zA-Z_]와 동일 * \d -> 숫자 한 개, [0-9]와 동일

(Python_Django) 템플릿 파일 인식

이미지
장고에서 템플릿 파일은  .html확장자를 가지며, 장고의 템플릿 시스템 문법에 맞게 작성합니다. 중요한점은 템플릿 파일을 적절한 디렉토리에 위치시켜야 한다는 것이다. 즉, 장고는 템플릿 파일이 적절한 위치에 있어야 템플릿 파일을 찾을 수 있다. 장고에서 템플릿 파일을 찾을 떄는 TEMPLATE 및 INSTALLED_APPS에서 지정된 디렉토리를 검색합니다. 이 항목들은 프로젝트 설정 파일인 global_ settings.py 파일에 정의 되어 있다.

(python) 정규표현식을 이용한 이미지 parsing

이미지
../img/friends/img로 시작해서 .gif로 끝나는 이미지만 파싱하고 싶다면 "\.\.\/img/friends/img.*\.gif" 에서 .* 는 앞의 문자열들이 한번 나오고 .gif사이에 어떤 문자가 와도 상관 없다고 이해하면된다.

(python) the difference children and descendent in Beautiful.

If you have the next <table>   <tr> </tr>  <tr> </tr>  <tr> </tr>  <tr> </tr>    <table>     <td></td>     <td></td>    </table> </table> If you call bsobj.find("table").children you can find only tr tags but if you call descendants you can find td tags

(python) BeautifuSoup library find() and findAll() (Crawling)

The most usage of methods are find() and findAll() in BeautifulSoup. If you use these methods, you can filter tags according to various attributes in HTML page. The next two methods show what parameters findAll(tag, attributes, recursive, text, limit, keywords) find(tag, attributes, recursive, text, keywords) the paramteres are mostly same in two methods. First, tag parameter can be string type or list type; Second, attributes parameters can be dictionary type and find a equivalent tag of them Third, recursive type is boolean. if it is True value, findAll()  search for children and children of children. If it is Fals value. it will find only first tag.(Default is True) Fourth, It is different that text parameter is not a tag attribute but text contents. for example, it can show how many "the clothes", (.findAll(text = "the clothes") and the next is it returns both James tag and Marry tag. .findAll("span", {"class":{"...

(python) BeautifuSoup library find() and findAll() (Crawling, 크롤링)

find() 와 findAll()는 BeautifulSoup에서 가장 많이 사용된다. 이 함수를 사용하면 HTML 페이지에서 원하는 태그를 다양한 속성에 따라 쉽게 필터링 할 수 있다. findAll(tag, attributes, recursive, text, limit, keywords) find(tag, attributes, recursive, text, keywords) 1. tag매개변수는 태그 이름으로 문자열 또는 리스트를 넘길 수 있습니다. 2. attributes매개변수는 속성으로 이루어진 파이썬 딕셔너리르 받고, 그중 하나에 일치하는 태그를 찾습니다. 3. recursive 매개변수는 불리언입니다 True이면 findAll함수는 일치하는 태그를 찾아 자식, 자식의 자식을 검색합니다. false이면 최상위 태그만 찾습니다.(default 는 True) 4. text매개변수는 태그의 속성이 아니라 텍스트 콘텐츠에 일치한다는 점이 좀 다릅니다. 예를들어, the clothes가 몇번 나타났는지 보려면 다음과 같이 나타냅니다. .findAll(text = "the clothes") 예를들어, James태그와 Marry태그를  모두 반환합니다. .findAll("span", {"class":{"green", "red"}})

(Python) DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. (해결법)

이미지
파이썬에서 특정 패키지 설치시 위와 같은 에러를 발생시키고 있었다. (when I tried to install a package which is pytest, some error is caused) 그래서 다음과 같은 명령어를 이용해 위 에러를 제거하려 하였다 (So I tried to remove this error with next command in macOS) $ pip install --ignore-installed six 그후 원래 설치하려던 pytest를 다시 설치하려 시도하니 (I tried to install again what I want to install prior package) 다음과 같은 에러가 발생하였다. (However error caused again) 위와 같은 에러가 발생하는 이유는 해당 파이썬이 설치된 Os가 Apple에서 제공하는 Homebrew로 설치되어 있기 떄문이다. 즉 파이썬에서 제공하는 pip 시스템과 다르기 때문에 에러가 발생한 것이다. ( The system python is managed by the OS vendor (Apple, Canonical, etc), and is meant to be used by other OS built-in tools. Having pip mess things up in the vendored python is dangerous. ) 그래서 --user옵션을 이용하여 설치하니 정상적으로 설치되었다. (The --user options wors well for my case) $ sudo -H pip install pytest

(Python) pytest 설치하기 (pytest installation in Mac OS)

The Java has a Junit Test Framework.(TDD) It is more generally used in Many Java Programmer. Python has a Pytest Test Tool. It will show you how to install the Pytest Framework. this python version is 3.6 and in Mac OS Before to install the package, you need to install pip Install pytest 1. run the following commnad in your command line: $ pip install -U pytest 2. check that you install the correct version : $pytest --version

(Python) 파이썬 모듈 만들기 (Kr)

Thrid Party 모듈을 공급하고 지원하는 기능은 파이썬 코드 재사용의 핵심 기술입니다. 그래서 파이썬은 개발자가 파이썬 설정에 모듈을 추가할 수 있도록 내장 기능을 제공합니다. 파이썬 표준 라이브러리에 포함된 커다란 모듈 컬렉션은 파이썬 핵심 개발자가 관리하며 많은 사람이 사용하고 원본이 훼손되지 않도록 유지됩니다. 그러므로 개발자가 표준라이브러리에 모듈을 추가하거나 제거하는 작업은 하지 말아야합니다. 그러나 모듈을 사이트패키지에 추가하거나 제거하는 작업은 가능합니다. 파이썬에서는 이와같은 작업을 위해 setup 모듈을 제공합니다. * setup.py이란 무엇인가??(What is setup.py?) ->setup.py is a python file which is usually tells you that module/package you are beneficial about to install has been packaged and distributed with Disutils, which is statndard for Python Modules. This allows you to easily to install Python packages. $ python setup.py install http://docs.python.org/install/index.html 즉, setup.py를 이용해 특정 모듈을 설치하거나, 모듈이나 패키지가 어디에 분포하고있는지 알려주는 표준라이브러리에 있는 파일이다. <setup.py를 이용하는법> 먼저 핵심 단어를 정의할 필요가 있다. package : 폴더/디렉토리가 __init__.py파일을 포함하고 있는것 module : .py확장자를 가지고 있는 파일 Distribution : 하나의 패키지가 다른 파일들과 어떠한 관계를 갖고 있는가 예를들어,  galaxy라는 패키지를 설치한다고 예를들어보자. $ git clo...

(Python) bool형

이미지
파이썬의 모든 객체는 참이나 거짓으로 평가될 수 있습니다. 0, 빈 내장자료구조, 빈 문자열, None등은 모두 거짓으로 평가됩니다. 그 밖의 모든 객체는 참으로 평가됩니다.

(Python) 함수

이미지
파이썬 함수는 다음과 같은 특징을 가진다. 1. def와 return이라는 두 가지 새로운 키워드가 사용된다. 2. 함수는 인자 데이터를 받을 수 있다. 3. 함수 코드와 주석을 붙일 수 있다. (여기서 주석이란 메모를 뜻한다.) 1. 파이썬 함수는 인터프리터가 객체의 유형을 신경쓰지 않는다는 것이다. 즉, 어떤 인자를 받거나 어떠한 객체의 유형을 return해도 신경쓰지 않는다. 파이썬 함수는 def키워드로 시작한다 해당 키워드는 define(정의하다)의 줄임말이라고 보면된다. 다음과 같이 시작한다. 파이썬에서는 문자열을 표현할시 여러 행으로 확장 할 수 없다. 줄바꿈을 할 시 해당 문자열이 종료한다고 생각한다. 문자열을 표현할 때 ' ', ""  "",  """   """" 세가지를 사용하는데 일반적으로 프로그래머는 문자열을 ' ' 이런식으로 사용하며, """ """ 이 의미는 주석으로 사용한다. 1-1. 함수는 인자를 받을 수 있다. 함수 맨 윗부분의 괄호안에 인자를 받을 수 있다. 위 그림처럼 letter이라는 인자를 받아 함수를 처리하고 있다. 함수를 처리하는 곳에 맨 아래부분에 보면 findingvowels라는 함수를 실행시키는데 "EveryBody"라는 인자를 넘긴다. 이 인자는 letter이라는 인자에 대입되어 위 함수가 처리된다. 즉, letter = 'EveryBody'가 된다고 볼 수 있다. 만약 위 함수에 인자를 여러개 넣는다고 가정해보자 즉, findingvowels('EveryBody', 'EveryBody2', 'EveryBody3') 이럴 경우 에러가 발생한다 왜냐하면 함수 선언에 letter이라는 인자 한개만 받고 있...

(Python) 튜플 (tuple)

이미지
튜플(tuple)은 리스트처럼 한 번 만들고 데이터를 저장한 다음에는 바꿀 수 없는 자료구조이다. 그럼 왜 튜플(tuple)을 사용할까? 바꿀 수 없는 자료구조가 유용할 때도 있습니다. 특정데이터가 바뀌지 않음으로 부작용을 줄일 수 있습니다. 1. 튜플 vs 리스트 차이점 : 리스트는 대괄호를 사용하지만, 튜플은 괄호를 사용합니다. type을 이용하면 만들어진 객체의 유형을 확인 할 수 있다. 그렇다면 튜플을 바꿀 수 있을까???? vowels[2] = 'I' 로 바꾸려 시도한다면 TypeError를 발생시키게 된다. 즉, 튜플 안에 있는 자료주는 한번 선언되면 바꿀 수 없다. <주의사항> 튜플을 만들 시 단일객체는 만들 수 없다. 다음예제를 보면 ('tuple')로 선언하게 되면 자료형이 str타입이된다. 그러나 콤마(,)를 붙이게 되면 튜플형 자료가 되는 것을 볼 수 있다.

(Python) Set 집합

이미지
파이썬 자료구조 형에는  list, dictionary, set 등 여러가지 자료구조가 존재한다. 그 중 중복된 자료를 포함하지 않는다는 특징을 가지고 있는 set에 대해 설명하겠다. 1. union 2. difference 만약 두 종류의 String형의 자료가 존재한다고 가정해보자. vowels = 'aeiou' word = 'hello' 위 두 자료에서 서로 포함하고 있지 않는객체를 구하고 싶다면 (차집합) difference를 이용하면 된다. 중요한 것은 for문을 사용하지 않고 두 객체의 차이를 구했다는 것이다. 물론 내부적으로는 for문이 사용될 것이라고 생각한다. 위 결과는 vowels에는 포함되어 있지만, word집합에는 포함하고 있지 않다. 수학에서 말하는 "차집합"이라고 보면된다.  difference를 호출하는 첫번째 쪽인 vowels를 기준으로 결과를 도출한다. 3. intersection 세 번째 집합메소드는 한 집합을 다른 집합메소드와 비교하여 어떤 공통 객체가 있는지 알려주는 intersection이다. 정리  파이썬의 집합은 중복을 허용하지 않는다. 딕셔너리처럼 set도 중괄호로 표기합니다. 하지만 딕셔너리는 키/값이 있는 반면 집합에는 키/값 쌍이 없어요. 대신 집합의 고유 객체를 콤마로 분리합니다. 딕셔너리처럼 집합도 순서를 유지하지 않습니다. 순서를 유지하지 않기 때문에 sorted 함수를 이용하면 시퀀스에 있는 객체를 포함하는 집합이 만들어진다. 이때 중복된 데이터는 제거된다.