• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

간단한 로그인 api 적용

21.07.13 16:29 작성 조회수 162

0

안녕하세요 좋은 강의 만들어주셔서 감사합니다

django 강의를 마친 후 이를 바탕으로 로그인, 회원가입, 프로필 확인, 삭제 정도 가능한 프로젝트를 새로 만들었습니다.

이를 바탕으로 강의의 profile 모델을 기반으로 한 간단한 api를 만들었고

지금 목적은 이 api를 기준으로 새로만든 django 프로젝트의 MODEL부분을 모두 api에서 관리하도록 적용하고싶은 학생입니다.

제가 만든 api의 명세서 입니다.

https://documenter.getpostman.com/view/15940594/Tzm6kvP2

#accountapp/create.html

{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}

<div style="text-align: center; max-width: 500px; margin: 4rem auto;">
<div class="mb-4">
<h4>Signup</h4>
</div>
<form action="{% url 'accountapp:create' %}" method="post">
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" class = "btn btn-dark rounded-pill col-6 mt-3">
</form>
</div>

{% endblock %}

에서 

      <form action="{% url 'accountapp:create' %}" method="post">

이 부분의 url을 바꾸면서 

class AccountCreateView(CreateView):
model = User
form_class = UserCreationForm
success_url = reverse_lazy('profileapp:create')
# reverse_lazy는 클래스형 뷰에서 reverse 는 함수형 뷰에서
template_name = 'accountapp/create.html'

이 부분을 함수형 뷰로 바꿔서 진행하려는데 위에 만든 api의 json 형식을 어떤식으로 읽고 쓰게 할 수 있는지에 대한 방법론이 궁금합니다...

참고로 rest api 서버의 스토리지는 mariadb이고 추후에는 현 django 프로젝트의 모델을 전부 삭제하고 api로만 진행할 생각입니다.

소셜 로그인과 비슷한 형태로 진행하려고 했는데 참 힘들더라구요.. 공부가 부족한 것 같습니다

------------------------------------------

현재 방법을 찾던 중 

https://www.daleseo.com/python-json/

위 포스트를 보고

파이썬 내장 모듈인 json 모듈을 통해 입력받는 것을 공부중에 있습니다

혹시 다른 방법이 있는지 이 방법을 사용할 경우 문제점이 무엇인지 알려주시면 감사하겠습니다

----------------------------------------------------------------------------

#accountapp/views.py
import
json, requests

# Create your views here.
def web_request(method_name, url, dict_data, is_urlencoded=True):
"""Web GET or POST request를 호출 후 그 결과를 dict형으로 반환 """
method_name = method_name.upper() # 메소드이름을 대문자로 바꾼다
if method_name not in ('GET', 'POST'):
raise Exception('method_name is GET or POST plz...')

if method_name == 'GET': # GET방식인 경우
response = requests.get(url=url, params=dict_data)
elif method_name == 'POST': # POST방식인 경우
if is_urlencoded is True:
response = requests.post(url=url, data=dict_data,
headers={'Content-Type': 'application/x-www-form-urlencoded'})
else:
response = requests.post(url=url, data=json.dumps(dict_data), headers={'Content-Type': 'application/json'})

dict_meta = {'status_code': response.status_code, 'ok': response.ok, 'encoding': response.encoding,
'Content-Type': response.headers['Content-Type']}
if 'json' in str(response.headers['Content-Type']): # JSON 형태인 경우
return {**dict_meta, **response.json()}
else: # 문자열 형태인 경우
return {**dict_meta, **{'text': response.text}}

python에서 http메소드의 post와 get을 사용할 수 있는 함수를 views.py 에 추가해주고

def signup(request):
if request.method == 'POST':
print('리퀘스트 로그' + str(request.body))
username = request.POST.get('userid', '')
password = request.POST.get('userpw', '')
pw2 = request.POST.get('userpw2', '')
print(username, password, pw2)
if password == pw2:
json_signup = {}
json_signup["username"] = username
json_signup["password"] = password
url = 'http://APIhost:port/register/' # 접속할 사이트주소 또는 IP주소를 입력한다
data = json_signup # 요청할 데이터
# (example) data = {"username":"test123","password":"testword123"}
print(data)
response = web_request(method_name='POST', url=url, dict_data=data)
return HttpResponse('success')
return render(request, "accounts/signup.html")

탬플릿의 http에서 따온 변수 userid, userpw를 따와서 파이썬 내장 모듈인 json을 통해서 json파일을 만들고 data 변수에 입력하고 위에서 만든 함수를 통해 api에 json 으로 POST 요청을 보내는 함수를 디자인하여 해결했습니다.

위 처럼 json을 통해 로그인과 패스워드를 api 서버와 주고받는다면 보안적으로 이슈가 될 만한 사항이 있을까요?

-----------------------------------

답변 1

답변을 작성해보세요.

1

안녕하세요!
질문 확인했습니다.

일단 
위 처럼 json을 통해 로그인과 패스워드를 api 서버와 주고받는다면 보안적으로 이슈가 될 만한 사항이 있을까요?

라는 질문에 대해서 답변 드리자면,
이런식의 평문 패스워드를 주고 받을때 HTTPS 적용이 되어있는지 확인이 필요합니다.

해당 작업이 완료되어 있다면, 
조금 부족하긴 하지만, 보안 수준을 높일 수 있습니다.


그리고 FBV 로 API 를 구현하는 내용을 질문 주셨는데,
코딩 내용을 다 하나씩 읽어보고 제가 답을 드리기는 어렵습니다 ㅠㅠ

하지만 제가 말씀드리고 싶은건,
이런식의 구현은 Django REST Framework 라는 서드파티 라이브러리를 통해 구현하는 것이,
저희 강좌에서 진행한 CBV 개발 패턴에 조금 더 가까우며
효율적으로 코딩할 수 있는 방법이라는 점을 알려드리고 싶습니다.

API 서버를 구축하는데 관심이 있으시다면, 꼭 확인해보세요!

부족한 답변이지만 도움이 되셨으면 좋겠네요.
좋은하루 보내시구요!
감사합니다-

JunR님의 프로필

JunR

질문자

2021.07.15

감사합니다! 현 장고 프로젝트에 HTTPs 를 적용하는 법을 공부해봐야 겠군요! 좋은 답변 감사드립니다!!

사실 api 서버는 이미 DRF를 이미 사용하여 구현 중 이었습니다 ㅎㅎ

앗 그리고 여담으로 CBV 개발 패턴으로 진행함에 있어서 어떤 기능을 구현할 때 필요한 필요한 제네릭 뷰들을 어떻게 찾으시는지도 궁금합니다! ㅠㅠ