[210617 TIL] Python

Choi Rim·2021년 6월 17일
0

Python

목록 보기
5/20
post-thumbnail

아파치 에러로그 파일 실시간 확인(ctrl+c 나가기)

sudo tail -f  /var/log/apache2/error.log  

chmod를 하위 폴더와 하위 파일들에 적용하기

chmod -R
  • -R 옵션을 적용해주면 됨

활용 - 수정구현

if 'id' in form:
    update_link = '<a href="update.py?id={}">update</a>'.format(pageId)
else:
    update_link = ''
  • id값이 있다면 update link가 update.py로 연결되게 하고 없다면 빈 공백이 뜨게 한다.
  • 본문에는 {update_link}에 format을 이용해서 위의 내용이 들어가게 한다.
<input type="text" name="title" placeholder="title" value="{form_default_title}"></p>
        <p><textarea rows="4" name="description" placeholder="description">{form_default_description}</textarea></p>
  • 버튼 값으로 form_default_title를 주고 pageId로 포맷시켜 디폴트 타이틀을 pageId로 하고 form_default_description의 디폴트값은 description값으로 해서 항상 기본값이 표시되게 한다.
<input type="hidden" name="pageId" value="{form_default_title}">
  • input type을 hidden으로 주면 버튼이 사용자가 찾을 수 없게 숨겨진다.
import os
os.rename('data/'+pageId, 'data/'+title)
  • os.rename을 이용해 pageid와 title를 바꿔준다.
  • os.rename이라는 함수는 os라는 모듈에 소속되어 있기 때문에 import os를 선언해준다.
#!/usr/bin/python3

import cgi
form = cgi.FieldStorage()
title = form["title"].value
description = form["description"].value

opened_file = open('data/'+title, 'w')
opened_file.write(description)
opened_file.close()

print("Location: index.py?id="+title)
print()
  • 사용자가 타이틀을 수정하면 수정한 내용을 전송해 파일을 수정하는 위 내용에서 PermissionError가 일어났다.
  • chomod -R 777 을 이용해 data 디렉토리의 하위 파일에도 권한을 주니 에러가 해결되었다.
    후...

활용 - 삭제구현

if 'id' in form:
    delete_action = '''
        <form action="process_delete.py" method="post">
            <input type="hidden" name="pageId" value="{}">
            <input type="submit" value="delete">
        </form>
    '''.format(pageId)
else:
    delete_action = ''
  • id값이 있다면 delete_action이 실행되어 delete버튼이 보이게 하고 없다면 빈 공백이 뜨도록 한다.
  • 밑 본문에는 지금까지와 마찬가지로 format을 이용해 버튼을 구현한다.
import os
os.remove("ChangedFile.csv")
print("File Removed!")
  • process_delete 파일을 생성해 os.remove를 통해 파일을 삭제하도록 한다.

문법

함수

a = 1
b = 2
c = 3
s = a + b + c
r = s / 3
print(r)

2.0

  • a,b,c의 평균 값을 구하는 식
    이 식을 함수로 만들어보자
def average():
    a = 1
    b = 2
    c = 3
    s = a + b + c
    r = s / 3
    print(r)

average()

2.0

  • def를 통해 함수를 선언하고 함수명을 입력한 후 ()를 쓴다. 그리고 함수를 선언한 후 : 밑에 함수 호출 시 실행할 실행문을 입력한다.
  • 함수명() 로 함수를 호출할 수 있다.
  • 함수를 통해 코드를 획기적으로 줄일 수 있고 코드의 개선 또는 변경이 쉬워진다.
def average(a, b, c):
    s = a + b + c
    r = s / 3
    print(r)

average(10, 20, 30)

