본문 바로가기

Computer Science/Django_pinterest

210824 장고 커밋 30 Profileapp 시작 그리고 ModelForm

210824 장고 커밋 30 Profileapp 시작 그리고 ModelForm

보안에 취약하니, 닉네임으로 만들어주는 목적이다.
닉네임,이미지,메세지 3개를 묶은 프로필앱을 따로만들거다.
프로필과 어카운트를 1:1로 매칭할것다. 어카운트에 하나의 프로필만 가능하게 구현하겠습니다.
NO DELETE VIEW
NO DETAIL VIEW

-----------

    user = models.OneToOneField(user)
user객체를 프로파일과 하나씩 연결해준다.

class Profile(models.Model) :
class Profile(models.Model) :
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
on_delete = user 객체가 사라질때 어떤 반응을 보일것인가 
casacade =user가 탈퇴하게되면 그 프로필이 없어지게 설정하는 것이다
related_name='profile' : 뷰에서 여러가지 유저객체를 사용했는데 
request.user.profile 이런것을 썼었는데 굳이 따로 프로필 객체를 찾지 않더라도, 저 명령어에 바로 이름을 정해서 
바로 출력할 수 있다.

form
accountapp
user creation form
-from django  기본장고에서 주는 것 이다.

profile은 기본제공이 안된다 
수십개를 다 치기 는 힘드니, model form이라는 기능을 쓴다.

정리합니다

----------------------------

python manage.py startapp profileapp : profileapp folder creation 

pragmatic - settings -  INSTALLED_APPS - 'profileapp' 추가

pragmatic/urls.py -     path('profiles/', include('profileapp.urls')), 추가

profileapp/urls.py - app_name = 'profileapp' 코딩 - urlpatterns 코딩 

profileapp/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)
    # null이 트루면 꼭 없어도 된다.
    nickname = models.CharField(max_length=20, unique=True, null=True)
    # unique 이 닉네임은 유일한 닉네임을 가져야한다.
    message = models.CharField(max_length=100, null=True)

profileapp/forms.py-
from django.forms import ModelForm
from profileapp.models import Profile
class ProfileCreationForm(ModelForm):
    class Meta:
        model = Profile
        fields = ['image', 'nickname', 'message']