본문 바로가기
WEB기초/Django

[Django] CRUD 만들기

by 별토끼. 2017. 8. 21.
반응형


[Django] CRUD 만들기



* python 프로젝트 기본 setting 하는 법


1. Django Project 생성


2. migrate 를 해준다.


3. static 폴더와 templates 폴더를 만든다.


4. settings.py => static 폴더와 templates 폴더 설정



1.

프로젝트 생성 후 가장 먼저 migrate를 해줘야한다.



2.

프로젝트에 templates, static 폴더 만들기


3.

settings.py에 설정하기

- TEMPLATES 위에 넣기

1
2
#프로젝트의 templates 폴더의 절대 경로 얻어와서
tempDir=os.path.join(BASE_DIR, "templates")
cs

- 맨 아래에 넣기

1
STATICFILES_DIRS=(os.path.join(BASE_DIR,"static"),)
cs

- Language, Time_zone 수정하기

1
2
3
LANGUAGE_CODE = 'ko'
 
TIME_ZONE = 'Asia/Seoul'
cs


*출력 결과


[super user만들기]


1.


2.



3.


4.




[CRUD 생성 setting 하기]


1.

- package 만드는 개념과 비슷하다. 

- 패키지에서 마우스 우클릭 - Create application을 누른 뒤 이름을 member로 하여 생성한다.


2.

모델 설정

1
2
3
4
5
6
7
8
9
10
# 회원정보를 관리할 모델 설정
 
# Member 모델 정의
class Member(models.Model):
    # num 필드 설정 (자동 증가되는 primary key 값)
    num=AutoField(primary_key=True)
    # name 필드 설정 (최대 길이 : 30, null 허용하지 않음)
    name=CharField(max_length=30null=False) #null을 허용하지 않겠다.
    # addr 필드 설정 (최대 길이 : 50, null 허용)
    addr=CharField(max_length=50null=True) #null을 허용하겠다.
cs



3.

admin.py

1
2
3
4
5
6
7
8
9
10
11
12
13
#-*- coding: utf-8 -*-
 
from django.contrib import admin
from member.models import Member
 
# Register your models here.
# 관리자 모드에서 관리할 모델정보 설정
class MemberAdmin(admin.ModelAdmin):
    # num, name, addr 필드를 볼 수 있도록 설정
    list_display=('num''name''addr')
    
# 등록하기
admin.site.register(Member, MemberAdmin)
cs


4.

member를 추가한 후 settings에 추가


1
2
3
4
5
6
7
8
9
10
11
# Application definition
 
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'member'# 만든 application 의 이름 설정
]
cs


5.

make migration-migrate 연속으로 해준다.


6.

views.py 만들기

1
2
3
4
5
6
7
#-*- coding: utf-8 -*-
from django.shortcuts import render
 
def index(request):
    # templates/index.html 을 읽어서 출력하도록
    return render(request, 'index.html')
 
cs


7.

url

1
2
3
4
5
6
7
from Step03_CRUD import views
 
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.index)
]
 
cs



8.

templates에 index.html 생성하기


9.

member 어플리케이션에 urls 생성하기


10.

메인 urls에 요청 목록 추가하기

- member로 시작하는 요청은 member.urls로 넘겨주기

1
2
3
4
5
6
7
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.index),
    # /member/ 하위 요청을 처리할 urls.py 설정
    url(r'^member/', include('member.urls')),
]
 
cs


11.

member urls에 패턴 추가하기

1
2
3
4
5
6
7
8
9
10
11
 
urlpatterns = [
    url(r'^list/', ),
    url(r'^insertform/', ),
    url(r'^insert/', ),
    url(r'^delete/',),
    url(r'^updateform/', ),
    url(r'^update/', ),
]
 
 
cs



12.

member views에 추가하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from django.shortcuts import render
 
# Create your views here.
 
def list(request):
    pass
 
def insertform(request):
    pass
 
def insert(request):
    pass
 
def delete(request):
    pass
 
def updateform(request):
    pass
 
def update(request):
    pass
 
 
cs


13.

views 에 def list 작성하기

- 직접 sql문을 작성할 필요가 없다는 것이 특징.

- Member 모델의 모든 데이터를 가지고 온다.


1
2
3
4
5
6
7
8
def list(request):
    # Member 모델의 모든 데이터를 가지고 온다.
    member_list=Member.objects.all().order_by('num')
    return render(
        request,
        'member/list.html',
        {'member_list':member_list},
    )
cs



[insert]


1.

insertform.html 생성


2.

insertform 과 insert def 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def insertform(request):
    return render(request, 'member/insertform.html')
 
def insert(request):
    # post 방식 전송되기 위해서는 form 안에 {% csrf_token %} 작성
    # post방식 전송되는 파라미터추출해서 Member 모델 객체 생성
    mem=Member(
        name=request.POST.get("name"),
        addr=request.POST.get("addr"),
    )
    # DB에 반영
    mem.save()
    # 리다일렉트 이동하라고 응답
    return HttpResponseRedirect('/member/list/')
 
cs


3.

보안 관련 오류- Forbidden : CSrf 검증에 실패했습니다. 요청을 중단하였습니다. 오류




해결방법

- 아래와 같이 {% csrf_token %} 을 추가해준다.




[Delete]


1.

html에 delete버튼 생성하기


2.

views

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def delete(request):
    # get 방식 전달되는 삭제할 번호 얻어오기
    #num= request.GET.get("num")
    # 삭제하기
    #mem=Member.objects.get(num=num)
    #mem.delete()
    
    # 위의 작업을 한줄로 표현하면 ...
    Member.objects.get(num=request.GET.get("num")).delete()
    
    #return HttpResponseRedirect("/member/list/")
    return render(
        request,
        'member/alert.html',
        {
            "msg":u"삭제 했습니다.",
            "url":"/member/list/",
        },
    )
cs


3.

alert.html생성하기



[Update]


1.

html 에 수정버튼 생성하기


2.

views

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def updateform(request):
    # get 방식 전달된 수정할 회원의 번호를 이용해서 회원 정보를 얻어온다.
    member=Member.objects.get(num=request.GET.get("num")) 
    # member 는 dict type 이다.
    return render(
        request,
        'member/updateform.html',
        {"member":member}
    )
def update(request):
    member=Member(
        num=request.POST.get("num"),
        name=request.POST.get("name"),
        addr=request.POST.get("addr"),
    )
    # .save() 메소드는 data 가 있으면 수정 반영, 없으면 insert
    member.save()
    return render(
        request,
        'member/alert.html',
        {"msg":u"수정했습니다.""url":"/member/list/"},    
    )
cs



반응형

'WEB기초 > Django' 카테고리의 다른 글

[Django] application 이용하기  (0) 2017.08.18
[Django] Request/Response/Redirect  (0) 2017.08.18
[Django] Django시작하기  (0) 2017.08.17

댓글