Django & DRF
get_queryset()perform_create(serializer)serializer.save() 호출 직전에 추가 처리(작성자 정보, 기본값 설정 등)를 하고 싶을 때 사용perform_update(serializer)perform_destroy(instance)get_serializer_class()get_permissions()get_object()get_serializer_context()filter_queryset(queryset)from django.contrib.auth.decorators import login_requiredfrom django.shortcuts import render, redirect, get_object_or_404render(request, template, context) redirect("url_name") get_object_or_404(Model, 조건...) render(request, template, context=None)
request
"accounts/account_list.html"
{ "accounts": accounts }
템플릿에 전달할 데이터(Context)
템플릿 파일에서 accounts 라는 이름으로 이 데이터를 사용 가능.(아래처럼 사용 가능)
{% for a in accounts %}
<p>{{ a.name }}</p>
{% endfor %}
templates디렉토리 의 accounts/account_list.html 파일을 찾음accounts 라는 이름으로 accounts QuerySet을 템플릿에 전달render(request, template_name, context=None)request"accounts/account_list.html"{ "accounts": accounts }app_name = "accounts"
urlpatterns = [
path("", views.account_list_view, name="account_list"),
path("create/", views.account_create_view, name="account_create"),
path("<int:pk>/delete/", views.account_delete_view, name="account_delete"),
]
<a href="/accounts/create/">계좌 생성</a> 이렇게 사용시 <a href="{% url 'accounts:account_create' %}">계좌 생성</a> <a href="/accounts/1/delete/">삭제</a><a href="{% url 'accounts:account_delete' pk=account.id %}">삭제</a>from django.urls import path
from .views import AnalysisListView, AnalysisCreateView
from .views_html import analysis_list_html, analysis_create_html
app_name = "analysis"
urlpatterns = [
# API
path("api/", AnalysisListView.as_view(), name="analysis_list"),
path("api/create/", AnalysisCreateView.as_view(), name="analysis_create"),
# HTML
path("html/", analysis_list_html, name="analysis_html"),
path("html/create/", analysis_create_html, name="analysis_create_html"),
]
AnalysisListView.as_view() | 클래스 기반 뷰(CBV)를 URL에 연결class AnalysisListView(ListAPIView):as_view().as_view()analysis_list_html | 함수 기반 뷰(FBV)를 URL에 연결def analysis_list_html(request):# config/urls.py
from django.contrib import admin
from django.urls import path, include
from accounts import views as account_views
from transactions import views as transaction_views
urlpatterns = [
path("admin/", admin.site.urls),
path("accounts/", include('accounts.urls')),
path("transactions/", include('transactions.urls')),
]
# accounts/urls.py
from django.urls import path
from .views import AccountListCreateView, AccountDetailView
app_name = 'accounts'
urlpatterns = [
path('', AccountListCreateView.as_view(), name='account_list'),
path('<int:pk>/', AccountDetailView.as_view(), name='account_detail'),
]
accounts/ 로 들어가면 path('', AccountListCreateView...) 가 실행core/urls.py 의 path("accounts/", include('accounts.urls')) accounts 로 들어오는 모든 요청을 accounts.urls 로 넘겨라"accounts/ 이후의 URL 경로를 accounts/urls.py 로 넘겨서 거기서 다시 해석accounts/ → 남는 경로 = ""path('', AccountListCreateView.as_view()) 가 실행# files/urls_html.py
from django.urls import path
from .views_html import file_upload_page, file_list_page, file_delete_page
app_name = "html_files"
urlpatterns = [
path("upload/", file_upload_page, name="file_upload_page"),
path("list/", file_list_page, name="file_list_page"),
path("delete/<int:pk>/", file_delete_page, name="file_delete_page"),
]
# config/urls.py
path("files/", include("files.urls_html"))
# 템플릿에서 호출 방식 -> {% url '네임스페이스:URL네임' %}
{% url 'html_files:file_list_page' %}
딕셔너리 처럼 생각해도 됨data = {"name": "Tom", "age": 20}
data.get("name") # "Tom"
data.get("job") # None ← 에러 안 나고 None
name = request.POST.get("name")<input name="name"> 에 입력한 값을 POST에서 꺼냄period = request.GET.get("period")import matplotlib
matplotlib.use("Agg")
class PostForm(forms.ModelForm):from django import forms 필요 super.__init__(*args, **kwargs) → 오류 발생 def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
super().__init__(*args, **kwargs) : 이게 맞는 표현super → super()