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

 

+ Recent posts