9번째 줄: |
9번째 줄: |
| def 함수명(request): | | def 함수명(request): |
| if request.method=='GET': # 해당 요청이 없는데 다음 과정을 진행하면 서버에러가 난다. | | if request.method=='GET': # 해당 요청이 없는데 다음 과정을 진행하면 서버에러가 난다. |
− | 담을변수 = request.GET.get('input의 이름속성') #이름속성에 넣었던 데이터가 변수에 담긴다. | + | 담을변수 = request.GET.get('input의 이름속성') # 탬플릿의 이름속성에 넣었던 데이터가 변수에 담긴다. |
− | 담을변수2 = request.GET.get('input의 이름속성2') #이름속성2에 넣었던 데이터가 변수에 담긴다. | + | 담을변수2 = request.GET.get('input의 이름속성2') # 이름속성2에 넣었던 데이터가 변수에 담긴다. |
| </syntaxhighlight>post라면... | | </syntaxhighlight>post라면... |
| | | |
| request.POST['name속성'] 혹은 request.POST.get('name속성') 형태로 전달받은 변수의 값들을 확인할 수 있다.(항상 문자열) | | request.POST['name속성'] 혹은 request.POST.get('name속성') 형태로 전달받은 변수의 값들을 확인할 수 있다.(항상 문자열) |
| + | |
| + | 여러 데이터를 받아와야 할 땐 request.POST.getlist('name속성')으로 같은 name을 가진 값들을 리스트로 받을 수 있다. |
| | | |
| 사전처럼 그 키로 값을 받아온다. '변수'가 없으면 KeyError를 발생시키고, 조건에 맞는 객체가 없으면 <code>객체.DoesNotExist</code> 에러가 발생한다. | | 사전처럼 그 키로 값을 받아온다. '변수'가 없으면 KeyError를 발생시키고, 조건에 맞는 객체가 없으면 <code>객체.DoesNotExist</code> 에러가 발생한다. |
21번째 줄: |
23번째 줄: |
| | | |
| 일반적으로 post입력을 받은 후엔 redirect로 돌려준다.(그렇지 않고 계속 render를 사용하면 post요청이 반복되어 새로고침하면 같은 글이 연속적으로 올라오는 문제가 생긴다.) | | 일반적으로 post입력을 받은 후엔 redirect로 돌려준다.(그렇지 않고 계속 render를 사용하면 post요청이 반복되어 새로고침하면 같은 글이 연속적으로 올라오는 문제가 생긴다.) |
| + | |
| + | 폼 체크를 통과한 입력값은 form.cleaned_data로 접근할 수 있다. 사전형태로. |
| + | |
| + | form.cleaned_data['이름'] 형태로. |
| + | |
| ==저장하기== | | ==저장하기== |
| DB에 저장하기 위해선 모델을 불러와 담아야 한다.<syntaxhighlight lang="python"> | | DB에 저장하기 위해선 모델을 불러와 담아야 한다.<syntaxhighlight lang="python"> |
52번째 줄: |
59번째 줄: |
| ===무언가 누락했을 때 발생시키기=== | | ===무언가 누락했을 때 발생시키기=== |
| 모델, 폼에서의 제약을 걸어주면 누락될 때 자연스레 발생시켜준다. | | 모델, 폼에서의 제약을 걸어주면 누락될 때 자연스레 발생시켜준다. |
| + | |
| + | === 필드에 에러 추가하기 === |
| + | 뷰를 통해 임의로 필드에러를 추가할 경우.<syntaxhighlight lang="python"> |
| + | form.add_error('필드','추가할 에러') |
| + | </syntaxhighlight> |
| + | = 모델폼이 아닌, 그냥 폼에서 모델 다루기..(아직 검증 안됨. 프로필 구현하다가 멈춰서...) = |
| + | 아래 코드로... profile을 만들고, user에 대한 것을 수정, 저장할 수 있을까???? 해봐야 함... |
| + | |
| + | 모델폼이 아닌, 그냥 폼으로 여러 처리를 하고 싶을 때.<syntaxhighlight lang="python"> |
| + | '''계정 속성을 검증해서 이 사이트에서 회원가입한 계정의 경우에만 접속할 수 있게 하자. 앗, 그러면...sns계정 로그인 시엔 어찌하지;''' |
| + | if request.method == "POST": |
| + | from .models import Profile |
| + | form = Profile_create_form(request.POST) |
| + | if form.is_valid(): |
| + | username = form.cleaned_data.get('identifier') # 유저아이디를 입력받는다. |
| + | raw_password = form.cleaned_data.get('password') # 패스워드를 입력받는다. |
| + | user = authenticate(username=username, password=raw_password) # 인증 진행 |
| + | if user: # 유저모델이 반환된다면.. 프로필 모델에 저장한다. |
| + | profile = Profile() |
| + | profile.username = form.cleaned_data.get('username') |
| + | profile.nickname = form.cleaned_data.get('nickname') |
| + | profile.email = form.cleaned_data.get('email') |
| + | profile = profile.save() |
| + | request.user.profile = profile # 해당 로그인한 유저의 프로필을 이 프로필로 채운다. |
| + | request.user.save() |
| + | return redirect('account:profile') |
| + | else: |
| + | form.add_error('identifier','비밀번호 혹은 아이디가 다릅니다.') |
| + | else: |
| + | form = Profile_create_form() |
| + | context = {'form': form, |
| + | } |
| + | return render(request, 'account/profile_create.html', context) |
| + | </syntaxhighlight> |