Django
CGI와 FastCGI 외부 애플리케이션과 웹 서버(nginx, apache)를 연결할 때 사용하는 interface는 보통 CGI. CGI는 Coomand Gateway Interface의 약자로 웹 서버와 외부 프로그램을 연결해주는 표준화된 프로토콜이다. 그러나 CGI는 클라이언트의 요청이 발생할 때마다 프로세스를 추가로 생성/삭제 하게 된다. → 성능저하 FastCGI는 몇 번의 요청이 들어와도 하나의 프로세스만을 가지고 처리하게 된다. → CGI에 비하여 오버헤드가 월등하게 감소 하지만 Python 에서는 이러한 WAS가 별도로 존재하지 않으며 그 대신 Python만의 Gateway Interface가 존재한다. WSGI란? Web Server Gateway Interface의 약자 CGI와 동일..
Django Exception Handling Django에서는 exception을 어떻게 handling 하고 있을까? 공식 문서에서 살펴보면 detail에 에러 메시지를 return 하는 방식으로 error response를 주고 있다. 하지만 error response를 custom 하고 싶다면? 잘 알려진 jsend의 error response를 보자. https://github.com/omniti-labs/jsend GitHub - omniti-labs/jsend: JSend is a specification for a simple, no-frills, JSON based format for application-level communicat JSend is a specification for ..
Django에서 User Password 변경할 때 user.set_password(password) user.save() django에서 user password를 set할 때 django.contrib.auth에서 제공되는 set_password Method 를 사용하여 비밀번호를 설정한다. 그리고 이렇게 설정된 user의 비밀번호는 장고의 default 암호화 알고리즘에 의해 암호화되어 저장된 것을 확인할 수 있다. 나는 장고의 비밀번호 암호화 알고리즘은 무엇인지, 그리고 다른 암호화 알고리즘에는 또 무엇이 있는지 궁금해졌고 이를 찾아보았다. 비밀번호 암호화 알고리즘 보통 비밀번호를 저장할 때 단순 텍스트 자체로 이를 저장하지 않는다.(이는 범죄나 다름없다고 함!) ‘단방향 해시 함수의 다이제스트(..
프로젝트를 진행하면서, drf으로 아이디와 비밀번호 찾기를 구현해보았다. 우리 프로젝트에서는 아이디를 이메일로 설정했기 때문에 아이디 찾기를 구현하기 어렵다는 문제가 있었다. 그래서 이메일 찾기는 이메일이 존재하는지 아닌지 만을 확인하여 띄워주고, 비밀번호는 이메일에 메일을 보내서 url로 연결한 다음 비밀번호 찾기를 하는 방식으로 구현하였다. 먼저 이메일 찾기 먼저 살펴보자. 이메일 찾기를 위한 serializer를 먼저 작성해보자. class EmailFindSerializer(serializers.Serializer): email = serializers.EmailField(max_length=64,required=True) 간단하게 이메일만을 받는 serializer를 작성하였다. 그 다음 vie..
DRF django restDRF django rest framework를 이용하여 email 인증을 구현하는 방법에 대해서 살펴보도록 하겠다. 회원가입 시 이메일 인증을 구현하기 위해서는 SMTP와 User의 is_active 속성을 활용한다. SMTP를 통해 보내준 메일의 링크를 통해서 인증을 완료하기 전까지는 is_active 속성을 False로 두고, 인증을 하는 순간 is_active 속성을 True로 변경하여 User를 인증한다. SMTP란? Simple mail Transfer Protocol이 약자로 인터넷에서 이메일을 보내기 위해 이용되는 프로토콜이다. SMTP 웹 메일을 통해서 토큰을 날려주어 인증을 구현한다. 설정하기 장고에서 SMTP를 활용하기 위해서는 1. gmail에서 IMAP를..
이번 3편에서는 django rest framework로 user detail 확인, 내 프로필 정보 확인을 구현하도록 하겠다. 앞서 UserSerializer를 그대로 사용하여, view와 url만 추가해줄 것이다! user_detail을 확인하는 view이다. @api_view(["GET"]) @permission_classes([IsAdminUser]) def user_detail(request, pk): try: user = User.objects.get(pk=pk) return Response(UserSerializer(user).data) except User.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) method가 GET..
Django Rest Framework으로 회원가입과 로그인 구현하기 2편에서는 views.py, serializers.py, urls.py의 코드를 살펴보도록 하겠다. 우선, 회원가입에 필요한 코드부터 살펴보겠다. serializers.py에서 구현한 UserSerializer이다. User = get_user_model() class UserSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True) class Meta: model = User fields = ( "id", #"username", "password", "gender", "nickname", "birthdate", "email", "a..
DRF django로 회원가입, 로그인을 구현하는 방법에 대해 설명하도록 하겠다. 여기서 유의할 점은, 우리 프로젝트에서는 id가 아니라 email을 username으로 사용하였다는 것이다. 이를 변경하고 싶은 분들이 참고하면 좋을 것 같다. 우선, model을 정의해야 한다. from django.contrib.auth.models import AbstractUser, AbstractBaseUser, BaseUserManager from django.db import models from django.conf import settings from django.contrib.auth.models import UserManager, PermissionsMixin # Create your models her..
앞서 살펴본 JWT를 통한 인증방식을 만일 제 3자에게 탈취당할 경우 보안에 취약하다. 만일 token의 유효기간을 짧게 한다면 사용자의 로그인 시간이 짧아져서 불편하고, 유효기간을 늘리자면 토큰을 탈취달할 때의 보안이 취약해진다. 그래서 나온 방법이 Access Token과 Refresh Token이다. 처음 로그인을 완료하였을 때 Access Token과 Refresh Token이 동시에 발급된다. 이 토큰은 긴 유효기간을 가지면서 Access Token이 만료됐을 때 새로 발급해주는 열쇠가 된다. 1. 사용자가 로그인을 한다. 2. 서버에서 DB와 값을 비교하여 로그인을 완료한다. 3. Access Token과 Refresh Token을 발급한다. 이때 일반적으로 회원 DB에 Refresh Toke..