import json # json 으로 변환할때 필요
from django.shortcuts import render
from django.views import View
from django.http import JsonResponse
# DB가져오기
from .models import User
class SignUp(View):
def post(self, req):
data = json.loads(req.body)
# print('username -', data['user_name'])
# print('password -', data['password'])
user_name = data['user_name']
password = data['password']
# id = 6~12자 사이 영문 대소문자+ 숫자0-9 만가능
# pw = 영문 대소문자+숫자 0-9+특수문자 ~!@#$%^&*_+?,. 최대 25자 가능
# user_list = User.objects.all() # 데이터테이블 전체 가저오기
if User.objects.filter(user_name=user_name).exists():
return JsonResponse({'message': '사용할수 없는 아이디'}, status=200)
else:
User(user_name=data['user_name'], password=data['password']).save()
return JsonResponse({'message': '성공'}, status=200)
아이디/비밀번호의 유효성확인도 하고 싶은데 아직 ...핳, 기본적인 기능만 구현했다.
POST
로 요청을 받는다req.body
에 위치한 정보를json.loads()
를 통해 읽어 변수에 담았다.- DB
User
테이블에서 입력받은user_name
이 있는지 확인, 있다면 응답 : 사용할수 없는 아이디user_name
이 없다면 DB에 내용을 추가한 뒤 응답 : 성공메세지
pip install jwt
pip install pyjwt
import json # 제이슨으로 변환할때 필요
import jwt
from django.shortcuts import render
from django.views import View
from django.http import JsonResponse
# DB가져오기
from .models import User
class SignIn(View):
# 로그인 로직
def post(self, req):
data = json.loads(req.body)
user_name = data['user_name']
password = data['password']
user_info = User.objects.filter(user_name=user_name)
# print('유저네임: ', user_info[0].user_name)
print(bool(user_info))
if user_info: # 유저정보가 있을 때
if user_info[0].user_name == user_name and user_info[0].password == password:
# jwt로 encode하면 byte로 바뀐다 그래서 문자열로 변환하는 것이 필요하다. 변환은 decode('utf-8')을 통해 진행한다. .. 만약 디코드 안하고 응답보내면 500에러~~
token = jwt.encode(
{'user_name': user_name}, 'SECRET', algorithm='HS256').decode('utf-8')
return JsonResponse({'token': token}, status=200)
else:
return JsonResponse({'message': '비밀번호 틀림'}, status=400)
else:
return JsonResponse({'message': '없는 유저'}, status=400)
jwt.encode({인코딩할 내용 객체}, 시크릿키, algorithm='HS265').decode('utf-8')
utf-8
으로 디코딩해주었다.터미널에 ifconfig
를 입력하면
id 0x4 inet
이하 숫자.숫자.숫자.숫자 를 찾으면 된다. 장고에서 서버를 열때 python manage.py runserver 0:8000
으로 한 뒤 내 아이피를 확인하여 연결, 접속 할 수 있다.
api를 구현하고 프론트엔드와 로그인 화면을 붙여보았다. 요청이 들어올때
Access to fetch at 'http://000.00.00.000:8000/account/sign_in' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
에러가 난다. 해결법은 아래 cors를 설치하고 프로젝트 settings.py를 수정해 주어야 한다.
pip install django-cors-headers
설치하면 cors 에러를 해결 할 수 있다. 보안설정
INSTALLED_APPS = [
# 중략
'corsheaders' # CORS 추가 : 보안설정
]
MIDDLEWARE = [
# 중략
'corsheaders.middleware.CorsMiddleware', # CORS 추가 : 보안설정
]
# settings.py 최하단에 추가하자
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
)
CORS_ALLOW_HEADERS = (
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)