홍카나의 공부방

[DE 데브코스] 04.27 TIL - Django: User와 Authentication, Git의 기능 본문

Data Engineering/프로그래머스 데브코스

[DE 데브코스] 04.27 TIL - Django: User와 Authentication, Git의 기능

홍문관카페나무 2023. 4. 27. 19:35

User

  • Django의 Settings.py에 있는 django.contrib.admin과 django.contrib.auth 덕분에 기본적인 운영자 생성,인증 과정이 가능했다.
  • shell에서 이를 더 자세히 살펴볼 수 있다.

auth.models의 user

 

  • 위와 같은 'User'를 사용자가 임의로 만든 app에서도 사용할 수 있도록 model에 추가할 수 있다. 다음은 특정 app의 models.py 코드 예시다.
from django.db import models
from time import timezone
from datetime import timedelta
# Create your models here.


class Question(models.Model):
    question_text = models.CharField(max_length=200, verbose_name="질문")
    pub_date = models.DateTimeField(auto_now_add=True, verbose_name="생성일")
    owner = models.ForeignKey(
        'auth.User', related_name='questions', on_delete=models.CASCADE,  null=True)

    def __str__(self):
        return f'제목: {self.question_text}, 날짜:{self.pub_date}'


class Choice(models.Model):
    question = models.ForeignKey(
        Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=32)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return f'[{self.question.question_text}]{self.choice_text}'

 

  • 여기서 참고할 점은 ForeignKey로 지정한 필드의 related_name 속성이 추가되었다는 것이다. 해당 속성이 존재한다면, 역참조로 해당 모델을 불러올 때 related_name을 이용해서 불러와야 한다.
  • 외래키 필드에 related_name이 존재하지 않는다면, 그냥 {model_name}_set 형태의 역참조 코드를 사용하면 된다.

related_name이 없는 상황에서의 역참조

 

User 관리하기

  • REST Framework의 PrimaryKeyRelatedField를 이용하여 Serializer를 만들 수 있다.
  • 아래의 PrimaryKeyRelatedField는, User 모델의 Primary Key 값으로 연결된 모든 Question 모델의 오브젝트들을 가져오는 코드다.
from rest_framework import serializers
from polls.models import Question, Choice
from django.contrib.auth.models import User

class QuestionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Question
        fields = ['id', 'question_text', 'pub_date']


class UserSerializer(serializers.ModelSerializer):
    questions = serializers.PrimaryKeyRelatedField(
        many=True, queryset=Question.objects.all())

    class Meta:
        model = User
        fields = ['id', 'username', 'questions']

 

User 가입하기

  • Django에 내장되어 있는 UserCreationForm을 이용하여 손쉽게 사용자 회원가입 폼을 만들수 있다.
  • 회원가입 성공 이후에는 user-list 뷰로 리디렉션하여 새로 생성된 유저가 리스트에 포함되어 있는지 확인할 수 있다.
from django.views import generic
from django.urls import reverse_lazy
from django.contrib.auth.forms import UserCreationForm

class SignupView(generic.CreateView):
    form_class = UserCreationForm
    success_url = reverse_lazy('user-list')
    template_name = 'registration/signup.html'

 

 

 


 

GIT

  • Git은 분산환경을 지원하는 소스 버전 컨트롤 시스템이다.
  • CVS, SVN은 호스트가 항상 서버에 연결되어 있다는 전제하에서 사용 가능한 중앙 개발형 시스템이었는데,
  • Git은 위 두 솔루션에 비해 현저하게 빠르고, 오프라인에서도 작업이 가능하다는 장점이 있다.
  • 또한 공동 개발, 백업, 코드 리뷰 등이 가능하다는 점도 장점이다.

 

GIT의 기능과 용어

  • init, clone, remote, add, commit, push, pull, merge, branch, checkout 등의 기본 기능을 숙지하여야 한다.
  • Repo : Repository의 줄임말로, Git으로 관리되는 SW 프로젝트를 지칭한다.
  • Main(Master) : 한 Repo에서 기본이 되는 메인 코드를 지칭한다. 보통은
  • Branch : 한 Repo에서 코드 작업본 단위를 지칭한다. 새로운 기능 개발을 위해 Main 혹은 다른 Branch로부터 새로운 Branch를 만들기도 하며, 작업 후에는 원본 Branch와 다시 병합(Merge)하려는 목적으로 만들어진다.
  • Clone : 다른 계정에 존재하는 repo로부터 새로운 Local Repository를 만드는 것이다.
  • Commit : 내가 만든 코드 변경을 Branch의 Local Repository에 반영하는 것이다.
  • Pull : Main과 같은 원격 레포의 특정 브랜치로부터 변경된 것을 가져오는 작업이다. (쉽게 말하면 동기화하는 것.)
  • Push : 로컬 레포에서 원격 레포로 변경사항들을 복사하여 동기화하는 것을 지칭한다.
  • Merge : Pull이나 Push 중에서 두 브랜치 간의 충돌을 해결하는 과정이다.
  • PULL REQUEST : 여기서 Pull은 사용자 관점에서 서버의 코드를 가져오는 게 아니라, 서버의 관점에서 Pull을 한다는 것이다. user가 만든 코드 변경안을 원격 레포로 pull을 해달라는 것이다.
반응형