web/likelion

[Django] ๋กœ๊ทธ์ธ / ๋กœ๊ทธ์•„์›ƒ / ํšŒ์›๊ฐ€์ž…

[ User ๊ธฐ๋ณธ ]

1. python manage.py startapp account ๋ฅผ ํ†ตํ•ด ๊ณ„์ • ๊ด€๋ จ ์•ฑ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ๋‹ค

2. settings.py์—์„œ INSTALLED_APPS์— ์•ฑ ์ƒ์„ฑ ์•Œ๋ ค์ฃผ๊ธฐ

3. templatesํด๋”์— login.html๊ณผ signup.html ์ƒ์„ฑ(๋กœ๊ทธ์•„์›ƒ์€ ํ•„์š”์—†์Œ)

4. views.py์—์„œ ๋กœ๊ทธ์ธ ํผ๊ณผ ํšŒ์›๊ฐ€์ž… ํผ ์ƒ์„ฑ

from django.shortcuts import render, redirect
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
from django.contrib.auth import authenticate, login, logout

5. views.py

def login_view(request):
	if request.method == 'POST' #post๋ฐฉ์‹, get๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋Œ์•„๊ฐ€๋Š” ๋กœ์ง
    	form = AuthenticationForm(request=request, data=request.POST)
        if form.is_valid(): #์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
        	username = form.cleaned_data.get("username")
            password = form.cleaned_data.get("password")
            user = authenticate(request=request, username=username, password=password)
            if user is not None: #์œ ์ €๊ฐ€ ์กด์žฌํ•  ๋•Œ
            	login(request, user)
        return redirect("home")
    else:
		form = AuthenticationForm() #๋กœ๊ทธ์ธํผ ์ƒ์„ฑ
    	return render(request, 'login.html', {'form':form})
        
def logout_view(request):
	logout(request)
	return redirect("home")
    
def register_view(request):
	if request.method == 'POST'
	form = UserCreationForm(request.POST)
    if form.is_valid():
    	user = form.save() #์œ ํšจํ•˜๋ฉด ์ €์žฅ
        login(request, user)
    return redirect("home")
    else:
    	form = UserCreationForm()
    	return render(request, 'signup.html', {'form':form})

6. account์•ฑ์— urls.py ์ƒ์„ฑ

from django.urls import path
from .views import *

urlpatterns = [
    path('login/', login_view, name="login"),
    path('logout/', logout_view, name="logout"),
    path('register/', register_view, name="signup"),
]

7. projectํด๋” urls.py์— path('account/', include('account.urls')),

8. login.html, signup.html์˜ action="{% url 'login / logout / signup' %}"

9. {% if user.is_authenticated %} ๋กœ ์œ ํšจํ•œ ์œ ์ €์ธ์ง€(๋กœ๊ทธ์ธ ๋œ ์ƒํƒœ์ธ์ง€) ํŒ๋ณ„ ๊ฐ€๋Šฅ {% endif %}

10. {% if not user.is_authenticated %}๋Š” ์ธ์ฆ๋˜์ง€ ์•Š์€(๋กœ๊ทธ์ธ ์•ˆ๋œ) ์œ ์ €์—๊ฒŒ๋งŒ ๋„์šฐ๊ธฐ {% endif %}

[ User ํ™•์žฅ ]

11. models.py์—์„œ ์œ ์ € ํ™•์žฅ

from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    nickname = models.CharField(max_length=100)
    university = models.CharField(max_length=50)
    location = models.CharField(max_length=200)

12. settings.py์—์„œ ์ธ์ฆ ๋ฐ›์„ ์œ ์ €๋ชจ๋ธ์„ ์ด ๋ชจ๋ธ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ ์ •์˜

AUTH_USER_MODEL = 'account.CustomUser' #์ธ์ฆํ•˜๋Š” ์œ ์ € ๋ชจ๋ธ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๊ณ  ์„ ์–ธ

13. python manage.py makemigration

14. settings.py์˜ INSTALLED_APPS๋‚ด 'django.contrib.admin' ์ฃผ์„์ฒ˜๋ฆฌ

15. urls.py์˜ from django.contrib import admin, path('admin/'~~) ์ฃผ์„์ฒ˜๋ฆฌ

16. python manage.py migrate

17. ์•ž์„œ ์ฃผ์„์ฒ˜๋ฆฌ ํ–ˆ๋˜ ๊ฒƒ๋“ค ๋‹ค์‹œ ํ•ด์ œ

18. account์•ฑ์—์„œ forms.py ์ƒ์„ฑ

from django.contrib.auth.forms import UserCreationForm
from .models import CustomUser

class RegisterForm(UserCreationForm):
	class Meta:
    	model = CustomUser
        fields = ['username', 'password1', 'password2', 'nickname', 'location', 'university']
        #password ๋‘๊ฐœ : ํŒจ์Šค์›Œ๋“œ ํ™•์ธ ์œ„ํ•ด ๋‘๋ฒˆ ์ž…๋ ฅํ•จ

19. views.py์—์„œ RegisterForm ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

from django.shortcuts import render, redirect
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import authenticate, login, logout
from .forms import RegisterForm

def register_view(request):
    if request.method == 'POST': #request method๊ฐ€ post๋ฉด form์„ ๋ฐ›์Œ
        form = RegisterForm(request.POST)
        if form.is_valid(): #ํผ ๋ฐ›์€ ํ›„ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
            user = form.save() #ํผ์„ ์ €์žฅ, ํผ ์•ˆ์— ์ ์–ด์ฃผ๋Š” ์ •๋ณด ์™ธ์— ํ•„์š”ํ•œ ์ •๋ณด ์—†์Œ, commit ์ž‘์„ฑx
            login(request, user)
        return redirect("home")
    else:
        form = RegisterForm()
        return render(request, 'signup.html', {'form':form})

20. admin.py์— ๋ชจ๋ธ ๋“ฑ๋ก

from django.contrib import admin
from .models import CustomUser
# Register your models here.

admin.site.register(CustomUser)