본문 바로가기

728x90

Python

(26)
[Django] Postgresql 연동하기 django는 default로 sqlite를 사용하여 데이터베이스를 생성합니다. 하지만 실제 서비스 런칭을 할 때에는 mysql 또는 postgresql을 많이 사용하기 때문에 django에서 postgresql을 설정하는 법을 알아보겠습니다. 우선, settings.py 코드 입니다. DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } 별다른 설정을 하지 않았다면 DATABASES는 위와 같이 설정되어있을 것입니다. 따라서 기존의 설정을 아래의 코드와 같이 바꿔줍니다. DATABASES = { 'default': { 'ENGINE': 'django.db.backends.po..
[Django] SMTP 이메일 보내기 이메일 인증은 유저의 이메일이 유효한지를 검사하는 경우 또는 유저를 인증하는 경우에 많이 사용됩니다. SMTP는 Simple Mail Transfer Protocol의 약자로 메일 전송을 위한 표준 프로토콜입니다. SMTP를 사용하여 메일을 보내는 법을 알아보겠습니다. 다음은 settings.py 코드입니다. ... EMAIL_HOST = 'smtp.gmail.com' EMAIL_POST = '587' EMAIL_HOST_USER = 'your-email@gmail.com' EMAIL_HOST_PASSWORD = 'your-password' EMAIL_USE_TLS = True ... EMAIL_HOST: 메일을 호스트 하는 서버입니다. EMAIL_PORT: HOST와 통신하는 포트번호입니다. EMAIL..
[Python] 데코레이터가 뭐야? 어떤 함수의 앞, 뒤에 꼭 넣어줘야 할 코드 또는 함수가 있는 경우 또는 함수를 수정하지 않고 추가 기능을 구현하고 싶을 때 데코레이터를 사용하여 구현할 수 있습니다. 다음은 변수를 입력받지 않은 데코레이터를 선언하는 방법입니다. def outer_function(function): def wrapper(*args, **kwargs): print('function start') return function(*args, **kwargs) print('function end') return wrapper outer_function에서는 함수를 변수로 입력받고, wrapper에서는 변수를 입력받습니다. function start와 function end 중간에 있는 function(*args, **kwargs..
[Django] HTTP_REFERER 사용하여 이전 페이지로 가기 좋아요 같은 기능을 개발할 때 좋아요를 누를 때마다 좋아요가 모여있는 곳으로 이동되면 불편하기 때문에 이전 페이지로 이동하게 됩니다. django에서는 어떻게 구현할 수 있을까요? 바로 HTTP_REFERER를 사용하여 구현할 수 있습니다. 우선 HTTP_REFERER는 HTTP 헤더 중의 하나로 HTTP_REFERER에는 현재 표시하는 웹페이지가 어떤 웹페이지에서 요청되었는지에 대한 정보를 가지고 있습니다. 예를 들어 [http://www.test.com/] 이하 A, [http://www.test.com/add_like] 이하 B라는 웹페이지가 존재할 때 A에서 B로 이동하게 될 때 HTTP_REFERER에는 A가 저장되게 됩니다. 따라서 HTTP_REFERER는 웹페이지 내적으로 이전 페이지로 이동..
[Django] models.py의 함수를 이용하여 subcategory 표현하기 django는 template 언어를 지원해주지만 전문적인 프로그래밍 언어는 아니기 때문에 break와 continue 같은 기능을 제공해주지는 않습니다. 따라서 views.py를 통해 template에 오브젝트를 보내줄 때에는 필요한 것들만 보내주는 것이 좋습니다. 다음은 category app models.py의 일부분입니다. class Category(models.Model): category_name = models.CharField(max_length=50, unique=True) is_available = models.BooleanField(default=False) def __str__(self): return self.category_name class Subcategory(models.M..
[Django] context_processor는 뭐야? django를 사용한 개발에 있어 모든 페이지에서 정보를 필요로 하는 경우가 있습니다. 예를 들어 header 부분에 표시하는 장바구니 상품 개수 같은 것이 있습니다. 이럴 경우 모든 app의 views.py에 그 정보를 넘겨주는 것은 효율적이지 않습니다. 이때 사용 가능한 기술이 바로 context_processor입니다. 다음은 Cart 앱의 model.py의 일부분입니다. ... class CartItem(models.Model): user = models.ForeignKey(Account, on_delete=models.CASCADE, null=True) product = models.ForeignKey(Product, on_delete=models.CASCADE) quantity = models..
[Django] AWS Lightsail 사용하여 프로젝트 공개 AWS Lightsail 적용에 있어 사용하는 명령어에 대해서 정리해보았습니다. $ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime 위의 명령어는 서울의 시간에 맞게 서버의 시간을 조정하는 명령어입니다. 기본 시간대는 미국 어딘가로 되어있습니다. $ sudo apt install python3-venv 우분투에서 파이썬 가상환경 설치하기 위해서 python3-venv 패키지를 설치해줍니다. $ mkdir projects $ mkdir envs $ cd envs $ python3 -m venv env $ cd ~/env/bin $ . activate 프로젝트를 저장할 projects 폴더와 가상 환경을 저장할 envs 폴더를 생성해줍니다. 폴더 생성 ..
[Django] Permission은 뭐야? 프로그램 개발에 있어 admin이 가지고 있는 권한, user가 가지고 있는 권한, staff가 가지고 있는 권한이 각각 다릅니다. 예를 들어 어떤 user가 다른 user가 생성한 게시물을 삭제할 수 있는 권한을 가져서는 안 됩니다. 이때 Django Rest Framework에서 사용 가능한 기능이 바로 permission입니다. 그중에서도 Custom Permission에 대해서 알아보겠습니다. 다음은 permission 코드입니다. # permissions.py class IsOwnerOrReadOnly(permissions.BasePermission): def has_object_permission(self, request, view, obj): if request.method in permis..

728x90