일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이썬
- 그리디알고리즘
- 코드트리
- Kruskal
- DP
- MyPlaylist
- 데이터베이스
- programmers
- DFS
- 모각코
- 소프트웨어공학
- 함밥
- 프로그래머스
- SQL
- minimum spanning tree
- 최소스패닝트리
- Planned
- 종합설계
- codetree
- 동적계획법
- 백준
- Bellman-Ford
- 마라마라빔
- B대면노래방
- 실습
- 백트래킹
- BFS
- 알고리즘
- django
- 장고
- Today
- Total
Leta Learns
django | User 모델을 이용한 Signup, User 확장 본문
account/views.py
from django.shortcuts import render, redirect
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
from django.contrib import auth
def signup_view(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
auth.login(request, user)
return redirect('home')
return redirect('account:signup')
else:
form = UserCreationForm()
return render(request, 'signup.html', {'form' : form})
장고에서 UserCreationForm이라는 ModelForm을 이미 만들어놓았기 때문에 가능.
그냥 import해서 사용하면 됨.
base.html에서 NavBar 수정하기
(로그인 된 상태에서는 회원가입 버튼 x, 로그아웃 상태에서만 회원가입 버튼 뜨도록)
User 모델 확장
장고의 기본 user 모델은 실제 서비스에서는 매우 한정적임.
(User 모델 기본 구성)
class User(models.Model):
username = models.CharField(max_length=150)
password = models.CharField(max_length=128)
last_login = models.DateTimeField(blank=True, null=True)
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=150, blank=True)
email = models.EmailField(blank=True)
is_staff = models.BooleanField()
is_active = models.BooleanField()
date_joined = models.DateTimeField()
is_superuser = models.BooleanField()
더 필요한 정보를 데이터에 저장하려면 User모델에 추가해야함.
account/models.py (-> 해당내용 정의)
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class CustomUser(AbstractUser):
nickname = models.CharField(max_length=100)
university = models.CharField(max_length=50)
location = models.CharField(max_length=200)
장고 User모델 확장을 위해 AbstractUser 클래스를 상속해야함.
settings.py
AUTH_USER_MODEL = 'account.CustomUser'
account앱 models.py에 만든 CustomUser 모델을 통해 auth기능을 사용하기 위해서 settings.py에 추가해준 것.
auth : 장고에서 제공하는 로그인, 회원가입 등을 위한 것.....
models.py 수정했으니 makemigrations, migrate 하기
! 기존에 superuser생성하면서 만들었던 user모델이 존재해서 migrate시 오류가 발생함.
이를 피하기 위해 잠시 admin과 관련된 것들을 주석처리 한 다음 migrate해주고
migrate한 후 해당 주석처리 다시 풀어주기.
forms.py 작성
User 모델에 새로운 데이터 필드 추가했으므로 새로운 forms.py 작성해줘야 함.
account/forms.py
from django.contrib.auth.forms import UserCreationForm
from .models import CustomUser
class SignupForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ['username', 'password1', 'password2', 'nickname', 'university', 'location']
UserCreationForm을 상속해서 SignupForm 만들기.
fields에 nickname, university, location 필드 추가.
변경된 내용은 account/views.py에도 적용해야 함
account/views.py
from .forms import SignupForm
def signup_view(request):
if request.method == 'POST':
form = SignupForm(request.POST)
if form.is_valid():
user = form.save()
auth.login(request, user)
return redirect('home')
return redirect('account:signup')
else:
form = SignupForm()
return render(request, 'signup.html', {'form' : form})
SignupForm import하기.
(기존에 쓴 UserCreationForm을 SignupForm으로 대체)
로그인된 사용자에게 인사해주는 코드
{% if user.is_authenticated %}
=> 로그인 되어있는지 묻는 코드
blog/home.html
{% if user.is_authenticated %}
{{user.location}}에 사는 {{user.university}}다니는 {{user.nickname}} 안녕하세요!
{% endif %}
=> 회원, 비회원마다 각각 다른 화면이 보여짐.
Admin 페이지에 모델 등록
admin 페이지 : 데이터 관리 => 가입된 회원 정보도 관리 가능.
account/admin.py
from django.contrib import admin
from .models import CustomUser
# Register your models here.
admin.site.register(CustomUser)
'Django' 카테고리의 다른 글
django | Pagination (0) | 2021.07.18 |
---|---|
쿼리 스트링 Query String (0) | 2021.07.18 |
django | User 모델을 이용한 login, logout (0) | 2021.07.13 |
django | Forms (0) | 2021.07.08 |
django | Media 파일 (0) | 2021.07.08 |