from django.contrib import admin
from django.urls import path
from . import views
app_name='members'
urlpatterns = [
path('', views.index, name='home'),
path('add/', views.add, name='add'),
]
members 앱의 url은 mysite/urls.py의 서브 url로 정의되어있어야 합니다.
<mysite/urls.py>
from django.contrib import admin
from django.urls import path, include
from mysite.views import HomeView
urlpatterns = [
path('admin/', admin.site.urls),
path('', HomeView.as_view(), name='home'),
path('members/', include('members.urls')), // 잊지말고 추가!!
]
7. members/view.py
조회함수는 초기 화면구성 함수인 index에 함께 구성합니다. 기본은 모든 members리스트를 다 보여주고, 조회조건이 있을 시에는, 데이터를 GET방식으로 가져와 query하여 결과를 context에 실어서 보여줍니다.
입력함수는 별도로 add라는 함수를 구성하였습니다. index.html의 입력폼에서 id/name/email을 가져와 Member 클래스의 객체를 생성하고, 다시 home url로 보냅니다. 그러면 초기 화면에서는 전체 리스트를 보여줍니다.
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from members.models import Members
#### 초기화면 및 조회함수 ####
def index(request):
list = Members.objects.all()
# HTML에서 인자가 전달될 경우 처리
q = request.GET.get('q', '')
if q:
list = Members.objects.filter(id=q)
# 여기까지
context = {'member_list': list}
return render(request, 'index.html', context)
#### 입력함수 ####
def add(request):
id = request.POST.get('id','')
name = request.POST.get('name','')
email = request.POST.get('email', '')
member_add = Members(id=id, name=name, email=email)
member_add.save(force_insert=True)
# 데이터 입력 후에는 첫페이지 url로 다시 보냅니다.
return HttpResponseRedirect(reverse('members:home'))
참고로, 폴더 구성/인식을 위한 기본 세팅을 아래에 적어놓습니다.
<참고: mysite/settings.py>
"""
Django settings for mysite project.
Generated by 'django-admin startproject' using Django 3.2.9.
For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-t)05#=7yvsemt_tyu9dksl7j$$br(7wfgyguds3@#-bj5t$m+7'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'members.apps.MembersConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'mysite.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'], # 수정
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'mysite.wsgi.application'
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db' / 'db.sqlite3', # 수정
}
}
# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Seoul' # 수정
USE_I18N = True
USE_L10N = True
USE_TZ = False # 수정
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/
STATIC_URL = '/static/'
# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
### 추가 ###
STATICFILES_DIR = (BASE_DIR/'static',)
# STATIC_ROOT = # 배포시 사용
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR/'media'
# AUTH_USER_MODEL =
# LOGGING =