How to show image, not download in nodejs express

const attachment = await AttachmentAPI.get_file_by_id(attachment_id); /* ... */ const filename = attachment.filename; const extension = filename.split('.').pop().toLowerCase(); /* ... */ res.contentType(`image/${extension}`); /* ... */ try { const content = await fs.readFileSync(attachment.path); res.end(content); } catch (error) { // Error Handling } Use res.end(), not res.send() OK?

How to connect to MySQL running in Docker

고등학교 때만 해도 'Docker는 어렵다!'라는 생각이 머릿 속에 박혀있던 탓에, Dockerizing을 하지 않았다. 그게 심지어 해킹대회 문제였을지라도 Linux의 기본 RWX 권한을 사용해 시스템을 구축했었다. docker-compose 라는 도구를 알게 되고, 회사에서도 반복적으로 Dockerizing을 한 결과 Docker를 능수능란하게 다룰 수 있게 되었다. Docker 안에 데이터베이스 서버를 넣고 해당 서버에 접속하기 위한 2가지 방법이 있는데 오늘은 그것을 까먹지 않기 위해 적어보려고 한다. 방법 1. mysql -h localhost -P 3306 --protocol=tcp -u root -p mysql-client에 --protocol 옵션을 사용해서 접속하는 방법. 방법 2. su..

Django How to delete superuser

Create Django Superuser $ python manage.py createsuperuser Delete Django Superuser (venv) $ python manage.py shell Python 3.7.6 (default, Jan 8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from django.contrib.auth import get_user_model >>> >>> User = get_user_model() >>> User.objects.get(usern..

Django Parsing Json in Function based view

Django를 사용해서 RESTful API를 만들 일이 많아졌는데, 이 때 function based view에서 어떻게 하면 자동으로 JSON 형식의 데이터를 파싱하고 Swagger(drf-yasg)에 API화 할 수 있는지 포스팅하려고 한다. settings.py REST_FRAMEWORK = { 'DEFAULT_PARSER_CLASSES': [ 'rest_framework.parsers.JSONParser', ] } app/views.py from django.http import JsonResponse from rest_framework.parsers import JSONParser from rest_framework.decorators import api_view, parser_classes ..

Django Customizing Default User Model

장고를 사용하다보면 User Model에 새로운 정보를 추가해야 할 상황이 생긴다. 가장 쉽고 간편한 방법은 ProxyModel을 만드는 것이지만, 굳이 그렇게 하고 싶지 않은 상황이 올 수 밖에 없다. 최근 이러한 경우가 생겨서 관련 내용을 포스팅해보려고 한다. User/models.py # coding: utf-8 from django.db import models from django.contrib.auth.models import AbstractUser, UserManager as BaseUserManager from django.core.exceptions import ObjectDoesNotExist from django.db.utils import IntegrityError class Use..

Javascript Nullish coalescing operator

자바스크립트를 사용하다 보면 undefined 때문에 뜨는 오류가 상당하다. 이를 해결하기 위해서 논리연산자를 사용하기도 한다. 이 경우 논리연산자는 다음과 같이 활용한다. let foo = undefined || "bar"; console.log(foo); // bar 만약 undefined 나 null 인 경우에는 논리연산자가 의도대로 작동하는 것을 볼 수 있으나, 만약 Falsy한 값이 온다면 프로그래머의 의도와는 반대로 작용할 가능성이 있다. 아래의 코드는 Falsy한 값이 왔을 때의 실행결과이다. let foo = 0 || 128; console.log(foo); // 128 let bar = false || "hi"; console.log(bar); // hi 이러한 상황을 해결하기 위해서 만..

Python3 requests에서 r.text와 r.content의 차이

1. 개요 Python3에서 불과 3~4년 전만 하더라도 urlib를 사용하여 HTTP 자원에 접근하는 코드가 많았지만, 이제는 거의다 requests 모듈을 사용하는 추세이다. 그만큼 requests 모듈의 편리성과 확장성이 Pythonic하다고 볼 수 있다. requests 모듈에서 HTTP Response에 접근하는 방법은 크게 두가지가 있다. 하나는 r.text이고 하나는 r.content이다. ※ 이 글에서 설명하는 내용은 다음과 같은 코드가 실행된 상태라고 가정한다. import requests url = 'https://www.example.com/' r = requests.get(url) 2. r.text r.text의 경우엔 HTTP Request를 보낸 URL에서 readable한 내용..

Django에서 Python Decorator 사용하기

데코레이터를 사용하면 여러줄의 코드를 여러번 작성할 필요없이 한줄만으로 특정한 메커니즘을 실행할 수 있다. from django.http import HttpResponse def only_admin(f): def check(request, *args, **kwargs): try: if request.user.admin is not True: return JsonResponse({ 'status': False, 'message': 'admin permission is required' }) except: return JsonResponse({ 'status': False, 'message': '\'sign in\' is required' }) return f(request, *args, **kwargs)..

백준 1018번 체스판 다시 칠하기 write-up

#!/usr/bin/env python3 # coding: utf-8 def set_plate(): n, m = map(int, input().split()) plate = [] for i in range(n): row = list(input()) plate.append(row) return n, m, plate def get_repaint(plate): result = [] row = [ ['W', 'B'] * 4, ['B', 'W'] * 4 ] for i in range(2): repaint = 0 for j in range(8): check = row[(i + j) % 2] for k in range(8): if plate[j][k] != check[k]: repaint += 1 result.app..