def q_registe(request): #사용자 요청이 GET인지 POST인지 구분 if request.method == 'GET': #QuestionForm의 객체를 생성 #QuestionForm 객체를 생성할 때 입력값이 없는 형태로 생성하면 input태그에 아무런 값도 입력되어있지 않은 상태의 객체가 생성됨 form = QuestionForm() #객체를 바탕으로 HTML코드로 변환 #as_p, as_table, as_ul 함수 : form객체에 입력할 수 있는 공간들을 <input>태그로 변환하면서 <p>, <tr>과 <td>, <li> 태그로 감싸주는 기능이 있는 함수 rendered = form.as_p() print(rendered) #변환값을 HTML파일에 전달 return render(request, 'vote/q_registe.html', {'rendered': rendered}) elif request.method == 'POST': #QuestionForm 객체를 생성 - 사용자 입력을 바탕으로 생성 form = QuestionForm(request.POST) #QuestionForm 객체와 연동된 Question 객체를 생성 및 DB에 저장 #form.save(commit=False) : 연동된 모델 클래스의 객체로 변환만 하는 함수 #form.save() : 연동된 모델 클래스의 객체를 생성 및 DB에 저장 new_q = form.save() print(new_q) #생성된 Question 객체의 id 값으로 detail뷰의 링크를 전달 return HttpResponseRedirect(reverse('detail', args=(new_q.id, )))
def qregister(request): #사용자의 요청방식을 구분 #GET방식 -> HTML을 전달 if request.method == "GET": #Form클래스 이용방법 #객체 생성 후 as_p, as_table, as_ul 함수를 #호출하면 <input>태그를 자동생성해줌 form = QuestionForm() print(form.as_p()) #입력양식을 행,열단위로 HTML코드 생성 html = form.as_table() return render(request,'vote/qform.html', {'form' : html}) # POST방식 -> 사용자 입력기반의 Question객체 생성 elif request.method == "POST": # request.POST : 사용자 입력 데이터 저장 변수 # 사용자가 보낸 데이터를 기반으로 QuestionForm # 객체 생성 form = QuestionForm(request.POST) # 사용자가 보낸 데이터가 유효한 값인지 확인 if form.is_valid(): """ 폼객체.is_valid() : 사용자 입력이 유효한경우 True반환, 추가적으로 cleaned_data 변수를 사용해 데이터를 추출할수있음 만약에 유효한값이 아닌경우 False반환, 사용자의 입력을 다시 받을 수 있도록 HTML코드를 전달 모델폼객체는 연동된 모델객체를 생성할 수 있음 모델폼객체.save() : 반환값 생성된 모델객체. 내부적으로 데이터베이스에 새로운 객체가 저장됨 현재 QuestionForm객체로 title변수만 값이 작성되있어 데이터베이스에 바로 저장을 할 수 없음(pub_date변수값없음) 모델폼객체.save(commit=False) : 데이터베이스에 저장하지않고, 모델객체만 반환함 """ # form 객체와 연동된 모델객체를 q변수에 저장 # q : Question객체를 저장한 상태 q = form.save(commit=False) print('생성할 객체의 제목', q.title) print('id 변수값 : ' , q.id) # 새로 생성할 객체에 서버컴퓨터의 현재날짜를 저장 q.pub_date = datetime.now() # 객체를 데이터베이스에 저장 q.save() print('객체 생성 후 id 변수값 : ', q, id) # reverse 함수 : 파이썬 코드내에서 별칭기반으로 # URL을 찾을 수 있는 함수 # reverse(별칭 문자열, args=(매개변수값,)) # index 뷰함수 호출 return HttpResponseRedirect(reverse('vate:index')) else: pass
def qregister(request): ''' 사용자의 요청방식을 구분 get 방식 -> html을 전달 post 방식 ->사용자 입력기반의 Question객체 생성 ''' if request.method == 'GET': form = QuestionForm() print(form.as_p()) #입력양식을 행, 열단위로 html코드 생성 html = form.as_table() return render(request,'vote/qform.html', {'form': html}) # Form클래스 이용방법 # 객체 생성 후 as_p, as_table, as_ul 함수를 호출하면 <input>태그를 자동생성해줌. elif request.method == 'POST': # request.POST: 사용자 입력 데이터 저장변수- # 사용자가 보낸 데이터를 기반으로 QuestionFrom # 객체 생성 form= QuestionForm(request.POST) #사용자가 보낸 데이터가 유효한 값인지 확인 if form.is_valid(): ''' 폼객체.is_valid(): 사용자 입력이 유효할 시 True반환, 추가적으로 cleaned_data 변수를 사용해 데이터를 추출할 수 있음. 유효값이 아닐 경우 False반환, 사용자의 입력을 다시 받을 수 있도록 html코드 전달 모델폼 객체는 연동된 모델 객체를 생성할 수 있음. 모델폼객체.save(): 반환앖 생성된 모델객체. 내부적으로 데이터 베이스에 새호운 객체가 저장됨. 현재 QuestionForm 객체로 title변수만 값이 작성되어있어 데이터 베이스에 바로 저장 불가(pub_date 변수 값 없음) 모델폼객체.save(commit=False):데이터 베이스에 저장 안 하고 모델 객체만 반환함. ''' #form 객체와 연동된 모델 객체를 q변수에 저장 #q : Question 객체를 저장한 상태 q= form.save(commit=False) print('생성할 객체의 제목', q.title) print('id 변수값:',q.id) #새로 생성할 객체에 서버컴퓨터의 현재 날짜를 저장 q.pub_date = datetime.now() #객체를 데이터베이스에 저장 q.save() print('객체 생성 후 id 변수 값:', q.id) #reverse 함수: 파이썬 코드 내에서 별칭 기반으로 url을 찾을 수 있는 함수 #reverse(병칭 문자열, args=(매개변수값,)) #index 뷰 함수 호출 return HttpResponseRedirect( reverse('vote:index') ) else: pass
def qupdate(request, q_id): #수정할 대상의 객체 추출 q = get_object_or_404(Question, id = q_id) #GET 방식 요청 if request.method == 'GET': #수정할 객체를 기반으로 QuestionForm 객체 생성 obj = QuestionForm(instance = q) #HTML 파일전달 return render(request,'vote/qupdate.html',{'form':obj.as_p()}) #POST 방식 요청 if request.method == 'POST': #사용자 입력+수정할 객체를 기반으로 QuestionForm 객체를 생성 obj = QuestionForm(request.POST, instance=q) #수정을 하는 객체를 바탕으로 QuestionForm 객체가 생성됬기 때문에 pub_date변수는 이미 값이 채워져있음 #->바로 데이터베이스에 저장 w = obj.save() print('수정할 객체 q의 id값 : ',q.id) print('폼객체가 준 객체의 id값 : ',w.id) #다른 URL에 전달 return HttpResponseRedirect('/vote/%s/' % w.id)
def q_registe(request): #사용자 요청이 GET인지 POST인지 구분 if request.method == "GET": #GET으로 요청했을때는 HTML로 제공 #QuestionForm 객체를 생성 #QuestionForm 객체를 생성할 때 입력값이 없는 형태로 생성하면 #Input 태그에 아무런 값도 입력되있지 않은 상태의 객체가 생성됨 form = QuestionForm() #QuestionFrom 객체 하나 생성 #객체를 바탕으로 HTML 코드로 변환 #as_p(),as_table,as_ul함수 : Form 객체에 입력할 수 있는 #공간들을 <input>으로 변환하면서 <p>,<tr>,<td><li<태그로 #감싸누는 기능이 있는 함수 rendered = form.as_p() print(rendered) #변환값을 HTML 파일에 전달 return render(request, "vote/q_registe.html", {'rendered': rendered}) elif request.method == "POST": #POST로 요청했을때는 다른 주소를 제공 #QuestionForm 객체를 생성 - 사용자 입력 바탕으로 생성 form = QuestionForm(request.POST) #사용자가 입력한 값 기반으로 데이터 생성? #QuestionForm 객체와 연동된 Question 객체를 생성 및 저장 #form.save(commit=False) # : 연동된 모델클래스의 객체로 변환만 하는 함수 # 데이터 베이스에 저장은 하지 않고 객체로 변경만? #form.save():연동된 모델클래스의 객체를 생성 및 데이터 베이스에 저장 new_q = form.save() print(new_q) #새로운 객체가 형성되었다. #생성된 Question객체의 id값으로 detail뷰의 링크를 전달 return HttpResponseRedirect(reverse('detail', args=(new_q.id, )))