728x90
* https://itcreator.tistory.com/125 를 보고 이 글을 진행하는게 이해가 쉬움
시작하기전에 협업할때 편한 가상화 작업
1. ctrl + shift + ~ 터미널 창 열어주고 가상환경설정하기
python -m venv <env name> # 가상환경
# Venv 안뜨면 ctrl/command + shift + p 로 인터프리터 열어서 <env이름> 직접 선택
# 수동
(Mac) source venv/bin/activate
(Win) source vent/Scripts/activate
pip install django==3.2.16 django_extensions
pip list # 상태확인
touch README.md .gitignore # READ, gitignore 사전작업
pip freeze > requirements.txt # 협업 세팅환경용
# 3.2.16버전이 롱텀이라 안전성높음
1. 회원가입에 필요한 기초설계
1. account 앱 폴더 생성 및 등록
# root 기준 터미널 명령어
python manage.py startapp <app 이름>
mkdir -p account/templates/account # 템플릿 생성
cd account/templates/account # 최하단 까지 이동
touch login.html signup.html # html 생성
2. urls.py 생성 (..../<app이름> 으로 들어오는 통로 열어주기)
# 다시 최상단 으로 돌아와서( 보통 cd .. 3번 하면됨)
Touch <app이름>/urls.py # url 이동 잡아주기
2. accounts > urls.py 세팅해주기 (앱이름을 accounts로 할 경우)
from django.urls import path
from . import views
app_name = 'accounts'
urlpatterns = [
# accounts/signup/
path('signup/', views.signup, name='signup'), # url에 accounts/signup/으로 접근이 온다면 => views 에 있는 signup 함수 실행 / 그리고 이 과정을 signup 이 라고 칭하겠다.
# accounts/login/
path('login/', views.login, name='login'),
# accounts/logout/
path('logout/', views.logout, name='logout'),
]
3. Control 단 (accounts > Views.py)
1. 쉬운 버전용 필요한 클래스 import 하기
# 화면구성, 화면이동, 객체를 받거나 없으면 404에러를 터트려줌 (이거 없으면 서버 문제가 아닌데도 500 서버단 에러를 터트림)
from django.shortcuts import render, redirect, get_object_or_404
# DB 생성없이도 account에 필요한 컬럼을 만들어줌, 인증에 필요한 옵션
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
# 세션을 부여하거나 수거함 (출입증)
from django.contrib.auth import login as auth_login, logout as auth_logout
# get, post에 따른
from django.views.decorators.http import require_http_methods
2. 가장 먼저 signup 함수채우기
@require_http_methods(['GET', 'POST']) #GET, POST 요청만 받겠다
def signup(request): #request 요청 받은 정보 전부 인수로 전달한뒤 함수 실행
if request.method == 'POST': # 회원가입 신청서 제출시 작동
form = UserCreationForm(request.POST) # user 의 경우 Model괴 Form도 자동으로 해줌 /import만 잘하면됨
if form.is_valid(): # 내장 검증함수실행 / False 시 13번부터 실행
user = form.save() # 유저가 입력한 정보 DB에 저장
auth_login(request, user) # 회원가입하고 바로 세션부여 채워줌
return redirect('board:article_index') # 바로 게시글 볼 수 있게 리다이렉트해줌
else: # get으로 온 경우
form = UserCreationForm() # 회원가입 폼
context = {'form': form } # 폼을 context에 담아서
return render(request, 'accounts/signup.html', context) #받은 정보들을 바탕으로 signup.HTML 화면 구성
3. login 함수 채우기
@require_http_methods(['GET', 'POST']) # get과 포스트만 받겠다
def login(request):
if request.method == 'POST': # POST인 상황 즉 아이디 / 비번 넣고 로그인 버튼 눌렀을때 실행
form = AuthenticationForm(request, request.POST) # 인증폼은 다른 폼과 인자 구성이 다름 / 지금은 request 인수를 던지는 이유에 대해선 넘어가기로..
if form.is_valid():
user = form.get_user() # 이 유저가 누군지 알려줌
auth_login(request, user ) # 받은 유저정보를 주면 입장 팔찌를 채워줌 파이썬에서 제공해주는 함수 (임포트해야함)
# None/ URL string 들어가있음
next = request.GET.get('next') # 다른곳에서 튕겨서 온 사람들 /? 이후 URL을 request.GET으로 받음 .get은 값이 없더라도 none으로 받음
return redirect(next or 'board:article_index') # next 가 false 면 index로 보내고/ next가 true 면 next 값으로 이동
else: # GET인 상황 로그인 페이지를 들어오는 상태라면
form = AuthenticationForm() # 내장함수를 form으로 받고
context = {'form': form} # 내장함수에 받은 내용을 context에 담아 보냄
return render(request, 'accounts/login.html', context)
4. logout 함수채우기
def logout(request):
auth_logout(request) # 세션을 지움
return redirect('board:article_index') # 게시글 있는곳으로 다시 리다이렉트
< 총 정리하자면 >
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth import login as auth_login, logout as auth_logout
from django.views.decorators.http import require_http_methods
@require_http_methods(['GET', 'POST'])
def signup(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
auth_login(request, user)
return redirect('board:article_index')
else:
form = UserCreationForm()
context = {'form': form }
return render(request, 'accounts/signup.html', context)
@require_http_methods(['GET', 'POST'])
def login(request):
if request.method == 'POST':
form = AuthenticationForm(request, request.POST)
if form.is_valid():
user = form.get_user()
auth_login(request, user )
next = request.GET.get('next')
return redirect(next or 'board:article_index')
else:
form = AuthenticationForm()
context = {'form': form}
return render(request, 'accounts/login.html', context)
def logout(request):
auth_logout(request)
return redirect('board:article_index')
https://itcreator.tistory.com/130
2탄 게시판 및 댓글 쉬운버젼 (DB가 추가됨)
[Django] Board/comment 게시판/댓글 쉬운버젼
https://itcreator.tistory.com/129 이어서 하기 이전버전은 USER는 DB를 만들지 않아도 따로 생성되었음 (물론 커스터마이징 가능하지만 그건 나중에) 이번은 이전설정과 거의 비슷하게 한번 더 앱을 만들
itcreator.tistory.com
728x90
'WEB Creator > [Django]' 카테고리의 다른 글
[Django] Signup/User 커스텀하기 수정중 (recap) (0) | 2023.01.16 |
---|---|
[Django] Board/comment 게시판/댓글 쉬운버젼 (0) | 2023.01.15 |
[Django] Project 기초 바닥 설계 (0) | 2023.01.10 |