Django Admin์ด๋?
1. Django Admin ์ ์
Django Admin์ Django์์ ์ ๊ณตํ๋ ์๋ํ๋ ๊ด๋ฆฌ์ ์ธํฐํ์ด์ค๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ์ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๋๋ก ํด์ค๋ค.
๊ฐ๋ฐ์๋ Django Admin์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ, ์์ , ์ญ์ , ๊ฒ์ํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ณ๋์ ๊ด๋ฆฌ ํ์ด์ง๋ฅผ ๊ฐ๋ฐํ์ง ์๊ณ ๋
ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ํ ์ ์๋ค.
Django ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด `admin` ์ฑ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ต์ํ์ ์ค์ ์ผ๋ก ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
2. Django Admin ํ์ฑํํ๊ธฐ
1๏ธโฃ `admin` ์ฑ์ด ์ค์น๋์ด ์๋์ง ํ์ธ
Django์ `INSTALLED_APPS` ์ค์ ์ `django.contrib.admin`์ด ํฌํจ๋์ด ์์ด์ผ ํ๋ค.
# settings.py
INSTALLED_APPS = [
'django.contrib.admin', # ๊ด๋ฆฌ์ ๊ธฐ๋ฅ
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', # ์ฌ์ฉ์ ์ฑ
]
2๏ธโฃ ๊ด๋ฆฌ์ ๊ณ์ ์์ฑ
Django Admin์ ์ฌ์ฉํ๋ ค๋ฉด ์ํผ์ ์ (Superuser) ๊ณ์ ์ ๋ง๋ค์ด์ผ ํ๋ค.
python manage.py createsuperuser
โ ์ ๋ ฅํ ์ ๋ณด:
- ์ฌ์ฉ์ ์ด๋ฆ(username)
- ์ด๋ฉ์ผ ์ฃผ์(email)
- ๋น๋ฐ๋ฒํธ(password)
3๏ธโฃ urls.py์์ Admin URL ๋งคํ ํ์ธ
ํ๋ก์ ํธ์ `urls.py`์์ `admin/` ๊ฒฝ๋ก๊ฐ ์ค์ ๋์ด ์์ด์ผ ํ๋ค.
# urls.py
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
4๏ธโฃ ์๋ฒ ์คํ ํ Django Admin ์ ์
python manage.py runserver
์ดํ ๋ธ๋ผ์ฐ์ ์์ `http://127.0.0.1:8000/admin/`๋ก ์ ์ํ์ฌ ๋ก๊ทธ์ธํ๋ฉด Django Admin์ ์ฌ์ฉํ ์ ์๋ค.
3. ๋ชจ๋ธ์ Django Admin์ ๋ฑ๋กํ๊ธฐ
Django Admin์์ ์ง์ ๊ด๋ฆฌํ๋ ค๋ ๋ชจ๋ธ์ admin ํจ๋์ ๋ฑ๋กํด์ผ ํ๋ค.
1๏ธโฃ ๊ธฐ๋ณธ์ ์ธ ๋ชจ๋ธ ๋ฑ๋ก
# admin.py
from django.contrib import admin
from .models import Student
admin.site.register(Student)
์ด์ `Student` ๋ชจ๋ธ์ด Django Admin์์ ๋ณด์ด๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ/์์ /์ญ์ ํ ์ ์๋ค.
2๏ธโฃ admin.ModelAdmin์ ์ฌ์ฉํ ์ปค์คํ ๊ด๋ฆฌ
๊ธฐ๋ณธ์ ์ธ ๋ชจ๋ธ ๋ฑ๋ก๋ฟ๋ง ์๋๋ผ, `ModelAdmin`์ ์ฌ์ฉํ๋ฉด ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ค.
# admin.py
from django.contrib import admin
from .models import Student
class StudentAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'age', 'grade', 'created_at') # ๋ชฉ๋ก์์ ๋ณด์ด๋ ํ๋
list_filter = ('grade', 'created_at') # ํํฐ ๊ธฐ๋ฅ ์ถ๊ฐ
search_fields = ('name', 'grade') # ๊ฒ์ ๊ธฐ๋ฅ ์ถ๊ฐ
ordering = ('-created_at',) # ์ ๋ ฌ ๊ธฐ์ค
admin.site.register(Student, StudentAdmin)
โ ์ค๋ช :
- `list_display` → ๋ชฉ๋ก ํ๋ฉด์์ ํ์ํ ํ๋
- `list_filter` → ์ฐ์ธก์ ํํฐ ์ต์ ์ถ๊ฐ
- `search_fields` → ์๋จ์ ๊ฒ์ ๊ธฐ๋ฅ ์ถ๊ฐ
- `ordering` → ๊ธฐ๋ณธ ์ ๋ ฌ ๊ธฐ์ค ์ค์
4. Django Admin ์ปค์คํฐ๋ง์ด์ง
Django Admin์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ UI ์ธ์๋ ๋ค์ํ ์ปค์คํฐ๋ง์ด์ง์ด ๊ฐ๋ฅํ๋ค.
1๏ธโฃ ๋ชจ๋ธ ํ๋ ์์ ๊ฐ๋ฅ ์ฌ๋ถ ์ค์
class StudentAdmin(admin.ModelAdmin):
readonly_fields = ('created_at',) # ์์ ๋ถ๊ฐ๋ฅํ ํ๋
fields = ('name', 'age', 'grade', 'created_at') # ํผ์ ํ์ํ ํ๋ ์์
โ `readonly_fields` → ํน์ ํ๋๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ค์ โ `fields` → ํ๋ ์์๋ฅผ ์กฐ์ ํ ์ ์์
2๏ธโฃ ์ธ๋ผ์ธ(Inline) ๋ชจ๋ธ ๊ด๋ฆฌ
ํ๋์ ๋ชจ๋ธ์ด ๋ค๋ฅธ ๋ชจ๋ธ๊ณผ ForeignKey ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์์ ๋, ํ ํ๋ฉด์์ ํจ๊ป ๊ด๋ฆฌํ ์ ์๋ค.
from .models import Course, Enrollment
class EnrollmentInline(admin.TabularInline):
model = Enrollment
extra = 1 # ์ถ๊ฐํ ์ ์๋ ๋น ํ๋ ๊ฐ์
class CourseAdmin(admin.ModelAdmin):
inlines = [EnrollmentInline]
admin.site.register(Course, CourseAdmin)
โ ForeignKey ๊ด๊ณ๋ฅผ ๊ฐ์ง ๋ชจ๋ธ์ ํ ํ๋ฉด์์ ๊ด๋ฆฌํ ์ ์๋ค.
3๏ธโฃ ๊ด๋ฆฌ์ ์ฌ์ดํธ์ ๊ธฐ๋ณธ ์ ๋ณด ๋ณ๊ฒฝ
admin.site.site_header = "My Django Admin"
admin.site.site_title = "Admin Panel"
admin.site.index_title = "Welcome to the Admin Dashboard"
โ Admin ํ์ด์ง์ ๊ธฐ๋ณธ ์ ๋ชฉ๊ณผ ํค๋๋ฅผ ๋ณ๊ฒฝํ์ฌ ๋ธ๋๋ํ ๊ฐ๋ฅ
5. Django Admin์ ๊ถํ ๋ฐ ์ฌ์ฉ์ ๊ด๋ฆฌ
Django Admin์์๋ ์ฌ์ฉ์ ๊ณ์ ๊ณผ ๊ถํ์ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
1๏ธโฃ ์ฌ์ฉ์ ๋ฐ ๊ทธ๋ฃน ๊ด๋ฆฌ
Django์ `auth` ์์คํ ์ ํ์ฉํ๋ฉด ํน์ ์ฌ์ฉ์์๊ฒ ํน์ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ค.
- `is_staff = True` → Admin ํ์ด์ง์ ์ ๊ทผ ๊ฐ๋ฅ
- `is_superuser = True` → ๋ชจ๋ ๊ถํ์ ๊ฐ์ง
- ๊ทธ๋ฃน(Group)์ ๋ง๋ค์ด ์ฌ๋ฌ ์ฌ์ฉ์์๊ฒ ๊ณตํต ๊ถํ ๋ถ์ฌ ๊ฐ๋ฅ
2๏ธโฃ ๋ชจ๋ธ๋ณ ๊ถํ ์ค์
๋ชจ๋ธ์ ๋ฑ๋กํ ๋ `permissions`๋ฅผ ์ค์ ํ ์ ์๋ค.
class Student(models.Model):
name = models.CharField(max_length=100)
grade = models.IntegerField()
class Meta:
permissions = (
("can_change_grade", "Can change student grade"),
)
โ ํน์ ์ฌ์ฉ์์๊ฒ `"can_change_grade"` ๊ถํ์ ๋ถ์ฌํ ์ ์์
django admin ์ ๋ฆฌ:
โ Django Admin์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ๊ด๋ฆฌ์ ์ธํฐํ์ด์ค๋ค~
โ `admin.site.register()`๋ฅผ ํตํด ๋ชจ๋ธ์ Admin ํจ๋์ ๋ฑ๋กํด์ผ ํ๋ค~
โ `ModelAdmin`์ ํ์ฉํ๋ฉด ๊ฒ์, ํํฐ, ์ ๋ ฌ, ์ฝ๊ธฐ ์ ์ฉ ํ๋ ๋ฑ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ค~
โ ForeignKey ๊ด๊ณ ๋ชจ๋ธ์ InlineAdmin์ผ๋ก ํ ํ๋ฉด์์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค~
โ ์ฌ์ฉ์ ๋ฐ ๊ถํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๊ด๋ฆฌ์ ์ ๊ทผ์ ์ธ๋ถํํ ์ ์๋ค~
โ Django Admin์ ํ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ํ๋ก ํธ์๋๋ฅผ ๋ณ๋๋ก ๋ง๋ค์ง ์๊ณ ๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค~
'AI ๐ค > Django โ๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250205] Postman?? (1) | 2025.02.05 |
---|---|
[250205] CRUD ์์ธ ์ ๋ฆฌ~ (0) | 2025.02.05 |
[250204] URI ์ดํดํ๊ธฐ (0) | 2025.02.04 |
[250203] Serializer ์ ๋ฆฌ~ (0) | 2025.02.03 |
[250131] django DRF(Django Rest Framework)๋~ (0) | 2025.01.31 |