_공부하는/python

(Django, AWS) 로그인 API 만들기

흰 the JohFam 2022. 1. 3. 15:14

참고) 서버개발자가 되는법 [3] - API만들기, 로그인부터 만들자

로그인 API 만들기

  • 서버 requirements과 로컬 동기화

 

  • login 앱 생성 후 migrate 오류
django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

-> settings.py와 mysql password가 같지 않을 경우 생기는 오류

 

미해결 오류

더보기
$ mysql -u root -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
$ sudo vim /etc/mysql/my.conf
# /etc/mysql/my.conf
[client]
socket = /var/lib/mysql/mysql.sock
[mysql-server]
socket = /var/lib/mysql/mysql.sock

참고) ubuntu에 Mysql 설치 후 root 접속에러

[MYSQL] 일반적인 오류를 해결하는 유용한 정보들

 

 

  • login/views.py, login/urls.py, mysite/urls.py 수정

테스트로 POST 요청 404 오류

# login/views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import LoginUser

class RegistUser(APIView):
    def post(self, request):
        user_id = request.data.get('user_id', "")
        user_pw = request.data.get('user_pw', "")
        LoginUser.objects.create(user_id=user_id, user_pw=user_pw)
        data = dict(
            user_id=user_id,
            user_pw=user_pw
        )
        return Response(data=data)

# login/urls.py
from django.urls import path
from . import views

urlpatterns = [
    # ~/signup 호출하면 RegistUser 호출
    path('signup', views.RegistUser.as_view(), name='signup'),
]
#클래스를 기반으로한 view의 경우에는 클래스명.as_view() 로 표현

# mysite/urls.py
from django.contrib import admin
from django.urls import path, include
from main import views as main_views

urlpatterns = [
    path('', main_views.index, name="index"),
    path('admin/', admin.site.urls),
    path('login/', include('login.urls')),
]

참고) django 장고에서 배포한후 실개발환경에서 urls.py 수정후 라우팅적용반영안될때

uwsgi 서버 껐다 키는걸로 해결

$ git pull
#로컬에서 수정한 파일 받고
$ sudo service uwsgi restart
#서버 재시작해서 변경된 라우팅(urls.py 수정) 적용

 

비밀번호 검증 기능 추가

단방향 암호화 비밀번호 만들기

from django.contrib.auth.hashers import make_password

def post(self, request):
    user_id = request.data.get('user_id', "")
    user_pw = request.data.get('user_pw', "")
    user_pw_crypted = make_password(user_pw)

    LoginUser.objects.create(user_id=user_id, user_pw=user_pw_crypted)

    data = dict(
        user_id=user_id,
        user_pw=user_pw_crypted
    )

    return Response(data=data)


카카오 로그인 기능 추가

참고) django에서 kakao 로그인 api 사용하기 +(allauth 사용)