Profileapp을 만들기 시작한다.
Account와 Profile을 1:1 로 매칭. 1개의 account는 1개의 profile을 가진다.
구성:
- Profile Image
- Profile Nickname
- Profile Message
Delete View는 만들지 않을것이고, Detail View도 profile을 따로 보여주는 페이지를 안만들거니까 구현하지 않는다.
1
python manage.py startapp profileapp
2
settings.py에 추가
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accountapp',
'bootstrap4',
'profileapp',
]
3
urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('accountapp.urls')),
path('profiles/', include('profileapp.urls')),
]
4
profileapp/urls.py 생성
app_name = 'profileapp'
urlpatterns = [
]
5
이제 db랑 연동을 해야하니까 담고자하는 model을 만들어야한다.
models.py
from django.contrib.auth.models import User
from django.db import models
# Create your models here.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
image = models.ImageField(upload_to='profile/', null=True)
nickname = models.CharField(max_length=20, unique=True, null=True)
message = models.CharField(max_length=100, null=True)
OneToOneField() 는 장고에서 주는 필드중 하나인데 이 프로필과 유저객체를 하나씩 연결해준다
on_delete: 연결되어 있는 User 객체가 delete 될때 그와 연결되어 있는 profile객체가 어떤 행동을 보일것인지.
즉 CASCADE로 해놓은건 없어질때 그 프로필도 없어지게 설정을 한것. (유저가 탈퇴하면 프로필도 없어진다)
related_name: 연결해서 바로 접근할 수 있도록함
upload_to: 이미지 저장경로
unique: 유일성
6
accountapp에서 썼던 UserCreationFormn의 경우엔 장고에서 제공하는 기본 폼이기 때문에 그냥 썼었는데
profileapp은 제공되는 게 없다.
원래는 ProfileCreationForrm을 새로만들어서
class ProfileCreationForm(forms.Form)
image = forms.ImageField(upload_to='profile/', numm=True)
nickname = forms.CharField(max_length=20)
......
이런식으로 쭉 작성해줘야한다. 근데 너무 많으면 힘드니까 Model Form이라는게 존재한다.
기존에 있었던 모델을 form으로 변환해주는 그런 기능!
ModelForm을 상속받고 어떤 모델을 사용할 건지 어떤 필드를 입력할 수 있게할건지 설정.
profileapp/forms 생성
from django.forms import ModelForm
from profileapp.models import Profile
class ProfileCreationForm(ModelForm):
class Meta:
model = Profile
fields = ['image', 'nickname', 'message'] #user는 서버에서 처리해줄것
7
python manage.py makemigrations
python manage.py migrate
'웹 프로그래밍' 카테고리의 다른 글
[pinterest clone (24)] profileapp update view (0) | 2021.04.30 |
---|---|
[pinterest clone (23)] profileapp create view (0) | 2021.04.30 |
[pinterest clone (21)] superuser, media 관련설정 (0) | 2021.04.30 |
반응형 플러그인 모음 (0) | 2021.04.28 |
[pinterest clone (20)] Authentication (0) | 2021.04.28 |