django | February 18, 2020
회원가입, 로그인, 댓글 View 작성하기
exists()
라는 좋은 함수가 있다!class LoginView(View):
def post(self, request):
data = json.loads(request.body)
try:
if Account.objects.filter(email = data['email']).exists():
user = Account.objects.get(email=data['email'])
if user.password == data['password']:
return HttpResponse(status = 200)
return HttpResponse(status = 401) #비번 틀림
return HttpResponse(status = 400) #없는 계정
except KeyError:
return JsonResponse({"message":"INVALID_KEYS"}, status = 400) #입력값X
User.objects.filter(name="aaa")
의 방식으로 진행할 때, 콤마(,
)는 and를 의미한다.Q
를 쓸 수 있다.from django.db.models import Q
class LoginView(View):
def post(self, request):
user_data = json.loads(request.body)
user_name = user_data.get('name', None)
user_email = user_data.get('email',None)
user_phone = user_data.get('phone',None)
if User.objects.filter(Q(name=user_name)|Q(email=user_email)|Q(phone=user_phone)).exists():
user = User.objects.filter(Q(name=user_name)|Q(email=user_email)|Q(phone=user_phone))[0]
if user_data['password'] == user.password:
return HttpResponse(status = 200)
return HttpResponse( status = 400)
return HttpResponse(status = 400)
app 분리를 하고 migrate를 했는데, 이미 있는 table이라는 에러가 나왔다.
원인은, 기존의 app에서 만들었던 table이 있는데, 새로운 app에서 같은 table을 만들려고 하니 이미 있다는 에러가 나온 것.
아래의 방법으로 initial migration을 이미 진행한 것처럼 fake 처리하여 진행했더니 성공이다.
근데 문제는, 기존 app에서 만들었던 db 내용이 사라졌다는 것.
그냥 옮겨올 수 있을 줄 알았는데, 기존 app의 테이블을 delete 하고 새로운 app의 table이 만들어지고 db가 비어진 채로 생성되었다..
$ python manage.py migrate --fake-initial
참조: [Django] Django 마이그레이션 초기화하기
# user/views.py
from .models import User
from django.views import View
from django.http import HttpResponse, JsonResponse
from django.db.models import Q
class UserView(View):
def post(self, request):
user_data = json.loads(request.body)
User(
name = user_data['name'],
email = user_data['email'],
phone = user_data['phone'],
password = user_data['password']
).save()
return HttpResponse(status=200)
def get(self, request):
user_data = User.objects.all()
users = []
for user in user_data:
users.append({
'name' : user.name,
'email' : user.email,
'phone' : user.phone,
'password' : user.password
})
return JsonResponse({'users':users}, status = 200)
class LoginView(View):
def post(self, request):
user_data = json.loads(request.body)
user_name = user_data.get('name', None)
user_email = user_data.get('email',None)
user_phone = user_data.get('phone',None)
try:
if User.objects.filter(Q(name=user_name)|Q(email=user_email)|Q(phone=user_phone)).exists():
user = User.objects.filter(Q(name=user_name)|Q(email=user_email)|Q(phone=user_phone))[0]
if user_data['password'] == user.password:
return HttpResponse(status = 200)
return HttpResponse( status = 400)
return HttpResponse(status = 400)
except KeyError:
return JsonResponse({"message":"INVALID_KEYS"}, status = 400)
# comment/views.py
import json
from .models import Comment
from user.models import User
from django.views import View
from django.http import HttpResponse, JsonResponse
class CommentView(View):
def post(self, request):
user_data = json.loads(request.body)
try:
if User.objects.filter(name = user_data['name']).exists():
Comment(
name = user_data['name'],
comment = user_data['comment']
).save()
return HttpResponse(status=200)
return HttpResponse(status=400)
except KeyError:
return HttpResponse(status=400)
def get(self, request):
comment_data = Comment.objects.values()
return JsonResponse({'comments':list(comment_data)}, status=200)