[코딩온] 장고 강좌 10

TonyHan·2021년 1월 20일
0

섹션과 Http


가상환경을 사용해서 각 프로젝트마다 다른 패키지를 설치한다.
(-m은 모듈의 약자)

명령어
apt install python3-venv : 가상환경 설치
python3 -m venv : 명령어 확인

이제 각 프로젝트 별로 자기가 원하는 패키지를 설치하자
python3 -m venv .가상환경이름
tree -d -L 2 .가상환경이름
source .venv/bin/activate : 가상환경 실행
python3 --version : 가상환경 버전 확인

가상환경에 패키지 설치
pip install django : 이걸 통해서 장고를 가상환경에 설치
tree .venv | grep django : 장고 구조
python3 -m django --version : 장고 버전확인
python manage.py 0.0.0.0:8000

작동중인 서비스 확인/죽이기
ps -ef | grep 8000
kill -9 번호

버전관리
pip freeze : 설치되어 있는 거 확인
pip freeze > requirements.txt : 파일로 만들기

깃 설치
apt install git : 설치
git init : 시작
git config --global user.name "이름"
git config --global user.email "이메일"

깃에 올리지 않을 파일 설정
cat .gitignore

.o2
.iead/
*.pyc
.venv
db.sqlite3
migrations/

깃에 업로드
git add .(혹은 * ) : 파일 추가
git commit -m "내용" : 버전 준비하기
git log : 지금까지의 정보
git log -p
vi .git/config
git remote add origin git@github.com:tonyhan18/StartUps.git : 깃허브 repository를 제작한다음 우리 저장소를 업로드 하기 위해서 명령어 입력
git remote -v : origin 저장소 등록
git branch : branch 어떤게 있는지 확인
gir branch -M master : master로 변경
git push -u origin main : 저장소를 업로드

공개키

공개키를 이용해서 git에 업로드하는 과정에 자동로그인되도록 해보자
내 github > settings > SSH keys


이제 키를 복사하기 위해 같은 페이지 아래쪽에 있는 generating SSH keys를 클릭한다.
Generating a new SSH key and adding it to the ssh-agent 에 키 명령어가 있다.

ssh-keygen -t ed25519 -C "ourclub7279@gmail.com"

vi id_ed25519.pub

깃허브에 키를 복사

레포지토리 받아오기
git clone ssh : 정보받아오기
source .venv/bin/activate : 가상환경 활성화
pip install -r requirements.txt : 패키지 설치

Visual Code 사용하기


ctrl+shift+p 입력후
remote-ssh 입력
Windows current 한다음

위와 같이 root@ip주소
로 입력하자


하면 위와 같이 뜨게 된다.

Linux를 엔터하고 비밀번호를 입력하자

query string

주소값에 쿼리를 넣어서 원하는 값을 출력하는 것을 query string이라고 부른다.


우선 views 에 저렇게 등록하고 urls에도


그냥 gugu로 가면 이렇게 된다.
여기에서 앞에 f라고 사용한 것은 {num}으로 된 부분에 string을 사용할 수 있게 된다.

그래서
아이피:포트/gugu?num=10
으로 입력하자

이렇게 뜨는 것을 확인 할 수 있다.

하지만 이렇게 하면 num을 입력 안해주면 이상한 페이지가 나오니 views.py를 다시 수정해주자

num = req.GET.get('num','')
로 바꾸어주자

세션,GET,POST

이제 form을 통해 데이터를 전송할텐데 어떻게 들어올지 예상할 수가 없다. 그래서 아래와 같이 작성한다.

def index(req):
아래와 같이 get이라는 함수를 사용해서 GET으로 데이터가 넘어와도 받아준다.
    req.GET.get('num','')
    if req.method=='GET':
        lotto=[]
        for i in range(6):
            num=random.randint(1,46)
            while(num in lotto):
                num=random.randint(1,46)
            lotto.append(random.randint(1,46))
        print(lotto)
        return HttpResponse(f"<h1>lotto 번호 추천 {lotto} </h1>")

세션은 기본적으로 Http 통신을 한다.

쿠키를 요청하고 받아서 Response를 처리하는 구조이다. HTTP는 기본적으로 연결하는 끊는 방식이기 때문에 어디에서 연결을 시도했는지 알 수 없다.

<h2>로그인</h2>
<div>
    유효성 체크 : {{err}} : 에러 체크
</div>
<form method="GET" action="/login">
    {% csrf_token %}
    id : <input type="text" name="id" placeholder="아이디"/>
    pw : <input type="email" name="email" placeholder="이메일"/>
    {{err}}
    <input type="submit" placeholder="제출"/>
</form>

이런식으로 form을 구성하자


이번에는 DB 사용법에 대해서 익히어 보자
먼저 admin 페이지에 들어가서 새로운 유저를 삽입하자


하면 위와 같이 보거나 혹은 서버에서 sqlite를 이용해서 볼수도 있다.

sqlite3 db.sqlite3
.table

select * from opentutorials_users; 콤마필수

그러면 이렇게 사용하는 db를 조회하는 방법에 대해서 알아보자

삽입

member=Members(
	username=username,
	useremail=email
)
member.save()

조회

def login(req):
    #print(dir(req))
    if(req.method=='GET'):
        return render(req,'login.html')
    elif(req.method=='POST'):
        #유저 email이 제대로 들어오지 않아도 표현은 된다.
        username = req.POST.get('username', None)
        useremail = req.POST.get('useremail', None)

        err = {}

        if not (useremail and username) :
            err['err'] = '유효성이 잘못되었습니다.'
            return render(req, 'login.html', err)
        else:
        #아래와 같이 username이 있으면 데이터를 가지고 온다.
            member = Members.objects.get(username=username)
            return HttpResponse(f"<h1>{member.useremail}<h1>")
            #return render(req, 'login.html', err)
    return redirect('/')


이번에는 섹션을 만들어보자

 if not (useremail and username) :
            err['err'] = '유효성이 잘못되었습니다.'
            return render(req, 'login.html', err)
        else:
            member = Members.objects.get(username=username)

			# 같은 이메일 존재시 세션생성 + members로 이동
            if useremail == member.useremail:
                req.session['user']=member.id;
                return redirect('/members')
                
            # 같은 이메일이 없으면 login.html로 이동
            else:
                err['err']="비밀번호가 잘못되었습니다."
                return render(req,"login.html",err)
                
            return HttpResponse(f"<h1>{member.useremail}<h1>")
            #return render(req, 'login.html', err)

위와 같이 req.session을 만들면

위와 같이 쿠기에 session이 생성된 것을 확인할 수 있다.

아래쪽은 현재 세션을 가지고 오는 부분이다.

def login_after(req):
	# 아래 부분은 세션의 값을 직접 가지고 오는 것이다.
    user_id = req.session.get('user')
    if(user_id):
        return HttpResponse(f"로그인 유저 {user_id}")
    return HttpResponse("세션읽기 & 세션 없으면 리다이렉션")


그리고 로그인 했을 때 위와 같이 출력되도록 했다.

반대로 세션을 삭제하면서 로그아웃을 하기 위해서는

def logout(req):
    if req.session.get('user'):
        del(req.session['user'])
    return redirect('/')


그래서 주소창에 logout이라고 치면 위와 같이 루트 페이지로 이동하는 것을 확인할 수 있다.

profile
신촌거지출신개발자(시리즈 부분에 목차가 나옵니다.)

0개의 댓글