20.0

  • def average(a, b, c):
    함수를 사용하는 쪽과 함수가 구현된 쪽 사이에 매개자 역할을 하는 변수를 매개변수(parameter)라고 부른다.
  • average(10, 20, 30)
    함수의 입력값으로 전달한 값들을 인수(argument)라고 한다.
    인자는 함수 정의에 사용되는 변수를 말하고 인수는 함수의 호출에 사용되는 변수를 말한다.
    생활코딩 강의에서는 인수를 인자라고 부르던데 찾아보니 인자가 parameter이고 인수가 argument라고 하네요.. 뭐가 맞는지는 모르겠지만 헷갈리니까 매개변수 == parameter, 인수 == argument라고 알고있겠습니다.
  • 매개변수를 설정하면 함수 호출 시 함수의 인수에 입력한 값이 매개변수로 전달된다.

활용 - 함수

def getList():
    files = os.listdir('data')
    listStr = ''
    for item in files:
        listStr = listStr + '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)
    return listStr
  • 함수를 이용해 코드의 가독성을 높일 수 있다.

모듈

서로 연관된 변수, 함수, 객체를 그룹핑하는 거대한 수납상자

# math.py

def average(a, b, c):
    s = a + b + c
    r = s / 3
    return r 

def plus(a,b):
    return a + b

pi = 3.14

print(average(1, 2, 3))
# moduel.py

import math

print(math.average(1, 2, 3))
  • import를 통해 math라는 모듈을 가져온다는 선언을 한다.
  • 모듈.함수() 를 통해 함수를 호출하면 잘 동작한다.

활용 - 리팩토링

# view.py

import os
def getList():
    files = os.listdir('data')
    listStr = ''
    for item in files:
        listStr = listStr + '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)
    return listStr
# index.py

import view

.format(listStr = getList())
  • view.py 파일에 함수를 정의하고 index.py 파일에 import view로 view 모듈을 사용한다고 정의하면 view.py 안에 정의한 함수가 index.py파일에도 적용된다.
  • 모듈을 이용하면 하나의 모듈로 많은 파일에 있는 함수의 유지 보수가 쉬워진다.
    모듈 참 좋은 아이네

활용 - 보안(XSS)

사용자가 자바스크립트 코드를 추가한다면 우리는 원하지 않은 창을 볼 수 도 있다. 그것을 예방하여 사용자가 <script></script> 태그를 추가하면 자바스크립트 태그가 아닌 단지 텍스트로 읽히게하는 방법이 있다.

description = description.replace('<', '&lt;')
description = description.replace('<', '&gt;')
  • 이렇게 본문에 <나 >를 입력하면 '<'나 '>'로 인식하여 자바스크립트 태그를 사용하지 못하도록 할 수 있다.

문법

Pypi, 패키지 매니저 PIP

sudo apt-get install python3-pip
pip3 install html-sanitizer
  • pip를 설치한 후 pip를 이용해 html-sanitizer을 설치한다.
import html_sanitizer
sanitizer = html_sanitizer.Sanitizer()
description = sanitizer.sanitize(description)
  • sanitizer을 이용해 css나 자바스크립트 코드로 오염시켰을 수도 있는 사이트를 깨끗하게 만들 수 있다.

API

API는 Application Programming Interface의 약자입니다. Computer Programming의 부품들은 print, listdir, format과 같은 함수들 입니다. 우리는 이것을 응용해서 컴퓨터가 기본적으로 제공하지 않는 새로운 기능을 만들 수 있게 됩니다. application이라는 말은 응용, 활용이라는 뜻이 있는데 이렇게 기존의 기능을 응용해서 새로운 기능을 만든다는 점에서 우리가 만든 것을 application이라고 부릅니다. program이라는 말은 시간의 순서에 따라서 일어나는 일들을 의미합니다. 이런 점에서 우리가 만든 것을 program이라고도 부릅니다.

  • application == program
  • application programming interface란
    application을 구현하기 위해서 시간의 순서대로 배치해야 할 기능들을 의미.

<참고>

profile
https://rimi0108.github.io/

0개의 댓글