docker ps -a 사용하진 않지만 죽어있는 포트?까지 확인하기 ➜ 근데 여기서 암것도 안나옴
sudo netstat -tnlp
netstat : 현재 사용하고있는 TCP 포트를 조회(=TCP 통신을 진행중인 서비스 연결상태 확인)
t: TCP n:10진수 l:Listening(열림) p:port를 사용하고있는 프로세스 상세정보표시(root권한필)
state-listen 은 트래픽이 들어오고 있다는걸 의미하는듯
결과 확인하기
-local address 0.0.0.0은 특정 IP와 연결되어있지 않음을 의미
-foreign address 0.0.0.0은 아직 통신이 시작되지 않았음을 의미
-state: 현재 서비스의 연결상태
sudo service nginx down 아니고 sudo service nginx stop
➜ nginx 멈추고 포트 사용중지돼서
컨테이너 생성 명령어sudo docker run -d -p 80:80 httpd:latest 입력하고 sudo docker ps로 확인하면 잘된걸 확인할 수 있음 꺄하ㅏㅏ❤
http://127.0.0.1:8000/users/signup/ 로 username이 아닌 email 과 password를 포함한 json으로 POST 요청 보내서 회원 가입 처리를 해주세요.
-조건1. 회원가입 성공 시 “회원 가입이 완료되었습니다” 메세지를 Response 해주세요
-조건2. 회원 가입이 완료된 user 객체에서 생년월일 (date_of_birth column)은 필요하지 않습니다.
➜ user/models.py에서 관련 항목 모두 삭제
required_fields
-조건3 회원 가입이 완료된 user의 password는 해싱되어 있어야 합니다.
➜ user/serializers.py에서 회원가입에 사용되는 시리얼라이져에서 set_password(password)
password는 super()로 만들어진 게 아니라서 마지막에 꼭 save() 해줘야함
http://127.0.0.1:8000/users/api/token/ 로 username이 아닌 email 과 password를 포함한 json으로 POST 요청 보내서 accesstoken을 발급받으세요. (힌트: User model을 customize하세요)
➜ user/models.py 유저클래스에서 USERNAME_FIELD = 'email'
access token의 Payload에 아래와 같이 email과 token_message를 포함시키세요.
➜
1. user/views.py 에서 CustomTokenObtainPairView(TokenObtainPairView) 클래스 생성( 상속받는 뷰는 임포트해주기!)
https://django-rest-framework-simplejwt.readthedocs.io/en/latest/customizing_token_claims.html
2. user/serializers.py 에 추가해서 ##으로 둘러싸인 부분처럼 커스터마이징해주기
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
@classmethod
def get_token(cls, user):
token = super().get_token(user)
# Add custom claims
token['email'] = user.email
token["token_message"]="sparta_time_attack"
# ...
return token
근데 1,2 둘다 views.py에서 해도 된다고 공식문서에 나와있대서 그냥 views.py에서 했는데 잘 됨!
customized 된 user를 admin page에서 조회가 가능하도록 만들어보세요.(패스워드 해싱된 상태)
➜ admin.py에서 admin.site.register(MyUser) 추가(UserAdmin은 삭제)
https://github.com/kangtegong/timeattack
나 또 깃이그노어 안만들어서 다 올릴뻔했다ㅋㅋㅋ.ㅋ.ㅋㅋ..
git reset해서 해결하긴 했는데 HEAD붙이는건지 안붙이는 건지 헷갈려서 다시해봄
일단 스테이징
git restore --staged .
git reset HEAD
git reset HEAD -- & git reset HEAD -- .
git reset
다 되니까 당황스러운데..
무튼 HEAD는 현재 브랜치의 최신 커밋을 포인팅하는 거고 아까는 커밋을 하기 전 상황이라서 헤드 자체가 없어서? HEAD를 붙여서 리셋하려고 했을 때 명령어가 안먹었던 것 같고 지금은 아까 푸쉬하고 난 뒤의 상황이니까 헤드가 있어서 갈 곳이 있어서 가능한 것 같다
requirements.txt 만드는 것도 깜빡하고
리포 만들어놓고 연결 안해놓고 푸쉬하고.. 왜그래도대체ㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔ
def solution(n):
for i in range(n):
if n%(i+1) == 1:
return i+1
def solution(n):
return [x for x in range(1,n+1) if n%x==1][0]
➜ 리스트 축약식 잘 쓰는 사람보면 정말 짱멋있다 어떻게 저렇게 안헷갈리고 한줄로 딱 쓰는지 그리고 리스트인 점을 저렇게 잘 활용하다니.. 첫번째 원소를 꺼낸다니.. 와우..!
def solution(left, right):
total = sum(list(range(left,right+1)))
odd = 0
even = 0
for i in list(range(left,right+1)):
count = 0
for j in range(1,i+1):
if i%j==0:
count += 1
if count%2 != 0:
odd -= i
else:
even += i
return even+odd
➜ 제곱일 때만 홀수개가 나온다고 확신이 안들었는데 지금보면 왜 확신이 안들었는지 모르겠다 특히 잘 푼 답을 보면 더 그렇다^^
그리고 짝수인거랑 홀수인거랑 둘다 같은 변수에서 빼주면 되는데 왜 굳이 나눴는지 지금 보니 좀 그렇네..
def solution(left, right):
answer = 0
for i in range(left,right+1):
if int(i**0.5)==i**0.5:
answer -= i
else:
answer += i
return answer