2022. 2. 4. 14:56ㆍ강의 정리/Django 기초
장고(Django)를 배우기 시작한 입문자이시거나, 또는 배우고 싶은 생각이 있으신 분은 위 출처의 강의를 적극 추천드립니다!!!
User 모델 커스텀하기
1. 먼저 accounts라는 앱을 생성한다.
python manage.py startapp accounts
1-1 : 앱이 만들어지면 urls.py를 만들어준다.
from django.urls import path
urlpatterns = [
]
1-2 : settings.py(=common.py)에 등록시켜준다.
INSTALLED_APPS = [
# Django Apps
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Third Apps
'debug_toolbar',
'bootstrap4',
# Local Apps
'accounts',
]
1-3 : 프로젝트의 urls.py에 등록시켜준다.
urlpatterns = [
path('accounts/' , include('accounts.urls')),
]
2. accounts/models.py에서 User Model을 커스텀한다.
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
website_url = models.URLField(blank=True)
bio = models.TextField(blank=True)
#class Profile(models.Model):
# pass
2-1 : User를 커스텀할 때는 반드시 settings.py(=common.py)에 아래 코드를 등록시켜준다.
# accounts 앱에 있는 User 모델을 기본 User 모델로 쓰겠다.
AUTH_USER_MODEL = "accounts.User"
2-2 : 반드시 makemigrtions 후 migrate를 진행 해야한다.
migrations 오류
오류 해결 : https://www.jgahn.com/archive/post/40/
만약 위 방법으로도 해결이 안된다면. 터미널에서
rm -f db.sqlite3
명령어를 통해서 DB를 제거하고 진행하는 방법을 이야기드리지만, 웬만해서는 DB를 삭제하는 일은 없는게 좋다....
3. accounts/admin.py에서 models의 User 모델을 admin 사이트에 등록시킨다.
from django.contrib import admin
from .models import User
# Register your models here.
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
list_display = [
'username', 'email', 'website_url', 'is_active', 'is_staff' ,'is_superuser'
]
회원가입 기능 구현하기
1. accounts 앱 아래에 forms.py를 만들어준다.
from .models import User
from django import forms
from django.contrib.auth.forms import UserCreationForm
class SignupForm(UserCreationForm):
# 회원가입시 새로운 필드들을 커스텀 하고 싶을 때 생성자 호출
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 부모를 호출함.
# form에 적용시키고 싶은 필드들을 오버라이딩을 통해 True로 지정
self.fields['email'].required = True
self.fields['first_name'].required = True
self.fields['last_name'].required = True
class Meta(UserCreationForm.Meta):
model = User
fields = [
'username', 'email', 'first_name', 'last_name'
]
# email 중복 방지 함수
def clean_email(self):
email = self.cleaned_data.get('email')
if email:
qs = User.objects.filter(email=email)
if qs.exists():
raise forms.ValidationError("이미 등록된 이메일 주소입니다.")
return email
#UserCreationForm을 이용하면 회원가입시 비밀번호가 저장될 때 암호화되어서 저장된다.
#username은 기본적으로 unique가 지정되어있다.
2. accounts/views.py에 signup 함수 구현
from django.contrib import messages
from django.shortcuts import render, redirect
from .forms import SignupForm
# Create your views here.
def signup(request):
if request.method == 'POST':
form = SignupForm(request.POST)
if form.is_valid():
next_url = request.GET.get('next', '/') # next 인자를 가져오고, 없으면 / 주소로 이동
user = form.save()
messages.success(request, "회원가입이 되었습니다~!")
return redirect(next_url)
else:
form = SignupForm()
return render(request, 'accounts/signup_form.html', {
'form' : form,
})
#message를 화면에 노출시키고 싶을 때
#프로젝트/templates/layout.html
<body>
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.tags }}">
{{ message }}
</div>
{% endfor %}
{% endif %}
</body>
3. accounts/templates/accounts/에 signup_form 템플릿 구현
{% extends "accounts/layout.html" %}
{% load bootstrap4 %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-sm-6 offset-sm-3">
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{% bootstrap_form form %}
{% buttons %}
<button type="submit" class="btn btn-primary">
{{ submit_label|default:"Submit" }}
</button>
{% endbuttons %}
</form>
</div>
</div>
</div>
{% endblock %}
4. accounts/urls.py에 views 함수 연결시키기
from django.urls import path
from . import views
urlpatterns = [
path('signup/', views.signup, name='signup'),
]
'강의 정리 > Django 기초' 카테고리의 다른 글
Django 로그인, 로그아웃 구현하기 (0) | 2022.02.07 |
---|---|
Django 회원 가입 이메일 보내기 (1) | 2022.02.05 |
관계를 표현하는 모델 필드 #ManyToManyField (0) | 2022.01.03 |
Django App이란 무엇일까??? (0) | 2021.12.24 |
동백 // Django 설치 및 프로젝트 생성 (0) | 2021.12.23 |