[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=30, null=False) #null을 허용하지 않겠다. # addr 필드 설정 (최대 길이 : 50, null 허용) addr=CharField(max_length=50, null=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 |
댓글