가상환경을 사용해서 각 프로젝트마다 다른 패키지를 설치한다.
(-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 : 패키지 설치
ctrl+shift+p 입력후
remote-ssh 입력
Windows current 한다음
위와 같이 root@ip주소
로 입력하자
하면 위와 같이 뜨게 된다.
Linux를 엔터하고 비밀번호를 입력하자
주소값에 쿼리를 넣어서 원하는 값을 출력하는 것을 query string이라고 부른다.
우선 views 에 저렇게 등록하고 urls에도
그냥 gugu로 가면 이렇게 된다.
여기에서 앞에 f라고 사용한 것은 {num}으로 된 부분에 string을 사용할 수 있게 된다.
그래서
아이피:포트/gugu?num=10
으로 입력하자
이렇게 뜨는 것을 확인 할 수 있다.
하지만 이렇게 하면 num을 입력 안해주면 이상한 페이지가 나오니 views.py를 다시 수정해주자
num = req.GET.get('num','')
로 바꾸어주자
이제 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이라고 치면 위와 같이 루트 페이지로 이동하는 것을 확인할 수 있다.