728x90
반응형
시작하기
가상환경 설정을 위한 세팅을 하여줍니다.
python -m venv venv && source vnev/Scripts/activate
pip install -r reqirements.txt
설정하기
accounts 만들기
python manage.py startapp accounts
그리고 서버가 켜지는지 확인해봅시다!
python manage.py runserver
settings.py 에 INSTALL_APP 에 'accounts', 를 추가해줍시다! (모르신다면 저번 게시물로!)
startproject에 urls.py 안 accounts path를 추가시켜 줍시다.
account-기능 구현
이는 이전 articles (startapp)을 만들때와 비슷하게 해주시면 됩니다.
저의 순서는 urls.py > views.py > html만들기 순으로 진행하겠습니다.
회원가입만들기(signup)
urls.py
from django.urls import path
from . import views
app_name='accounts'
urlpatterns = [
path('signup/', views.signup, name='signup'),
]
views.py
from django.shortcuts import render
from django.contrib.auth.forms import (
UserCreationForm,
UserChangeForm,
)
# Create your views here.
def signup(request):
form = UserCreationForm()
context = {
'form':form,
}
return render(request, 'accounts/signup.html', context)
signup.html
{% extends 'base.html' %}
{% block content %}
<form action="" method="POST">
{% csrf_token %}
{{ form }}
<button>회원가입</button>
</form>
{% endblock %}
git log 남기기
git status
git add .
git commit -m "Add signup feature"
로그인, 로그아웃(login, logout)
urls.py
from django.urls import path
from . import views
app_name='accounts'
urlpatterns = [
path('signup/', views.signup, name='signup'),
path('login/', views.login, name='login'),
path('logout/', views.logout, name='logout'),
]
views.py
from django.shortcuts import render, redirect
from django.contrib.auth import login as auth_login
from django.contrib.auth import logout as auth_logout
# Create your views here.
def signup(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
auth_login(request, user) # 로그인 == 세션 생성
# 회원가입 축하 메세지를
#request에 담아서 같이 보냅니다.
messages.add_message(
request, messages.SUCCESS, '회원가입을 축하합니다!'
)
return redirect('articles:index')
else:
form = UserCreationForm()
context = {
'form':form,
}
return render(request, 'accounts/signup.html', context)
def login(request):
if request.method == 'POST':
form = AuthenticationForm(request, request.POST)
if form.is_valid():
# 세션 생성
# 1. DB에 세션을 생성
# 2. request 객체에 session 정보가 생성
# => request.session 사용 가능
auth_login(request, form.get_user())
return redirect('articles:index')
else:
form = AuthenticationForm()
context = {
'form':form,
}
return render(request, 'accounts/login.html', context)
def logout(request):
auth_logout(request)
# 세션 삭제
# 1. DB에 있는 세션 삭제
# 2. request 객체에 담긴 session 삭제
return redirect('articles:index')
from django.contrib.auth import logout as auth_logout
def logout(reqeust:)
auth_logout(request)
# 세션 삭제
# 1. DB에 있는 세션 삭제
# 2. request 객체에 담긴 session 삭제
return redirect('articles:index')
login.html
{% extends 'base.html' %}
{% block content %}
<form action="" method="POST">
{% csrf_token %}
{{ form }}
<button>회원가입</button>
</form>
{% endblock %}
logout.html(없음 ㅎ)
정보수정(업데이트)
urls.py
views.py
from django.shortcuts import render, redirect
from django.contrib.auth.forms import (
UserCreationForm,
UserChangeForm,
AuthenticationForm,
PasswordChangeForm,
)
from django.contrib.auth import login as auth_login
from django.contrib.auth import logout as auth_logout
from .forms import CustomUserChangeForm
# Create your views here.
def signup(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
auth_login(request, user) # 로그인 == 세션 생성
# 회원가입 축하 메세지를
#request에 담아서 같이 보냅니다.
messages.add_message(
request, messages.SUCCESS, '회원가입을 축하합니다!'
)
return redirect('articles:index')
else:
form = UserCreationForm()
context = {
'form':form,
}
return render(request, 'accounts/signup.html', context)
def login(request):
if request.method == 'POST':
form = AuthenticationForm(request, request.POST)
if form.is_valid():
# 세션 생성
# 1. DB에 세션을 생성
# 2. request 객체에 session 정보가 생성
# => request.session 사용 가능
auth_login(request, form.get_user())
return redirect('articles:index')
else:
form = AuthenticationForm()
context = {
'form':form,
}
return render(request, 'accounts/login.html', context)
def logout(request):
auth_logout(request)
# 세션 삭제
# 1. DB에 있는 세션 삭제
# 2. request 객체에 담긴 session 삭제
return redirect('articles:index')
def update(request):
if request.method == 'POST':
form = CustomUserChangeForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
return redirect('articles:index')
else:
form = CustomUserChangeForm(instance=request.user)
context = {
'form':form,
}
return render(request, 'accounts/update.html', context)
update.html
{% extends 'base.html' %}
{% block content %}
<form action="" method="POST">
{% csrf_token %}
{{ form }}
<button>회원정보수정</button>
</form>
{% endblock %}
forms.py 만들기 (accounts)
from django import forms
from .models import Article
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = '__all__'
# exclude = ('title',)
: 추가로 아래 패스워드 머시기 없앨때 아래 코드
아티크폼과 메타 사이에 적어주시면됩니다.
password = None
비밀번호 수정
위 과정은 전부 비슷하다
다만 form에 PasswordChangeForm 이 들어간다.
여기를 참고해주자
views.py
def password_update(request):
from django.contrib.auth import update_session_auth_hash
if request.method == 'POST':
form = PasswordChangeForm(
user=request.user, data=request.POST
)
if form.is_valid():
form.save()#비밀번호 변경
update_session_auth_hash(request, form.user)
return redirect('articles:index')
else:
form = PasswordChangeForm(request.user)
context = {
'form':form,
}
return render(request, 'accounts/password_update.html', context)
728x90
반응형