[Django] westargram(2)

김영환·2020년 11월 15일

django

목록 보기
3/5
post-thumbnail

회원가입/로그인 페이지 구현

models.py 구현

from django.db import models

class Accounts(models.Model):
        email           = models.EmailField(max_length=50)
        name            = models.CharField(max_length=50)
        password        = models.CharField(max_length = 300)
        created_at      = models.DateTimeField(auto_now_add = True)
        updated_at      = models.DateTimeField(auto_now = True)

        class Meta:
                db_table = 'accounts'

views.py

import json

from django.http                import JsonResponse
from django.views               import View

from .models                    import Accounts 

class SignUp(View):
    def post(self, request):
        data = json.loads(request.body)

        try:
            if '@' not in data['email'] or '.' not in data['email']:
                return JsonResponse({'message':'이메일주소 @ 를 넣어주세요 '},status =400)

            if len(data['password']) < 8:
                return JsonResponse({'message':'비밀번호가 너무 짧습니다(최소 8자이상)'},status=400)  
           
            if Accounts.objects.filter(email=data['email']).exists():
                return JsonResponse({'message' : '이미 존재하는 아이디입니다.'},status=401)  
            else:
                Accounts(
                    email       = data['email'],
                    name        = data['name'],
                    password    = password_crypt,
                ).save() 
                
            return JsonResponse({'message': '회원가입완료'},status=201)
        
        except Exception as ex:
            return JsonResponse({'error': f'{ex}'},status=400)


class Login(View):
	def post(self, request):
    	data = json.loads(request.body)
        
        try:
        	user = Accounts.object.get(email=data[email])
        	user_ckeck = Accounts.objects.filter(
            			name=user.name,
                    		email = user.email,
                            	password = user.password
            	)
            if user_ckeck.exists():
            	return JsonResponse({'message':'SUCCESS'}, status = 200)
         except Accounts.DoesNotExist:
         	return JsonResponse({'message':'NO EXIST USER'}, status = 401) 
         	              

위의 .save() 와 똑같은 코드

Accounts.objects.create(
	email = data['email'],
	name =  data['name],
	password = data['password'] ) 

urls.py

from django.urls    import path
from .views         import SignUp

urlpatterns =[
    path('signup/',SignUp.as_view()),
    path('login/',Login.as_view()),
]

게시물 / 댓글 페이지 구현

views.py / Post

class Post(View):
    def post(self, request):
        data = json.loads(request.body)
        try:             
            #-----게시물 올리기-----#
            user = Accounts.objects.filter(name=data['name'],email=data['email'])
            if user.exists():
                Broads.objects.create(
                    title = data['title'],
                    photo = data['photo'],         
                    name = Accounts.objects.get(name=data['name'],email=data['email']),
                )
                return JsonResponse({'message':'게시물 업로드 완료'},status=200)
            
            return JsonResponse({'message':'로그인이 필요합니다'},status=400)
        except Exception as ex:
            return JsonResponse({'error':f'{ex}'},status=400) 


    def get(self,request):
        broad_data = Broads.objects.values()
        return JsonResponse({'Accounts':list(broad_data)},status=200)
           

views.py / Commnet

class Comment(View):
    def post(self, request):
        data = json.loads(request.body)
        try : 
            user = Accounts.objects.filter(name=data['name'],email=data['email'])
            
            if user.exists():
                Comments.objects.create(
                    content = data['content'],
                    name = Accounts.objects.get(name=data['name']),
                    broad = Broads.objects.get(id=data['post_id'])
                )
                return JsonResponse({'message':'댓글 등록'},status=200)
            
            else:
                return JsonResponse({'error':'등록된 유저가 아닙니다, 로그인해주세요'},status=401)
         
        except Exception as ex:
            return JsonResponse({'error':f'{ex}'},status=400)

models.py

class Broads(models.Model):
    title               = models.CharField(max_length=200)
    photo               = models.ImageField(blank=True)
    name                = models.ForeignKey('user.Accounts',on_delete=models.CASCADE)
    created             = models.DateTimeField(auto_now=True)
    updated             = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        db_table = 'broads'       


class Comments(models.Model):
    name                = models.ForeignKey('user.Accounts',on_delete=models.CASCADE)
    broad               = models.ForeignKey('Broads',on_delete=models.CASCADE)
    content             = models.TextField(null=True)
    created             = models.DateTimeField(auto_now=True)
    updated             = models.DateTimeField(auto_now_add=True)
    
    class Meta:
            db_table = 'comments'

urls.py

from django.urls    import path
from .views         import Post, Comment,

urlpatterns =[
    path('post/',Post.as_view()),
    path('comment/',Comment.as_view()),
]

회원가입 / 로그인 페이지 , 댓글 / 게시물 페이지 는 비슷한 방법으로 구현가능합니다!

0개의 댓글