1. Django 앱 만들기
0) 계획 세우기
- 기능을 구현할 앱을 작은 단위로 쪼개자
- 한 문장으로 표현될 수 있게 앱 단위를 나누면 좋다
1) 앱 만들기
- 아래 생성된 파일들의 이름을 바꾸면 안됨
- admin : django의 admin 패널에 반영됨( :8000/admin)
- apps : config 파일
- models : data 파일. DB가 어떻게 구성되어야 하는지 적음. 데이터의 형태
- test : test
- views : html을 render
- migrations : models에서 변경하면 이 폴더 및에 migrations이 만들어진다
django-admin startapp users
.
├── __init__.py
├── admin.py
├── apps.py
├── migrations
├── models.py
├── tests.py
└── views.py
- config/settings.py에 새로 만든 앱을 추가하기
DJANGO_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]
PROJECT_APPS = [
"users.apps.UsersConfig",
]
INSTALLED_APPS = DJANGO_APPS + PROJECT_APPS
# 이미 있는 user 모델을 바꿔서 내가 생성한 users를 보도록 추가해줌
AUTH_USER_MODEL = "users.User"
- models에 User class 만들고 bio 필드 만들기
-> bio에 default 넣어주기
You are trying to add a non-nullable field 'bio' to user without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option: 2
- Image field는 Pillow 설치해주자
users.User.avatar: (fields.E210) Cannot use ImageField because Pillow is not installed. HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "pip install Pillow".
pipenv install Pillow
- CharField에 choice 옵션을 줄 수 있따
tuple로 구성해서 왼쪽이 DB에 저장되는 것, 오른쪽이 웹에 보여줄 것
default="ㅌㅌ" : 기본으로 "ㅌㅌ"를 넣어줌
null=True : 빈 값도 상관없음(DB에서)
blank=True : 이게 false면 이 값은 무조건 채워야 함("" 허용 안함)
- User class : DB의 테이블
- avatar : 필드
class User(AbstractUser):
""" Custom User Model """
GENDER_MALE = "male"
GENDER_FEMALE = "female"
GENDER_OTHER = "other"
GENDER_CHOICES = (
(GENDER_MALE, "Male"), (GENDER_FEMALE, "Female"), (GENDER_OTHER, "Other"))
LANGUAGE_ENGLISH = "en"
LANGUAGE_KOREAN = "ko"
LANGUAGE_CHOICES = (
(LANGUAGE_ENGLISH, "English"),
(LANGUAGE_KOREAN, "Korean")
)
CURRENCY_USD = "usd"
CURRENCY_KRW = "krw"
CURRENCY_CHOICES = (
(CURRENCY_USD, "USD"),
(CURRENCY_KRW, "KRW")
)
avatar = models.ImageField(null=True, blank=True)
gender = models.CharField(choices=GENDER_CHOICES, default=GENDER_FEMALE,
max_length=10, null=True, blank=True)
bio = models.TextField(default="", blank=True)
birthdate = models.DateField(null=True)
language = models.CharField(
choices=LANGUAGE_CHOICES, max_length=2, null=True, blank=True, default=LANGUAGE_KOREAN)
currency = models.CharField(
choices=CURRENCY_CHOICES, max_length=3, null=True, blank=True, default=CURRENCY_KRW)
superhost = models.BooleanField(default=False)
- admin.py에 기존 UserAdmin의 fieldsets과 함께 내가 만든 User 필드를 보여주고 싶으면 아래처럼 설정
내가 만든 User모델은 @admin.register에 등록해야 볼 수 있다
# admin.site.register(models.User, CustomUserAdmin) 와 같다
@admin.register(models.User)
class CustomUserAdmin(UserAdmin):
""" Custom User Admin """
fieldsets = UserAdmin.fieldsets+(
(
"Custom Profile",
{
"fields": (
"avatar",
"gender",
"bio",
"birthdate",
"language",
"currency",
"superhost",
)
}
),
)
- Django
찾아보기
* Django ORM(Object Relational Mapping) : models.py에 적어둔 파이썬 코드를 SQL로 바꿔서 DB와 연동함
'개발 > AWS' 카테고리의 다른 글
Django 앱 만들기 - admin 패널 꾸미기, QuerySet, UserManager (0) | 2021.01.21 |
---|---|
AWS 솔루션 (0) | 2021.01.20 |
Django 앱 만들기 - abstract class, ForeignKey, __str__, ManyToManyField (0) | 2021.01.19 |
Django 환경 설정 - EC2, ubuntu, pipenv 사용 (0) | 2021.01.14 |
[AWS] Free tier 생성! (0) | 2020.07.05 |
댓글