A ship in harbor is safe, but that is not what ships are built for.

개발일지/AI 캠프

내일배움캠프 AI - 28일차 TIL, 2022.10.11

플리피나리 2022. 10. 12. 02:54
반응형

스파르타 코딩클럽 내일배움캠프 AI 웹개발자양성과정 3회차

2022.10.11. 28일차 - TIL

 

 

1. Django 복습

  • 가상 환경 생성
    - 프로젝트 별 개발 환경 형성을 위한 독립된 개발 공간
    - 폴더 생성 후 vscode로 folder open 후 다음 명령어 입력
1) venv라는 이름의 가상환경 만들기
$ python -m venv venv

2) 가상환경 활성화
$ venv\scripts\activate

3) 장고 패키지 설치
$ pip install django

4) requirements.txt 생성
$ pip freeze > requirements.txt

5) 장고 프로젝트 생성
$ django-admin startproject [프로젝트명] .
  • GIT 연결하기
    - gitignore 생성 후 venv 추가
    - Git 저장소 생성 : 로컬 저장소로 사용할 폴더로 이동해 git init 입력
    - Git 원격 저장소 연결 : 원격 저장소 생성 후 git remote add origin [원격저장소 주소] 입력
    - master branch -> main branch로 이름 변경 : git branch -M main
    - 인덱스에 파일 추가(Staging) : git add [파일명] or git add . -> commit 이전단계
    - 변경사항 확정 : git commit -m [메시지내용]
    - 원격 저장소로 push : git push <remote> <현재branch>
  • git default branch 이름 바꾸는 방법
    1) git branch -m master main
    2) git config --global init.defaultBranch main
  • Git fork : 다른 사람의 github repository를 내 github repository로 복제하는 것
  • Git clone : 특정 repository를 내 로컬 저장소(컴퓨터)에 복사하는 것 

  • 추가 내용
> 새로운 브랜치 생성
$ git branch <브랜치명>

> 해당 브랜치로 이동
$ git checkout <브랜치명>

> 클론 받아오기
$ git clone <원격저장소 주소>

> 특정 commit 병합
$ git merge <commit 이름>
> 특정 branch 병합
$ git merge <branch 이름>

> 원격 저장소 fetch
$ git fetch <원격저장소 명칭 origin>
> 원격 저장소 pull
$ git pull <원격저장소 명칭 origin>

> requirements.txt로 설치
$ pip install -r requirements.txt

* pull : 원격 저장소의 소스를 가져와 해당 소스가 현재 내 소스보다 더 최신 버전일 경우 지금의 버전을 해당 소스에 맞춤 -> merge가 됨

* fetch : 단지 소스를 가져옴 -> merge를 하지 않음

 

 

2. 인스타 클론 코딩 복습

  • 회원가입 기능
# user앱의 views.py

from django.shortcuts import render, redirect
from django.contrib.auth import get_user_model
from .models import User

def sign_up_view(request):

    # get method일 때는 그냥 회원가입 페이지 보여주기
    if request.method == 'GET':
        return render(request, 'user/signup.html')

    elif request.method == 'POST':
    	# html의 form 태그 내 input 태그의 name을 지칭해 값을 가져옴
        useremail = request.POST.get('input_email', None)
        username = request.POST.get('input_name', None)
        usernickname = request.POST.get('input_nickname', None)
        userpassword = request.POST.get('input_password', None)
        userpassword2 = request.POST.get('input_password2', None)

        # 비밀번호가 일치하지 않은 경우
        if userpassword != userpassword2:
            msg = '비밀번호가 일치하지 않습니다.'
            # message가 안보임!! 더 찾아볼 것!!
            return render(request, 'user/signup.html', {'message': msg})
        else:
            # 우리가 설정한 AUTH_USER_MODEL에서 email주소가 있는지 확인
            exist_user = get_user_model().objects.filter(email=useremail)

            # 사용자가 존재하는 경우
            # 사용자를 저장하지 않고, 회원가입 페이지를 다시 띄움
            if exist_user:
                msg = '이미 존재하는 이메일입니다.'
                return render(request, 'user/signup.html', {'message': msg})
            else:
            	User 모델에 새로운 인스턴스 생성
                User.objects.create_user(username=username, email = useremail, password=userpassword, user_nickname=usernickname, user_profile_image='default_profile.png')
                return redirect('/user/sign-in')  # 회원가입 완료 후 로그인 페이지로 이동
# user 앱의 urls.py

from django.urls import path
from . import views

urlpatterns = [
	...생략...
	path('sign-up/', views.sign_up_view, name='sign-up'),
    ...생략...
]
<!--signup.html-->

<form class="form-area" method="post" action="/user/sign-in">
{% csrf_token %}
	... 생략 ...
    <input type="email" class="form-control" style="font-size: 14px; height: 24px" id="input_email" name="input_email" placeholder="name@example.com">
    ... 생략 ...
</form>
  • 로그인 기능
# user 앱의 views.py

from django.shortcuts import render, redirect
from django.contrib import auth

def sign_in_view(request):

    if request.method == 'GET':
        return render(request, 'user/signin.html')
    
    elif request.method == 'POST':
        useremail = request.POST.get('input_email', None)
        userpassword = request.POST.get('input_password', None)

        # 사용자 불러오기
        me = auth.authenticate(request, email=useremail, password=userpassword)
        # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
        if me is not None:
            auth.login(request, me)
            return redirect('/tweet/main')
        else:  # 로그인 실패 시
            return redirect('/user/sign-in')
# user 앱의 urls.py

from django.urls import path
from . import views

urlpatterns = [
	...생략...
    path('sign-in/', views.sign_in_view, name='sign-in'),
    ...생략...
]
<!--signin.html-->

<form class="form-area" method="post" action="/user/sign-in">
{% csrf_token %}
	...생략...
    <input type="email" class="form-control" style="font-size: 14px; height: 24px" id="input_email" name="input_email" placeholder="name@example.com">
    ...생략...
</form>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Related

https://velog.io/@imacoolgirlyo/Git-fork%EC%99%80-clone-%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-5sjuhwfzgp

반응형