[Django] Westagram 1-3

juri·2021년 7월 23일
0

Django

목록 보기
9/11
post-thumbnail

Mission 1 Django 초기세팅 🐳

🌱 git clone

git clone <github 주소>
작업할 디렉토리를 미리 만들어놓지않은 경우에 . 붙이는 과정을 생략

🌱 개발환경 기록

requirement.txt
다른 사람들과 협업할 때 동일한 개발환경을 구축하는 것이 중요하다. 즉, 사용자의 컴퓨터마다 사용하는 패키지가 동일해야한다. 개발환경을 'requirement.txt에 기록한다.

  • .gitignore파일에 my_settings 추가하는거 까먹지말기. 보안관련 사항에는 더 신경쓴다.

Mission 2 모델링 🐳

🌱 1차

from django.db import models

class User(models.Model):
    name = models.CharField(max_length=45)
    email = models.CharField(max_length=45, unique=True)
    password = models.CharField(max_length=100)
    
    class Meta : 
        db_table = 'users'
        
class Information(models.Model):
    age = models.PositiveIntegerField()
    sex = models.CharField(max_length=5)
    contact_point = models.CharField(max_length=45, null=True)
    user = models.ForeignKey('User')
    
    class Meta:
        db_table = 'information'

수정사항

  1. 코딩 컨벤션에 맞춰서 Align 수정
  2. 속성 이름은 간결하고 직관적으로 수정 contact_point -> contact
  3. ForeignKey옵션에 models.on_CASCADE 추가
  4. 회원정보 특성상 한 번에 모든 데이터를 불러오는 경우가 많아 테이블을 타고 들어가지 않게 설정하는 것이 경제적임
  5. 데이터 저장없이 빈 칸으로 비워놓기 위해서는 null=True 보다 blank=True가 적합함.

🌱 2차

from django.db import models

class User(models.Model):
    name     = models.CharField(max_length=45)
    email    = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=100)
    contact  = models.CharField(max_length=100, blank=True, default='')
    
    class = Meta:
        db_table = 'users'

Review

  1. 테이블 병합 및 속성 축소
  2. 수정사항 모두 반영
  3. 시작(모델링)을 잘해야 이후 작업이 수월하다 !!

Mission 3 회원가입기능 구현 🐳

🌱 1차

import json
import re

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

from users.models import User

class UserView(View):
    def post(self,request):
        try:
            data = json.loads(request.body)
            email = data['email']
            password = data['password']
            
            email_regx = r'[\w\.-]{3,15}@[\w\.-]{2,}\.\w{2,4}\b'
            email_val = re.match(email_regx, email)
            
            if not email_val:
                return JsonResponse({'message':'wrong_email'}, status=400)
           
            password_regx = r'^(?=(.*[A-Za-z]))(?=(.*[0-9]))(?=(.*[@#$%^!&+=.\-_*]))([a-zA-Z0-9@#$%^!&+=*.\-_]){8,}$'
            password_val = re.match(password_regx, password)           
           
            if not password_val:
                return JsonResponse({'message':'wrong_password'}, status=400)
           
            if User.objects.filter(email=email).exists():
                return JsonResponse({'message':'email_already_exists'}, status=400)
               
            User.objects.create(
           		name     = data['name'],
                	email    = email,
                	password = password,
                	contact  = data['contact']
                	)
            return JsonResponse({'message':'success'}, status=201)
           
       except KeyError:
           return JsonResponse({'message':'key_error'}, status=400)

수정사항

  • 변수 정리

🌱 2차

👇 수정 전 !

👇 변수 정리 후 !


Review 🐳

어려웠던 부분
정규표현식은 사전스터디때부터 많이 연습했었지만 아직도 완벽하게 이해가 안된다 . . ^^ 만들 때마다 다시 표 보면서 더듬더듬 만드느라 힘들었다 후 내가 만들 수 있는 가장 강력한 정규표현식이었다.

코드를 가능한 한 깔끔하게 적으려고 하고있다. 같은 기능을 구현하는 한 최대한 짧게 !!! 나름의 챌린지같은 느낌으로 즐기는 중 ㅎㅎ

profile
Make my day !

0개의 댓글