TIL no.56 - Django - Example - 2

박준규·2019년 10월 23일
0

Django

목록 보기
24/30

여태까지는 제가 제 컴퓨터 안에서 서버를 돌리고 혼자 테스트를 했는데
이제 같은 와이파이를 사용하는 다른 호스트도
Request를 보내고 Response를 받을 수 있도록 해보겠습니다.

다음은 제가 구현한 End Point입니다.
endpoint라는 프로젝트에
user와 comment라는 앱이 있고
model과 view구현은 다음과 같습니다.

#user/models.py
  1 from django.db import models
  2 
  3 class Users(models.Model):
  4     name=models.CharField(max_length=200)
  5     email=models.CharField(max_length=300)
  6     password=models.CharField(max_length=400, unique=True)
  7     class Meta:
  8         db_table='users_info'
#user/views.py
  1 import json
  2 from django.http import JsonResponse
  3 from django.views import View
  4 
  5 from .models import Users
  6 
  7 class UserView(View):
  8     def post(self, request):
  9         data = json.loads(request.body)
 10         #email이 db에 있는지 확인
 11         if Users.objects.filter(email=data['email']).exists():
 12             user_in_db = Users.objects.get(email=data['email'])
 13             if user_in_db.name == data['name'] and user_in_db.password == data['password']:
 14                 return JsonResponse({'message':f'hi, {user_in_db.name}'}, status=200)
 15             else:
 16                 return JsonResponse({'message':'name 혹은 password가 일치하지 않습니다.'}, status=401)
 17         else:
 18             return JsonResponse({'message':'가입한 고객이 아닙니다.'},status=401)
#comment/models.py
  1 from django.db import models
  2 
  3 class Comments(models.Model):
  4     name=models.CharField(max_length=200)
  5     reply=models.CharField(max_length=1000)
  6     class Meta:
  7         db_table='comments_table'
#comment/views.py
  1 import json
  2 from django.http import JsonResponse
  3 from django.views import View
  4 
  5 from .models import Comments
  6 
  7 class CommentView(View):
  8     def post(self, request):
  9         data=json.loads(request.body)
 10         Comments(
 11             name=data['name'],
 12             reply=data['reply'],
 13         ).save()
 14         return JsonResponse({'message':'SUCCESS'}, status=200)

이제, cors-header가 필요합니다.
일단 cors-header를 설치해야합니다.

$ pip install django-cors-headers

그뒤에 프로젝트의 settings.py에서 cors 관련 셋팅을 해줍니다.

INSTALLED_APPS에 'corsheaders'를 추가해줍니다.

INSTALLED_APPS = [
  #   'django.contrib.admin',
  #   'django.contrib.auth',
      'django.contrib.contenttypes',
      'django.contrib.sessions',
      'django.contrib.messages',
      'django.contrib.staticfiles',
      'corsheaders',
      'user',
      'comment',
  ]

그리고 cors와 관련된 셋팅을 합니다.

 ##CORS
 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',
 )

CORS셋팅과 관련해서는 나중에 깊게 다뤄보도록 하겠습니다.

이제 ip주소를 확인하겠습니다.

지금 필요한 것은 local의 주소가 아니라
wlp1s0의 inet주소 입니다.

inet 10.58.2.201은 현재 제가 사용하고 있는 Wifi의 주소라고 생각하면 됩니다.

이제 이 주소를 활용해서 다른 호스트에서도 제 서버에 Request를 보냈을 때,
Response를 받는 모습을 보여드리겠습니다.

runserver를 합니다.

$ python manage.py runserver 0:8000

이때, 0:8000은 모든 사용자들이 8000번 포트에 접속하는 것을 허용한다는 뜻입니다.

httpie를 이용해 request합니다.

http -v POST 10.58.2.201:8000/user name=junkyu email=devzunky@gmail.com password=931206

데이터베이스에 일치하는 정보의 record가 존재하면 위와 같은 화면을 볼 수 있습니다.

profile
devzunky@gmail.com

0개의 댓글