목록파이썬 (38)
훈훈훈

파이썬(python) 및 셀레니움을 사용하여 여행 상품 정보를 가져오는 크롤러를 만들어보았다. 크롤러 대상 사이트는 여행 상품을 판매하는 사이트인 마이리얼트립 사이트를 이용하였다. 시작하기에 앞서 크롤링에 대한 어느 정도 지식이 있다는 가정하에 설명을 하려고한다. 자세한 설명을 원한다면 아래 링크를 참고 해주길 바란다, - API를 활용한 음원 순위 차트 크롤링 https://wave1994.tistory.com/59?category=872867 - 암호 화폐 정보 크롤러 만들기 https://wave1994.tistory.com/58?category=872867 # 사이트 - https://www.myrealtrip.com/ # 대상 항목 아래 상품에 있는 상품 이미지, 상품 소개 그리고 위도 경도에 ..
# mysqlclient 설치 pip install mysqlclient - 가상환경에서 해당 명령어를 이용해서 mysqlclient 설치를 진행한다. # Database 생성 mysql> create database test character set utf8mb4 collate utf8mb4_general_ci; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 5 rows ..
# Why 인증 데코레이터 HTTP 프로토콜은 각각의 통신이 독립적이기 때문에 이전에 사용자가 인증을 했는지 알 수 없으며, 새로운 페이지로 넘어 갈떄마다 인증을 해줘야는 문제점이 있다. 이를 해결하기 위해 모든 클래스/함수에 인증 기능을 추가할 수는 있지만 코드가 복잡해지고 길어지기 때문에 인증 기능을 구현 후 데코레이터를 사용하는 것이 좋다, # 인증 데코레이터 클래스 import jwt import json from account.models import Account from mysite.settings import SECRET_KEY from django.http import JsonResponse class LoginConfirm: def __init__(self, original_functi..
장고(Django)를 이용하여 간단하게 회원가입과 로그인 기능을 구현한 API에 패스워드 암호화 및 토큰 기능을 추가해보았다. * 이전에 구현한 코드 https://wave1994.tistory.com/57 # models.py models.py 파일은 데이터베이스 테이블을 만들고 그 안의 필드들을 생성 및 수정할 수 있는 역할을 한다. from django.db import models class Account(models.Model): email = models.EmailField(max_length=100, unique=True) password = models.CharField(max_length=200) created_at = models.DateTimeField(auto_now_add=True..
# SECRET_KEY란 ? 장고(Django)에서 SECREET_KEY는 암호화 인증에 사용되는 비밀키이다. 이 값은 다른 프로젝트와는 다른 유일한 값으로 세팅되어야하며, 버전 컨트롤 시스템에서 제외되어야 한다. 만약 외부에 노출 시 보안 위협에 노출될 수 있기 떄문에 settings 파일에 저장하는 것이 아닌 외부에 따로 저장을 해야한다. 해당 키를 분리 방법으로는 환경 변수를 이용한 방법과 외부에 저장하는 방법이 있으며, 이번 장에서는 외부에 저장하는 방법을 소개하려고 한다. # secret.json 생성 { "FILENAME" : "secret.json", "SECRET_KEY" : "I'm secret !!", "DATABASES_HOST" : "127.0.0.1", "PORT" : "8080"..
# 문제 - 공통된 시작 단어(prefix)를 반환 # 풀이 def get_prefix(strs): if len(strs) == 0: return '' result = '' strs = sorted(strs) print(strs) for i in strs[0]: if strs[-1].startswith(result+i): result += i print(res) else: break return result # 해설 - 요소가 문자열인 리스트를 받아 알파벳 순으로 정렬 - strs = ['flue', 'fly', 'flower'] 일때 strs = sorted(strs) 을 하면 strs = ['flower', 'flue', 'fly'] 으로 정렬되는 것을 알 수 있음 - 그 후 첫번째 인덱스 문자열과 ..

# 인증(Authentication)과 인가(Authorization) - 인증 : 사용자의 신원을 확인하는 절차이며, 사용자 ID 와 Password를 받아서 등록된 사용자가 맞는지 검증하는 과정이다 - 인가 : 인증이 로그인 과정이라면 인가는 로그인 후 사용자에게 권한을 부여하는 과정이다. # API Token - 인증 방법의 한 종류, API Token을 발급하여 사용자 인증 - 장점 : API Token 탈취 시 탈취자는 API를 호출할 수는 있지만 ID/Password 는 알 수 없어 2차 피해 예방 가능 네트워크로 ID/Password 전송 시 공격자로부터 탈취당할 수 있음 - 발급 절차 : 사용자 인증(ID/Password) -> API Token 발급 -> API Token으로 사용자 인증..
# 문제 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환 ex) 1. input : abcabc / output : 3 ('abc'의 길이) 2. input : codding / output : 4 ('ding'의 길이) # 정답 def get_len_of_str(string): ''' dct : key(문자열 요소), value(인덱스) max_so_far : 가장 긴 단어의 길이 curr_max : 중복 발견 후 문자열 길이 저장 start : 중복된 요소의 인덱스 ''' dct = {} max_so_far = curr_max = start = 0 for index, i in enumerate(string): if i in dct and dct[i] >= start: max_so_far..