portfolio (19) 썸네일형 리스트형 장고와 레디스 루아스크립트로 선착순쿠폰 만들기 1. 장고 스레드로 선착순쿠폰을 만들려고했는데 동시성 문제로 인해 레디스 루아스크립트를 채택하였다 레디스는 싱글스레드라 루아스크립트로 작성하면 atomic하게 처리한다 이를 통해 동시에 발생하는 여러 요청에서도 쿠폰 발급이 정확하게 처리되도록 보장할 수 있다 SADD -> coupon_id 중복을 방지한다(coupon_id는 uuid로 하였다) SCARD -> 쿠폰 수를 반환해 인자로 받아올 쿠폰 개수를 3개로 제한한다. generate_coupon_script = redis_client.register_script("""local generated_coupons_key = KEYS[1]local coupon_id = ARGV[1]local limit = tonumber(ARGV[2])local ttl.. 레디스(redis)와 익스프레스(express js)로 프로모션쿠폰 API생성 레디스는 키-값 형식이어서 객체로 저장후 => json.stringify() 메서드를 사용해 json데이터로 직렬화시켜준다. app.post("/couponOn", async (req, res) => { try { // 본문에 post요청할때 const { discountAmount, ttl } = req.body; if (!discountAmount || discountAmount 할인금액을 연산시켜주려면 parse() 메서드를 사용해 json데이터를 다시 객체로 역직렬화 해준다. if (couponData) { const origin = 70000 // 직렬화한 json 데이터를 다시 parse메서드로 역직렬화후 객체로 만들어서 할인된금액으로 연산 co.. 파이썬 셀레니움을 통한 웹스크래핑 자동화(1. 스크롤기능, 2. 페이지네이션기능) 1. 픽셀을 더하면서 스크롤을 통해 자동으로 수직으로 내려간다. 파이썬에서 자바스크립트를 제어하려면 execute_script() 메서드를 사용해야한다.# 스크롤기능 모듈화 def scroll_next(): scroll_pixels = 500 # 각 스크롤 단계마다 스크롤할 픽셀 수 current_scroll_position = 0 # 처음 픽셀수0에서 시작 여기서 500씩 더해진다 while True: # 스크롤 실행 # window.scrollTo(0.500) x,y 수직 스크롤 #execute_script 메서드는 주어진 JavaScript 코드를 브라우저에서 실행 driver.execute_script("window.scrollTo(0, {});".format(current_scroll_posit.. HTML, CSS , image slider js웹디자인 포트폴리오 사진 출저 - 쿠팡 사이트 연두색으로 칠한 부분 1번이 dt 태그이고 나머지 번호들은 dd 태그이다 모두 dl태그로묶어서 그룹을 지었다. 4번 부분은 grid를 쓰는 줄알았는데 float:left로 지정하고 overflow:hidden으로 되어있었다.(추후에 grid로 수정하였다.) 그리고 마진과 패딩은 0으로 지정했다. 쿠팡 사이트를 보고 크롬웹개발자 도구를사용해 html,css일일이 체크해서 제작하였다. 3번부분 이미지 슬라이더는 7초동안 딜레이를 줘서 자동으로 넘기게 설정하였다. // "promotion" 클래스를 가진 요소 안에 있는 모든 img 요소를 선택합니다. const slides = document.querySelectorAll(".promotion img"); // 슬라이드 인덱스를 0.. Django + Postgresql (트라이그램 유사성을 이용하여 유사한단어 검색하기) 예를들어 내용검색 중 검색 단어를 "리눅스 명"을 오타로 "리늑스 명"이라고 검색하면 "리눅스 명"과 "리늑스 명"은 유사한 단어이지만, 하나의 글자만 다르기 때문에 트라이그램은 세 개의 유사한 연속된 문자열을 찾을 수 있다. 예를 들어, "리눅스 명"은 '리눅', '눅스', '스 명'과 같은 트라이그램을 가지며, "리늑스 명"도 '리늑', '늑스', '스 명'과 같은 트라이그램을 가진다. 1. form.py # 검색을 위해 검색 form을 만든다class SearchForm(forms.Form): query = forms.CharField() 2. view.py # 검색 요청 viewdef post_search(request): form = SearchForm() # 쿼리와 결과는 .. Django + Postgresql (ORM에서 searchVector를 이용하여 모델의 여러 필드검색), RSS feed 제작 1.SearchVector 객체를 이용해 제목 및 내용에 포함된 단어를 검색 할 수 있다. 1-1. 명령어 python manage.py shell orm으로 'django'를 검색하고 있다. 이때 searchVector를 이용하여 여러필드를 검색할 수 있다. 2. RSS feed 웹피드는 최근 업데이트 된것을 보기좋게 보여주는 XMLimport markdownfrom django.contrib.syndication.views import Feedfrom django.template.defaultfilters import truncatewords_htmlfrom django.urls import reverse_lazyfrom .models import Post class LatestPos.. Django 템플릿페이지에서 form태그 제출로 이메일보내기(게시글공유) -정보처리기사 실기공부에서 배운내용 SMTP - 로컬에서 이메일을 보내기위한 프로토콜, 기본포트번호는 25번 SSL/TLS - 클라이언트와 서버간의 웹데이터를 암호화해주고 무결성을 보장해주는 암호화프로토콜 0. settings.py 설정해준다EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'ID' EMAIL_HOST_PASSWORD = 'PASSWORD' EMAIL_PORT = 587 EMAIL_USE_TLS = True 1. MVT패턴으로 코딩(모델은 여기서 생략) 1-1클라이언트 요청 view에서 form 필드 값을 is_valid()를 통한 유효성검사를 한다. 유효성검사를 통과한 cd 데이터는 f스트링으로 데이터와 문자열을 합쳐서 send_mail()안에 데이터.. Django 댓글 비활성화 클라이언트 요청 view에서 activate를 Ture값을 주어서 댓글을 표시한다. activate모델 값은 Boolean형식이라 False이거나 admin페이지에서 댓글을 수정하여 비활성화체크를 하면 부적절한 댓글을 숨길 수 있다.def post_detail(request, year,month,day,post): post = get_object_or_404(Post, status=Post.Status.PUBLISHED, slug=post, publish__year=year, publish__month=month, publish__day=day) comments = post.comments.filter(activate = True) form = CommentForm() return render(reque.. 이전 1 2 3 다음 목록 더보기