[DRF] <Level Three> Django REST Framework - 4. Django-ALLAuth

Alex of the year 2020 & 2021·2020년 9월 3일
0

Django Rest Framework

목록 보기
14/15
post-thumbnail

Django-ALLAuth

이번에는 Django-Allauth를 이용해보자.

1) pip install django-allauth 이후 pip freeze > requirements.txt
2) 이후 settings.py로 와서 INSTALLED_APPS에 다음을 추가한다.

'allauth',
'allauth.account',
'allauth.socialaccount',

allauth는 상당히 강력하므로 이 셋을 추가하여 일반적인 SNS(ex. facebook, twitter)에서의 authentication을 진행할 수 있다.

또한 INSTALLED_APPS에

'django.contrib.sites' # 를 추가하고

'rest_auth' # 원래 여기까지만 있었지만
'rest_auth.registration', # 이것도 추가한다.

또한 settings.py 가장 하단에는

SITE_ID = 1

ACCOUNT_EMAIL_VERIFICATION = "none"
ACCOUNT_EMAIL_REQUIRED = (True)

를 추가한 뒤, migrate command를 쳐준다. python manage.py migrate

3) 이후 admin 페이지에 접속하면, 없던 것들이 보인다.
먼저 맨 상단에는 ACCOUNTS 앱이 생성되었을 것이다.

그리고 아래에는

이처럼 SITES와 SOCIAL ACCOUNTS앱이 생성되었을 것이다.

4) 방금전에 생성한 앱들에 접근할 수 있도록
profilesapi/profilesapi/urls.py에서 다음처럼 url을 수정한다.

from django.conf import settings
from django.conf.urls.static import static

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('profiles.api.urls')),
    path('api-auth/', include('rest_framework.urls')),
    path('api/rest-auth/', include('rest_auth.urls')),
    path('api/rest-auth/registration/', include('rest_auth.registration.urls'))
    # 기존 urls에 이 부분을 추가해준다

]

5) 방금 추가한 url에 대한 실험을 위해
profilesapi/clients에 token-auth-test2.py를 생성한다. 작성될 코드는 token-auth-test1.py와 크게 다르지 않다.

import requests


def client():
	
    # 새로운 유저를 생성하는 것이므로 이번에는 username, email, password를 키값으로 적는다.
    data = {
         "username" : "resttest", 
         "email" : "test@rest.com",
         "password1": "changeme123",
         "password2": "changeme123" # password confirmation 부분에 해당한다
         }

    response = requests.post("http://127.0.0.1:8000/api/rest-auth/registration/",
                             data=data)
                             
    # token_h = 'Token a4a535588233b2896d3242bc1183cfeff7ad4d7b'
    # headers = {"Authorization": token_h}

    # response = requests.get(
    #    "http://127.0.0.1:8000/api/profiles/", headers=headers)
    # 지금은 token_h부터는 필요하지 않기에 주석처리 한다.


    print("Status Code: ", response.status_code)
    response_data = response.json()
    print(response_data)


if __name__ == "__main__":
    client()

서버를 켠 후, python token-auth-test2.py 실행

결과 값은?

Status Code: 201
{'key' : '---token---'}

바람직하게 리턴되었다. 그리고 여기서 기억해야 할 점! ⭐️ 새로운 유저를 등록시킨 경우, signal.py를 등록하면서 바로 새로운 Profile 인스턴스도 추가하게 설정해 두었다. ⭐️ 이를 확인하기 위해 Web단으로 가서 Users를 체크해보자.

Users에 들어가면 resttest라는 계정이 생긴 것은 확인할 수 있다. 자 그럼 Profiles를 확인할 차례이다. Profiles를 눌러보면,

방금 등록한 resttest 유저가 Profiles에도 같이 등록된 것을 확인할 수 있다!

5) 그럼 방금 등록된 resttest 유저로 이번에는 get 메소드를 보내는 요청을 보내보겠다.
test-auth-test2.py를 다시 수정해본다.

import requests

def client():
    #data = {
    #     "username" : "resttest", 
    #     "email" : "test@rest.com",
    #     "password1": "changeme123",
    #     "password2": "changeme123" # password confirmation 부분에 해당한다
    #     }

    #response = requests.post("http://127.0.0.1:8000/api/rest-auth/registration/",
    #                         data=data)
    # 유저를 등록시키는데 사용한 요청은 주석처리한다.

    token_h = 'Token ---resttest유저에게 가입과 동시에 발행된 token---'
    headers = {"Authorization": token_h}

    response = requests.get("http://127.0.0.1:8000/api/profiles/", 				
    			    headers=headers)

    print("Status Code: ", response.status_code)

    response_data = response.json()
    print(response_data)

서버를 켠 후, python token-auth-test2.py 다시 실행

결과 값은?

Status Code: 200
{[{'id': 1, 'user':'admin', 'avatar':'--img src--', 'bio': 'Site Administrator', 'city':'Testland'},  {'id':2, 'user':'random' .... }, {'id': 3, 'user': 'resttest' .... }]

잘 출력되는 것을 확인할 수 있다. 특히 마지막에 등록한 resttest 유저까지 모두!

profile
Backend 개발 학습 아카이빙 블로그입니다. (현재는 작성하지 않습니다.)

0개의 댓글